求助:使用VBA复制不连续单元格的代码问题
修正你的不连续区域复制代码
你的代码存在几个语法和逻辑问题,导致无法正确复制目标不连续区域,下面是修正后的版本及问题说明:
问题点解析
- 子过程缺少合法名称:
Sub ()是语法错误,必须给宏定义一个有效名称 - 未显式绑定工作表:直接使用
Range会默认指向当前激活表,即使提前激活了目标表,也可能因后续操作导致引用混乱,最好明确指定工作表对象 Rng1.End(xlDown)仅返回单个单元格:你大概率是要获取从B24:K24往下到连续数据最后一行的整行区域,而不是单个单元格- 可以简化不连续单元格的写法:多个同列不连续单元格直接用
Range("C9,C11,C13,C15")即可,无需多次调用Range
修正后的代码
Sub CopyDiscontinuousRange() ' 显式绑定目标工作表,避免引用混乱 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Name") Dim Rng1 As Range Set Rng1 = ws.Range("B24:K24") ' 获取从B24:K24到下方连续数据最后一行的整个区域 Dim Rng2 As Range Set Rng2 = ws.Range(Rng1, Rng1.End(xlDown)) ' 合并所有需要复制的不连续区域 Dim Rng3 As Range Set Rng3 = Union(ws.Range("C9,C11,C13,C15"), Rng2) ' 执行复制操作 Rng3.Copy End Sub
额外优化提示
如果你的需求是复制Rng1所在列的最后一行有效数据单元格(而非整个连续区域),且要避免空数据时跳到表底的问题,可以用以下方式安全获取最后一行:
' 安全获取B列最后一行有数据的行号,再对应到K列区域 Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row Set Rng2 = ws.Range("B" & lastRow & ":K" & lastRow)
内容的提问来源于stack exchange,提问作者Monica Romero
相关产品推荐
相关产品推荐

