Новости:

Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ

Главное меню

Открытие файла VBA Mac MS Office

Автор Mike_B, 20.08.2021, 13:20:47

« назад - далее »

Mike_B

Добрый день всем!
Нет ли тут спецов по экселю для мака? Написан макрос, отлично работает. Суть его в сборе данных из 4 файлов и формировании общей статистики.
Но стало нужно адаптировать его для работы в MS Office на маке. Как я понимаю, нужно заменить операторы открытия (и, возможно, сохранения) файлов. Но мака у меня нет и опыта работы в нем тоже.
Нашел вот такое: http://www.jasinskionline.com/... ialog.ashx
Вопрос: это сработает? Не может ли кто-то помочь заменить и проверить работу?
В одно вложение не влезло, разбил на 2.

Mike_B


Дмитрий Щербаков(The_Prist)

Цитата: Mike_B от 20.08.2021, 13:20:47В одно вложение не влезло
А разве столь нужны остальные файлы, чтобы посмотреть код? :)
Сходу могу сказать пару вещей, которые точно надо менять под MAC:
1. Все, что связано с разделителем папок в путях. У Вас используется левый слэш, в MACе как правило правый. Поэтому лучше делать более кроссплатформенный вариант. На примере одной строки. Вместо:
.Cells(6, "B") = ThisWorkbook.Path & "\MiraGoGt.xlsx"
записать так:
.Cells(6, "B") = ThisWorkbook.Path & Application.PathSeparator &  "MiraGoGt.xlsx"
2. Насколько знаю, диалоговые окна выбора файлов и папок на МАС и Windows различаются. Поэтому надо будет искать код диалогового окна под MAC и делать ветвление в зависимости от типа операционной системы. Что-то вроде:
If Application.OperatingSystem Like "*Mac*" then
' код под Mac
Else
' код под Windows
End if

Но там надо более капитально в тему погружаться, т.к. разные версии Excel и MAC могут требовать различные методы. Но это не точно :)

Все остальное в коде выглядит вполне рабочим под обе оси. Но проверить, увы, не могу - нет больше MACа под рукой.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Mike_B

Цитата: Дмитрий Щербаков(The_Prist) от 20.08.2021, 15:50:47
А разве столь нужны остальные файлы, чтобы посмотреть код? :)
Это чтобы можно было прогнать. :)
Цитировать.Cells(6, "B") = ThisWorkbook.Path & Application.PathSeparator &  "MiraGoGt.xlsx"
Это меньшая из проблем. ))
Цитировать2. Насколько знаю, диалоговые окна выбора файлов и папок на МАС и Windows различаются. Поэтому надо будет искать код диалогового окна под MAC и делать ветвление в зависимости от типа операционной системы. Что-то вроде:
Именно об этом речь в вопросе. Нашел разные вещи, почти все на applescript, но я его не знаю, чтобы проверить, да и не на чем.

ЦитироватьНо там надо более капитально в тему погружаться, т.к. разные версии Excel и MAC могут требовать различные методы. Но это не точно :)
И вот про это тоже говорилось на разных ресурсах.

И попутно, Дмитрий, спасибо Вам большое за сайт и этот форум, много полезного находил. Ваша работа помогает людям.

Mike_B

На всякий случай код со ссылки, раз она не отобразилась. Вдруг кто-то имеет Мак, сможет вставить и проверить.

'======================================================================================================================
Public Function GetFileName(dlgTitle As String) As String
    Dim result As String

    result = ""

    #If Mac Then
        result = GetFileName_Mac()
    #Else
        result = GetFileName_Windows(dlgTitle)
    #End If

    GetFileName = result
End Function
'======================================================================================================================
Public Function GetFileName_Windows(dlgTitle As String) As String
    Dim result As String
    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
        .Filters.Clear
        .Filters.Add "CSV Files (*.csv)", "*.csv", 1
        .Filters.Add "All Files (*.*)", "*.*", 2
        .title = dlgTitle
        .AllowMultiSelect = False
     
        If .Show = True Then
            result = .SelectedItems(1)
        End If
    End With

    GetFileName_Windows = result
End Function
'======================================================================================================================
' Adapted from https://stackoverflow.com/questions/12263016/is-there-a-mac-pc-variant-of-application-getopenfilename
Function GetFileName_Mac() As String
    Dim startPath As String
    Dim script As String
    Dim result As String
    Dim MySplit As Variant
    Dim N As Long
    Dim FName As String
    Dim mybook As Workbook

    On Error Resume Next
    startPath = MacScript("return (path to documents folder) as String")
   
    ' Or use startPath = "Macintosh HD:Users:Ron:Desktop:TestFolder:"

    ' In the following statement, change true to false in the line "multiple
    ' selections allowed true" if you do not want to be able to select more
    ' than one file. Additionally, if you want to filter for multiple files, change
    ' {""com.microsoft.Excel.xls""} to
    ' {""com.microsoft.excel.xls"",""public.comma-separated-values-text""}
    ' if you want to filter on xls and csv files, for example.
    script = _
    "set applescript's text item delimiters to "","" " & vbNewLine & _
               "set theFiles to (choose file of type " & _
             " {""public.comma-separated-values-text""} " & _
               "with prompt ""Please select a file or files"" default location alias """ & _
               startPath & """ multiple selections allowed false) as string" & vbNewLine & _
               "set applescript's text item delimiters to """" " & vbNewLine & _
               "return theFiles"

    result = MacScript(script)
    result = Replace$(result, "Macintosh HD", "", Count:=1)
    result = Replace$(result, ":", "/")
    GetFileName_Mac = result
End Function

Яндекс.Метрика Рейтинг@Mail.ru