AppleScript в VBA - PullRequest
       17

AppleScript в VBA

0 голосов
/ 23 октября 2019

У меня есть файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...