gpt4 book ai didi

excel - 在 VBA 中,如何从该语句中访问 With 语句的主题?

转载 作者:行者123 更新时间:2023-12-04 22:29:34 27 4
gpt4 key购买 nike

我正在研究一种更快的方法来循环浏览以前编写的代码中的表中的列。我遇到的问题是,在某些时候我需要将 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) 分配给fits(y),但我不知道如何访问作为With 语句主题的范围。

我知道我可以在 With 语句开始之前将所需范围分配给另一个变量,然后将该变量分配给配件(y),但我觉得必须有一种简单的方法来访问 With 语句的初始主题,所以我最终不会用更多变量阻塞我的代码。我也可以使用 .Address 属性来使用工作表分配范围,但此时我真的很想找到更直接的方法。

最佳答案

您的 With block 持有 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将 block 变量转换为局部变量,现在该变量可以像任何其他局部变量一样访问:
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 block 变量可通过该属性访问:
With New Class1
.Something = 42
Set foo = .Self
End With

关于excel - 在 VBA 中,如何从该语句中访问 With 语句的主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54312792/

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