如何从单元格(其中单元格包含范围值)中提取范围

时间:2018-09-05 13:41:15

标签: excel vba cell

我基本上使用的是别人设计的脚本,该脚本在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")

2 个答案:

答案 0 :(得分:3)

您正在使用rngstartrngend,就好像它们是您对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行将存储在列.ValueK行中的ActiveCell.Row分配给Range变量rngstart。您要分配range来传递。

进行一些快速的“空中编码”,这样的方法应该可以工作:

Set rngstart = ActiveSheet.Range("K" & (ActiveCell.Row))

注意:我已经指定了ActiveSheet,因为这是否则未解压缩的Range所指向的-至少这样是明确的。另外,如果有人单击另一张纸或者按钮与您要从中拾取单元格地址的纸不在同一张纸上,则这很容易中断。