[英]In VBA, how do I access the subject of a With statement from within that statement?
我正在以一種更快的方式在一些先前編寫的代碼中循環遍歷表中的一列。 我的問題是,在某個時候,我需要根據范圍和附近單元格的值,將With語句的主題(單個單元格范圍)分配給一系列范圍。
我已經修剪了代碼,只使用了問題所必需的那些位。 見下文:
Dim wb As Workbook
Dim wsFit As Worksheet
Dim fittingsTable As ListObject
ReDim fittings(0) As Range
Dim x As Integer
Dim y As Integer
Set wb = ActiveWorkbook
Set wsFit = wb.Worksheets("Fittings")
Set fittingsTable = wsFit.ListObjects("FittingsTable")
For x = 1 To fittingsTable.DataBodyRange.Rows.Count
With fittingsTable.DataBodyRange(x, 15)
If .Value <> vbNullString And .Value <> "0" Then
If .Offset(0, -2).Value <> "TBC" Then
'Do some stuff
Set fittings(y) = 'PROBLEM HERE
Else
'Do other stuff here
End If
End If
End With
Next
我想將fittingsTable.DataBodyRange(x,15)分配給fittings(y),但是我不知道如何訪問With語句的主題范圍。
我知道我可以在With語句開始之前將所需范圍分配給另一個變量,然后將該變量分配給fittings(y),但是我覺得必須有一種簡單的方法來訪問With語句的初始主題,因此我不會再用更多變量阻塞代碼。 我也可以使用.Address屬性使用工作表分配范圍,但目前我真的很想找到一種更直接的方法。
您的With
塊保存一個Range
對象引用。
您可以使用.Cells
(無參數)屬性來檢索對該Range
對象的引用:
Set fittings(y) = .Cells
或者,更明確地說,它是單單元格范圍:
Set fittings(y) = .Cells(1, 1)
這將進行隱式默認成員調用,該調用最終最終等同於:
Set fittings(y) = .Item(1, 1)
這適用於Range
。 對於許多其他類,沒有屬性返回對對象的引用。 例如,一個Collection
:
With New Collection
.Add 42
Set foo = ???? ' can't get a reference to the Collection object!
End With
通用的解決方案是將With
塊變量提取到局部變量中,現在可以像訪問其他任何局部變量一樣訪問該變量:
Dim c As Collection
Set c = New Collection
With c
.Add 42
Set foo = c
End With
對於您控制的自定義類,可以有一個返回Me
的屬性getter:
Public Property Get Self() As Class1
Set Self = Me
End Property
現在,可以通過該屬性訪問With
塊變量:
With New Class1
.Something = 42
Set foo = .Self
End With
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.