#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 не будет работать на моем более новом / лучшем компьютере.