Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
07.10.2022, 11:25:26

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
32 837 Сообщений в 5 348 Тем от 6 479 Пользователей
Последний пользователь: Sekretland
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Office для MAC
| | |-+  Открытие файла VBA Mac MS Office
Страниц: [1]   Вниз
Печать
Автор Тема: Открытие файла VBA Mac MS Office  (Прочитано 2822 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mike_B
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« : 20.08.2021, 13:20:47 »

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

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« Ответ #1 : 20.08.2021, 13:21:17 »

Второе вложение
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +481/-0
Офлайн Офлайн

Сообщений: 5 697



Просмотр профиля WWW
« Ответ #2 : 20.08.2021, 15:50:47 »

В одно вложение не влезло
А разве столь нужны остальные файлы, чтобы посмотреть код? Улыбка
Сходу могу сказать пару вещей, которые точно надо менять под MAC:
1. Все, что связано с разделителем папок в путях. У Вас используется левый слэш, в MACе как правило правый. Поэтому лучше делать более кроссплатформенный вариант. На примере одной строки. Вместо:
Код: (vb)
.Cells(6, "B") = ThisWorkbook.Path & "\MiraGoGt.xlsx"

записать так:
Код: (vb)
.Cells(6, "B") = ThisWorkbook.Path & Application.PathSeparator &  "MiraGoGt.xlsx"

2. Насколько знаю, диалоговые окна выбора файлов и папок на МАС и Windows различаются. Поэтому надо будет искать код диалогового окна под MAC и делать ветвление в зависимости от типа операционной системы. Что-то вроде:
Код: (vb)
If Application.OperatingSystem Like "*Mac*" then
' код под Mac
Else
' код под Windows
End if

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

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Mike_B
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« Ответ #3 : 20.08.2021, 16:41:51 »

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

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

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

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« Ответ #4 : 20.08.2021, 16:43:57 »

На всякий случай код со ссылки, раз она не отобразилась. Вдруг кто-то имеет Мак, сможет вставить и проверить.
Код:
'======================================================================================================================
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
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru