У меня есть файл Excel с макросом, который предлагает пользователю выбрать файл, который затем становится выбранным файлом для макроса для копирования с одного листа в нем в файл назначения (исходный файл Excel).
Все это отлично работает на ПК, но я отправил его кому-то, кто использует Mac, и, очевидно, он не работает. Появляется ошибка «Переменная объекта или переменная блока не установлена».
Вот копия действующего кода с моими заметками о том, где я вижу проблему:
Sub Load_New_Data()
Application.ScreenUpdating = False
ans = MsgBox("A dialogue box will appear now where you can select the week/(s) you would like to load. Please select the file you would like to load. Remember to double check you haven't already got this week in the DATA COPY tab.", vbYesNo)
If ans = vbYes Then
Dim fileDialog As fileDialog 'need to convert this to AppleScript
Dim strPathFile As String
Dim strFileName As String
Dim strPath As String
Dim dialogTitle As String
Dim wbSource As Workbook
Dim rngToCopy As Range
Dim rngRow As Range
Dim rngDestin As Range
Dim lngRowsCopied As Long
Dim lDestinLastRow As Long
lDestinLastRow = ThisWorkbook.Sheets("DATA COPY").Cells(ThisWorkbook.Sheets("DATA COPY").Rows.Count, "A").End(xlUp).Offset(1).Row
dialogTitle = "Navigate to and select required file." 'This is all Microsoft language, needs to be in AppleScript
Set fileDialog = Application.fileDialog(msoFileDialogFilePicker) 'AppleScript please! :-)
With fileDialog
.InitialFileName = ThisWorkbook.Path & "\"
.AllowMultiSelect = False
.Filters.Clear
.Title = dialogTitle
If .Show = False Then
MsgBox "File not selected to import. Process Terminated"
Exit Sub
End If
strPathFile = .SelectedItems(1)
End With
Set wbSource = Workbooks.Open(Filename:=strPathFile)
With wbSource.Worksheets("DATA")
Set rngToCopy = .Range(.Cells(3, "A"), .UsedRange.SpecialCells(xlCellTypeLastCell))
For Each rngRow In rngToCopy.Rows
If WorksheetFunction.CountA(rngRow) = 0 Then
rngRow.EntireRow.Hidden = True 'Hides rows with no data
End If
Next rngRow
Set rngDestin = ThisWorkbook.Sheets("DATA COPY").Range("A" & lDestinLastRow)
rngToCopy.SpecialCells(xlCellTypeVisible).Copy Destination:=rngDestin
lngRowsCopied = rngToCopy.Columns(1).SpecialCells(xlCellTypeVisible).Count
MsgBox lngRowsCopied & " rows copied."
.Rows.Hidden = False 'Unhides previously hidden rows
End With
wbSource.Close SaveChanges:=False
Set fileDialog = Nothing
Set rngRow = Nothing
Set rngToCopy = Nothing
Set wbSource = Nothing
Set rngDestin = Nothing
'MsgBox "The data is copied"
Else
End If
Application.ScreenUpdating = True
End Sub