Ошибка при копировании листа в csv — VBA: сбой метода ‘Значение’ объекта ‘Диапазон’ (ошибка времени выполнения ‘1004’)

#excel #vba

#excel #vba

Вопрос:

У меня возникли проблемы с отладкой моего кода 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
  

Я не уверен, действительно ли это проблема с ОС, потому что у меня практически тот же код в другой книге, и он отлично работал с новым компьютером, но больше ничего не изменилось, кроме получения нового компьютера с помощью этого макроса. Есть мысли?

Комментарии:

1. Application.DisplayAlerts = False может скрывать некоторую полезную информацию, поэтому удалите.

2. Спасибо за предложение — ошибка заключалась в том, что диапазон был слишком большим для моей памяти. Удивительно, что он не смог обработать A1: ZZ2000, поскольку это было возможно на моем MacBook Pro 2015 года, но изменение его на A1: JZ2000 сработало.

Ответ №1:

На всякий случай поставьте точку останова в строке

 pasteRange.Value = copyRange.Value
  

и убедитесь, что оба диапазона четко определены.

У меня была аналогичная проблема при копировании и вставке целого столбца, иногда это не удавалось с VBA: Method 'Insert' of object 'Range' failed (Run-time error '1004') без видимой причины, и Excel полностью ломался, и его приходилось перезапускать. Я почти уверен, что это ошибка в Excel.

Комментарии:

1. Спасибо за комментарий — я отключил Application.DisplayAlerts = False , как предлагалось выше, и оказалось, что у меня недостаточно памяти. Что было для меня неожиданностью, поскольку A1: ZZ2000 работал на моем старом компьютере. Но A1: JZ2000 теперь работает.

Ответ №2:

Как было предложено @ComputerVersteher, я удалил Application.DisplaysAlerts = False и получил сообщение об ошибке, в котором говорилось, что у меня недостаточно памяти для завершения операции. Я изменил диапазон копирования / вставки на A1: JZ2000, и это сработало, но я все еще не понимаю, почему диапазон A1: ZZ2000 не будет работать на моем более новом / лучшем компьютере.