Добрый день всем!
Нет ли тут спецов по экселю для мака? Написан макрос, отлично работает. Суть его в сборе данных из 4 файлов и формировании общей статистики.
Но стало нужно адаптировать его для работы в MS Office на маке. Как я понимаю, нужно заменить операторы открытия (и, возможно, сохранения) файлов. Но мака у меня нет и опыта работы в нем тоже.
Нашел вот такое: http://www.jasinskionline.com/... ialog.ashx
Вопрос: это сработает? Не может ли кто-то помочь заменить и проверить работу?
В одно вложение не влезло, разбил на 2.
Второе вложение
Цитата: 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а под рукой.
Цитата: Дмитрий Щербаков(The_Prist) от 20.08.2021, 15:50:47
А разве столь нужны остальные файлы, чтобы посмотреть код? :)
Это чтобы можно было прогнать. :)
Цитировать.Cells(6, "B") = ThisWorkbook.Path & Application.PathSeparator & "MiraGoGt.xlsx"
Это меньшая из проблем. ))
Цитировать2. Насколько знаю, диалоговые окна выбора файлов и папок на МАС и Windows различаются. Поэтому надо будет искать код диалогового окна под MAC и делать ветвление в зависимости от типа операционной системы. Что-то вроде:
Именно об этом речь в вопросе. Нашел разные вещи, почти все на applescript, но я его не знаю, чтобы проверить, да и не на чем.
ЦитироватьНо там надо более капитально в тему погружаться, т.к. разные версии Excel и MAC могут требовать различные методы. Но это не точно :)
И вот про это тоже говорилось на разных ресурсах.
И попутно, Дмитрий, спасибо Вам большое за сайт и этот форум, много полезного находил. Ваша работа помогает людям.
На всякий случай код со ссылки, раз она не отобразилась. Вдруг кто-то имеет Мак, сможет вставить и проверить.
'======================================================================================================================
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