繁体   English   中英

将工作表复制到 csv - VBA 时出错:object“范围”的方法“值”失败(运行时错误“1004”)

[英]Error while copying sheet to csv - VBA: Method 'Value' of object 'Range' failed (Run-time error '1004')

我在调试 vba 代码时遇到问题。 宏的目标是在当前工作簿中获取一张工作表并将其保存为特定的 csv 文件。 这段代码运行良好,直到我得到一台装有 Catalina (10.15.4) 的新计算机。 错误发生在pasteRange.Value = copyRange.Value并且错误代码是VBA: Method 'Value' of object 'Range' failed (Run-time error '1004') 所以当它出错时,MasterLoad.csv 是打开的,但源数据无法复制。

Sub SheetToCSV()
    Application.ScreenUpdating = False:  Application.EnableEvents = False:  Application.DisplayAlerts = False
'    On Error GoTo Cleanup

    Dim strSourceSheet As String
    Dim strFullname As String
    Dim fileAccessGranted As Boolean
    Dim filePermissionCandidates
    Dim copyWB As Workbook
    Dim pasteWB As Workbook
    Dim copyRange As Range
    Dim pasteRange As Range
    
    Set copyWB = ThisWorkbook

    ' set variables for sheet name and file path
    strSourceSheet = "MasterLoad"
    strFullname = "/Users/mypath/MasterLoad.csv"
    
    ' grant permission for VBA to open/save MasterLoad file
    filePermissionCandidates = Array(strFullname)
    grantFileAccess (filePermissionCandidates)
    
    ' set copy range
    Set copyRange = copyWB.Sheets(strSourceSheet).Range("A1:ZZ2000")
    
    ' open paste WB, set paste range, set values, and save
    Set pasteWB = Workbooks.Open(strFullname)
    Set pasteRange = pasteWB.Sheets(1).Range("A1:ZZ2000")
    pasteRange.Value = copyRange.Value
    pasteWB.SaveAs FileName:=strFullname, _
                          FileFormat:=xlCSV
    pasteWB.Close SaveChanges:=True 'close wb and save
    
    Application.ScreenUpdating = True:  Application.EnableEvents = True: Application.DisplayAlerts = True
End Sub


Function grantFileAccess(filePermissionCandidates)
  grantFileAccess = GrantAccessToMultipleFiles(filePermissionCandidates) 'returns true if access granted, false otherwise_
End Function

我不确定这是否真的是操作系统问题,因为我在不同的工作簿中有几乎相同的代码,并且它在新计算机上运行良好,但除了使用此宏获得一台新计算机之外没有其他任何改变。 有什么想法吗?

只是为了确定,在行上放一个断点

pasteRange.Value = copyRange.Value

并检查两个范围是否定义明确。

在复制和插入整列时,我也有类似的问题,有时它会失败, VBA: Method 'Insert' of object 'Range' failed (Run-time error '1004')重新启动。 我很确定这是 Excel 中的一个错误。

正如@ComputerVersteher 所建议的,我删除了Application.DisplaysAlerts = False并收到一条错误消息,指出我没有足够的 memory 来完成操作。 我将复制/粘贴范围更改为 A1:JZ2000 并且它有效,但我仍然不明白为什么范围 A1:ZZ2000 在我更新/更好的计算机上不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM