在VBA中使用变量作为函数参数,特别是Cells()函数

2024-05-13 17:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我与loops&;VBA中的数组

我在网上看了很多视频,但没有一个老师看过

在Python中,您可以通过设置my变量的索引来动态访问数组中的值:

array1 = [1,2,3,4,5]
b = 0

while(b < len(array1)):
  print(array1[b])
  b = b + 1

您可以使用iloc功能执行类似的操作…通过这种方式,我可以将变量_currentRow7更改为我想要的任何内容…我只需要执行_currentRow7 = _currentrow7+1

Array.iloc[_currentRow7, 11])

使用VBA Cells函数,我得到一个错误。本质上,我希望动态地从Excel访问值。例如-单元格(变量,1)…然后随着变量的变化,我正在访问下一个单元格中的值

Sub HomeRunCounterFNCTN()

Dim HomeRuns(27) As Integer
Dim HRCounter As Variant

Worksheets("Baseball").Activate
Range("L3").Activate
For HRCounter = 0 To 27

    HomeRuns(HRCounter) = ActiveCell.Offset(HRCounter, 0).Value
    If (HomeRuns(HRCounter) >= 45) Then MsgBox (HomeRuns(HRCounter))
    MsgBox (Cells(HRCounter & 1))

Next HRCounter

End Sub

基本上,我希望MsgBox(Cells(HRCounter&;1))随着变量HRCounter的变化而动态更新


Tags: as动态数组vbaampactivatedimcells
1条回答
网友
1楼 · 发布于 2024-05-13 17:28:45

我能够毫无错误地运行您的代码,因此正如@Tim Williams所说的,描述您所遇到的错误会很有帮助

我确实在这一行中发现了一个非致命缺陷:

MsgBox (Cells(HRCounter & 1)

你可能是指Cells(HRCounter, 1)。输入错误不会导致程序错误,但该行无法捕获您想要捕获的内容

除了打字错误之外,代码似乎做了您希望它做的事情。然而,为了更直接地回答您的问题,您当然可以使用可变单元格引用。在基本模式中,只需使用SomeWorksheet.Cells(MyVar,1).Value,其中MyVar是保存行号的变量

要编写高效的VBA代码,请尽可能避免ActivateSelect。把它们想象成模仿人类用户行为的代码,这是很少需要的。而是直接使用Excel对象及其属性。您的代码可以按如下方式重铸,这也将使变量行引用的使用更加可见:

Sub HomeRunCounterFNCTN()
    
    Dim HomeRuns(27) As Integer, ReadRow As Integer
    Dim HRCounter As Variant
    
    With Worksheets("Baseball")
    
        For HRCounter = 0 To 27
            ReadRow = HRCounter + 3
            HomeRuns(HRCounter) = .Cells(ReadRow, 12).Value
            If (HomeRuns(HRCounter) >= 45) Then MsgBox HomeRuns(HRCounter)
        Next HRCounter
    
    End With

End Sub

相关问题 更多 >