【问题标题】:Using VBA to add active cell address to a range使用 VBA 将活动单元格地址添加到范围
【发布时间】:2018-07-09 01:55:26
【问题描述】:

我正在尝试使用此answer 将我自己的添加活动单元格地址的方式应用到范围,以便稍后我可以选择整个范围以应用条件格式。下面是我的代码,但我不确定出了什么问题。它提出了错误“编译错误:类型不匹配”

p/s:我已经在这组特定的单元格上记录了我的宏,然后对其进行了编辑。

Sub Macro1()

 Dim rng2 As Range

Range("B3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("D3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("F3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("H3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("J3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("L3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("N3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("P3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("R3").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("R7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("P7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("N7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("L7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("J7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("H7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("F7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("D7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("B7").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("B11").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("D11").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("F11").Select
Set rng2 = Union(rng2, ActiveCell.Address)
Range("J11").Select
Set rng2 = Union(rng2, ActiveCell.Address)



Range(rng2).Select
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:
    1. 您的第一个Set rng2 = Union(rng2, ActiveCell.Address) 应该是Set rng2 = ActiveCell。你不能联合到一个什么都不是的范围对象,而 rng2 在它被设置为某个东西之前什么都不是,因此它不能成为联合语句的一部分。
    2. 每个后续的Set rng2 = Union(rng2, ActiveCell.Address) 应该是Set rng2 = Union(rng2, ActiveCell)。您不能联合到范围对象的字符串地址;你必须联合到一个范围对象。
    3. rng2 现在是一个有效的范围对象,不需要进一步定义。 Range(rng2).Select 无效;只需使用rng2.Select

    出于所有意图和目的,您可以说,

    Range("B3, D3, F3, H3, J3, L3, N3, P3, R3, R7, P7, N7, L7, J7, H7, F7, D7, B7, B11, D11, F11, J11").Select
    

    您在评论中提到,由于空间限制,您切断了代码。考虑以下循环。

    dim i as long, rng2 as range
    
    Set rng2 = Range("B3, D3, F3, H3, J3, L3, N3, P3, R3")
    
    For i = 7 To 23 Step 4
        Set rng2 = Union(rng2, Intersect(rng2.EntireColumn, Rows(i)))
    Next i
    
    rng2.select
    rng2.interior.color = vbred
    Debug.Print rng2.Address(0, 0)
    'B3,D3,F3,H3,J3,L3,N3,P3,R3,B7,D7,F7,H7,J7,L7,N7,P7,R7,B11,D11,F11,H11,J11,L11,N11,P11,R11,B15,D15,F15,H15,J15,L15,N15,P15,R15,B19,D19,F19,H19,J19,L19,N19,P19,R19,B23,D23,F23,H23,J23,L23,N23,P23,R23
    

    debug.print 消息发送到 VBE 的 Immediate window

    【讨论】:

    • 感谢指正。它有帮助。如前所述,我记录了这个宏,实际上将编码行减少到几行,因为 stackoverflow 只允许我展示这么多。代码中有很多选定的单元格,这些单元格由宏记录,以便快速和可调​​整的工作。因此,我没有时间将时间减少到一行。我可以使用“全部替换”功能来完成所有后续行。非常感谢你,@Jeeped。
    • 如果你有一个模式,你可以循环。在上面,您可以在 B 和 R 之间循环,然后内循环通过 3、7、11,只要您在内循环为 11 并且列 > J 时退出。(但这可能只是代码的截止)。跨度>
    • 哦,感谢您的额外提示。我实际上没有模式。沿线某处存在一些缺陷。因此使用录制的宏。否则,我会选择整行。无论如何,谢谢男人。将进一步探索 VBA 宏以加深我的知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2020-11-30
    • 2017-02-06
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多