簡體   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