Excel跨工作表复制指定单元格内容及VBA代码报错求助
解决VBA复制Excel单元格报错问题
报错排查与修复方案
1. 核对工作表名称
确认代码中的Sheet1、Sheet2和Excel文件里的工作表实际名称完全一致(注意大小写、空格、特殊字符,比如实际表名是「工作表1」就会触发下标越界错误)。也可以改用工作表索引避免名称匹配问题,比如Sheets(1)代表第一个工作表,Sheets(2)代表第二个。
2. 替换为非空单元格定向复制代码
原代码是整区域复制,不符合你“只复制有文本的单元格”的需求,同时可能因目标区域冲突报错。改用以下代码精准复制非空单元格:
Sub CopyNonEmptyCells() Dim sourceSheet As Worksheet, targetSheet As Worksheet Dim sourceRange As Range, cell As Range Dim targetRow As Integer Set sourceSheet = ThisWorkbook.Sheets("Sheet1") Set targetSheet = ThisWorkbook.Sheets("Sheet2") Set sourceRange = sourceSheet.Range("B2:I95") targetRow = 1 '从Sheet2的B1开始写入 For Each cell In sourceRange If cell.Value <> "" Then targetSheet.Cells(targetRow, cell.Column).Value = cell.Value '若需复制格式,替换上一行为:cell.Copy targetSheet.Cells(targetRow, cell.Column) targetRow = targetRow + 1 End If Next cell End Sub
3. 检查工作表保护状态
如果Sheet2处于保护状态,会导致无法写入数据。可以在代码开头添加取消保护的语句(有密码需补充密码):
targetSheet.Unprotect Password:="你的保护密码"
复制完成后再重新保护:
targetSheet.Protect Password:="你的保护密码"
4. 排除文件权限问题
确保Excel文件不是只读模式,关闭后重新打开,保存为可编辑格式再运行代码。
内容的提问来源于stack exchange,提问作者DM24
相关产品推荐
相关产品推荐

