gpt4 book ai didi

vba - For Each 循环不查看 Range.Columns 的单个单元格

转载 作者:行者123 更新时间:2023-12-01 06:46:14 25 4
gpt4 key购买 nike

我有一个函数,它传递一个系列和两个范围作为参数:

Call settInnISerie(.SeriesCollection("Toppsuging"), r, langsone.Columns(2))
Sub settInnISerie(srs As Series, xverdier As Range, yverdier As Range)
Dim c As Range
Dim i As Long

srs.XValues = xverdier
srs.Values = yverdier
i = 1
srs.ApplyDataLabels
For Each c In yverdier.Offset(0, -1)
If Not IsError(c) And i <= srs.Points.Count Then
srs.Points(i).DataLabel.Text = "=" & Replace(c.Address(external:=True), "[" & ThisWorkbook.Name & "]", "", 1, -1, vbTextCompare)
End If
i = i + 1
Next c
End Sub

但是,我在 if 语句内的行中收到错误,提示“对象‘Point’的方法‘DataLabel’失败”。

为了追查错误,我尝试打印出循环中使用的每个对象的值,并发现不是像我那样循环遍历 yverdier 偏移范围内的每个单元格预计,c 在第一次传递时引用整个列。

通常当我使用类似的构造时情况并非如此,为什么 foreach 循环在这种情况下表现不同?解决问题的最简单方法是什么?

显然我可以for i = 1 to c.rows.count... 但我对 VBA 的奇怪行为感到困惑。

最佳答案

我认为这是预期的行为。

您将 yverdier 定义为 langsone.Columns(2) 这意味着 yverdierRange 的集合类型,在集合中只有一列(多个单元格)。我认为您的解释是 yverdier 是由 langsone.Columns(2) 中的单元格组成的单个范围,但两者之间存在细微差别。

因此,您在 Range 上的 For...Each 循环将迭代集合中的每一列(单个列),而不是 Cells。我认为如果编码你会得到你想要的行为:

For Each c In yverdier.Offset(0, -1).Cells

此示例代码和调试输出显示了我在实践中的意思 - 只需创建一个空白工作簿并将此代码放入 Module 中:

Option Explicit

Sub Test()

Dim rngSource As Range
Dim rng As Range

Set rngSource = Sheet1.Range("A1:D3")

Debug.Print "Columns:"
For Each rng In rngSource.Columns
Debug.Print rng.Address
Next rng

Debug.Print "Rows:"
For Each rng In rngSource.Rows
Debug.Print rng.Address
Next rng

Debug.Print "Cells:"
For Each rng In rngSource.Cells
Debug.Print rng.Address
Next rng

Debug.Print "No property:"
For Each rng In rngSource
Debug.Print rng.Address
Next rng

End Sub

这将给出以下输出:

Columns:
$A$1:$A$3
$B$1:$B$3
$C$1:$C$3
$D$1:$D$3
Rows:
$A$1:$D$1
$A$2:$D$2
$A$3:$D$3
Cells:
$A$1
$B$1
$C$1
$D$1
$A$2
$B$2
$C$2
$D$2
$A$3
$B$3
$C$3
$D$3
No property:
$A$1
$B$1
$C$1
$D$1
$A$2
$B$2
$C$2
$D$2
$A$3
$B$3
$C$3
$D$3

关于vba - For Each 循环不查看 Range.Columns 的单个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38896800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com