You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:59:29