簡體   English   中英

在VBA中,如何從該語句中訪問With語句的主題?

[英]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.

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