如何通过变量引用Excel中的单元格并在Visual Basic中访问其所有属性?

如何通过变量引用Excel中的单元格并在Visual Basic中访问其所有属性?,excel,variables,cell,Excel,Variables,Cell,我正在Excel中处理一个宏,它需要遍历整个列,找到非零数据的集群,将数据相加,并将结果存储在提到的集群附近。然后,它继续在专栏中查找其他集群,并执行相同的操作 这就是说,我试图将对“目标”单元格的引用(添加的集群将存储在该单元格中)存储在一个变量中,然后使用该变量访问单元格的“值”属性,以便对其进行更改 代码如下: Sub addNonZeroes() Dim targetCell ' Select cell E5, *first line of data*. Range("E5"

我正在Excel中处理一个宏,它需要遍历整个列,找到非零数据的集群,将数据相加,并将结果存储在提到的集群附近。然后,它继续在专栏中查找其他集群,并执行相同的操作

这就是说,我试图将对“目标”单元格的引用(添加的集群将存储在该单元格中)存储在一个变量中,然后使用该变量访问单元格的“值”属性,以便对其进行更改

代码如下:

 Sub addNonZeroes()

 Dim targetCell

 ' Select cell E5, *first line of data*.
 Range("E5").Select
 ' Set Do loop to stop when an empty cell is reached.
 Do Until IsEmpty(ActiveCell)
    If ActiveCell.Value <> 0 Then
         targetCell = ActiveCell.Offset(1, 0)
            Do Until ActiveCell.Value = 0
                'ERROR OCCURS HERE
                targetCell.Value = ActiveCell.Value + targetCell.Value
                ActiveCell.Offset(0, 1).Select
            Loop
    End If

    ' Step down 1 row from present location.
    ActiveCell.Offset(1, 0).Select
 Loop

 End Sub
子添加非零()
暗靶细胞
'选择单元格E5,*第一行数据*。
范围(“E5”)。选择
'将Do循环设置为在到达空单元格时停止。
直到IsEmpty(ActiveCell)为止
如果ActiveCell.Value为0,则
targetCell=ActiveCell.Offset(1,0)
直到ActiveCell.Value=0为止
“错误发生在这里
targetCell.Value=ActiveCell.Value+targetCell.Value
ActiveCell.Offset(0,1)。选择
环
如果结束
'从当前位置下一行。
ActiveCell.Offset(1,0)。选择
环
端接头
代码错误的来源 发生此错误是因为您的targetCell未真正定义

你应该:

  • 定义变量并键入它
  • 使用
    Set
    关键字指定对象
以下是您的代码:

Sub addNonZeroes()

 Dim targetCell As Range

 ' Select cell E5, *first line of data*.
 Range("E5").Select
 ' Set Do loop to stop when an empty cell is reached.
 Do Until IsEmpty(ActiveCell)
    If ActiveCell.Value <> 0 Then
         Set targetCell = ActiveCell.Offset(1, 0)
            Do Until ActiveCell.Value = 0
                'ERROR OCCURS HERE
                targetCell.Value = ActiveCell.Value + targetCell.Value
                ActiveCell.Offset(0, 1).Select
            Loop
    End If

    ' Step down 1 row from present location.
    ActiveCell.Offset(1, 0).Select
 Loop

 End Sub
有关更多示例,请参见此线程:

Dim c As Range
For Each c in Range("E5:E100")
   If c.Value <> 0 Then
      'do whatever
   End If
Next c
Dim arr As Variant, i As Integer
arr = Range("E5:E100").Value
For i = LBound(arr , 2) To UBound(arr , 2)
  'check for any empty value
Next i