我基本上使用的是别人设计的脚本,该脚本在excel工作表的各个点之间绘制箭头。我的电子表格中有数据,其中显示了需要链接的单元格,我试图将这些单元格的值调用到我正在使用的宏脚本的调用中,并将其作为循环运行,以便创建所需的所有箭头
每次添加.value的行都失败。在遇到类似问题后,我尝试了不同的方法,但没有完全按照我的要求去做,所以我不知所措
我要提取的存储范围值看起来像$ B $ 5。
Private Sub CommandButton1_Click()
Dim rng As Range, cell As Range, rngstart As Range, rngend As Range
Set rng = Range("E5:E100")
For Each cell In rng
If cell.Value = "Yes" Then
cell.Select
Set rngstart = Range("K" & (ActiveCell.Row)).Value
Set rngend = Range("H" & (ActiveCell.Row)).Value
Call DrawArrows(Range(rngstart), Range(rngend), RGB(0, 0, 255), "Single")
End If
Next cell
End Sub
调用脚本之前的原始代码如下:
Call DrawArrows(Range("b1"), Range("c4"), RGB(0, 0, 255), "Double")
答案 0 :(得分:3)
您正在使用rngstart
和rngend
,就好像它们是您对DrawArrows
的调用中的字符串一样。
Call DrawArrows(Range(rngstart), Range(rngend), RGB(0, 0, 255), "Single")
...但是您在这里将它们视为对象:
Set rngstart = Range("K" & (ActiveCell.Row)).Value Set rngend = Range("H" & (ActiveCell.Row)).Value
这应该是运行时错误424,因为您正在检索Variant
(根据您的问题是String
子类型)并尝试将其分配给声明的变量作为Range
。
Private Sub CommandButton1_Click()
Dim rng As Range, cell As Range
With Sheet1 '<-- you should be explicitly referencing a worksheet. replace as required.
Set rng = .Range("E5:E100")
For Each cell In rng
If cell.Value = "Yes" Then
Dim rngstart As String, rngend As String
rngstart = .Cells(cell.Row, 11).Text
rngend = .Cells(cell.Row, 8).Text
'ditto with the explicit reference.
Call DrawArrows(.Range(rngstart), .Range(rngend), RGB(0, 0, 255), "Single")
End If
Next cell
End With
End Sub
答案 1 :(得分:0)
第Set rngstart = Range("K" & (ActiveCell.Row)).Value
行将存储在列.Value
第K
行中的ActiveCell.Row
分配给Range
变量rngstart
。您要分配range
来传递。
进行一些快速的“空中编码”,这样的方法应该可以工作:
Set rngstart = ActiveSheet.Range("K" & (ActiveCell.Row))
注意:我已经指定了ActiveSheet
,因为这是否则未解压缩的Range
所指向的-至少这样是明确的。另外,如果有人单击另一张纸或者按钮与您要从中拾取单元格地址的纸不在同一张纸上,则这很容易中断。