使用PasteSpecial时出现Excel VBA错误1004的技术求助
解决VBA PasteSpecial的1004错误问题
嘿,我来帮你排查这个问题~首先咱们先揪出代码里的明显bug:你在PasteSpecial那一行用了lngCount变量,但整个循环里定义并循环的是lngCol啊!这个lngCount既没初始化也没在循环里赋值,Excel根本不知道要把内容粘贴到哪一列,自然就抛出1004错误了。而你用直接赋值的代码时,用的是正确的lngCol变量,所以能正常运行。
修正后的代码
把lngCount改成lngCol就能解决这个核心问题,同时我给你加了一些规范写法(比如关闭屏幕更新提升效率、错误处理):
Sub CopyCellsWithFormatting() Dim ws As Worksheet Dim wb As Workbook Dim rowCount As Long Dim lngCol As Long ' 这里假设你已经完成了ws和wb的赋值,比如: ' Set ws = ThisWorkbook.Sheets("数据源工作表") ' Set wb = Workbooks("目标工作簿.xlsx") Application.ScreenUpdating = False ' 关闭屏幕更新,避免闪烁且提升速度 On Error GoTo Cleanup ' 错误捕获 For rowCount = 1 To 11 For lngCol = 1 To 8 ws.Cells(rowCount, lngCol).Copy ' 把原来的lngCount改成lngCol,对应循环的列数 wb.Sheets(1).Cells(rowCount, lngCol).PasteSpecial Paste:=xlAll Next lngCol Next rowCount Cleanup: Application.CutCopyMode = False ' 清除复制状态,避免剪贴板残留 Application.ScreenUpdating = True ' 恢复屏幕更新 If Err.Number <> 0 Then MsgBox "操作出错:" & Err.Description, vbExclamation End If End Sub
额外优化小建议
- 如果要复制的是连续区域,其实不用嵌套循环,直接批量复制效率更高:
ws.Range("A1:H11").Copy wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlAll - 确认
wb和ws确实已经正确赋值,比如wb是否处于打开状态,ws是否存在于对应的工作簿中,这也是1004错误常见的诱因。
内容的提问来源于stack exchange,提问作者Blaze Cerovcec
相关产品推荐
相关产品推荐

