簡體   English   中英

For Each循環不查看Range.Columns的單個單元格

[英]For Each loop does not look at individual cells for Range.Columns

我有一個函數,它傳遞一系列和兩個范圍作為參數:

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'的“Method'DataLabel'失敗了”。

試圖追查錯誤,我嘗試打印出在環路中使用的每個對象的值,並且發現,而不是循環在范圍從由一個抵消內每個小區yverdier如我所料, c引用在第一整列直通。

通常當我使用類似的構造時情況並非如此,為什么foreach -loop在這種情況下表現不同? 解決問題的最簡單方法是什么?

顯然我可以for i = 1 to c.rows.count...但我很困惑,對我來說VBA的奇怪行為。

我認為這是預期的行為。

您將yverdier定義為langsone.Columns(2) ,這意味着yverdierRange類型的集合,集合中有一列(多個單元格)。 我認為你的解釋是yverdier是由langsone.Columns(2)中的單元格組成的單一范圍,但兩者之間存在細微差別。

因此,您的For...Each 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM