Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
1
Excel

Открыть/сохранить файл на Mac

15.01.2022, 15:47. Показов 2420. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Нет ли тут маководов?
Написал макрос, к нему вопросов нет, но выясняется, что на MacOS не работает. Понятно, что пути там свои, линукс-вида, но и операции открытия и сохранения иначе делаются. А как? Мака для тестов нет, толковой инфы в инете не нашел - либо ткните туда.
На винде все просто:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Set dlgOpen = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
With dlgOpen
   .InitialFileName = Thisworkbooл.Path
   .Title = "Выберите файл"
   .AllowMultiSelect = False
   If .Show = -1 Then FN1 = .SelectedItems(1)
End With
Set dlgOpen = Nothing
'...
Set FP1 = Application.Workbooks.Open(Filename:=FN1, Local:=True, UpdateLinks:=False)
'...
FP1.SaveAs ThisWorkbook.Path & Application.PathSeparator & "Output.xlsx"
А как это проделать на маке?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2022, 15:47
Ответы с готовыми решениями:

Открыть файл, разделить ячейку на 1000, сохранить файл, закрыть файл
Макрос должен запускаться, спрашивать - какой файл ему взять. Открыть его, разделить определенную...

Через Ексель Открыть файл ВОРД и сохранить файл под определенным именем
Открываю через ексель файлы ворд и выполняю макрос ворд, но не получается сохранить файл под...

Открыть/сохранить файл VBS
Добрый день. Надеюсь пишу там, где надо. Dim fso Dim strFileName Dim strFilePath ...

Как открыть и сохранить файл .dbf?
Через ODBC (Microsoft Visual FoxPro Driver)открыл файл .dbf (форма для заполнения реквизитов). Как...

17
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
16.01.2022, 06:31 2
Приветствую.
Вот так файл на маке открывается и сохраняется в другое место.

Visual Basic
1
2
3
4
5
Sub Макрос1()
    Workbooks.Open FileName:="/Users/slava/Downloads/excel_file.xlsb"
    ActiveWorkbook.SaveAs FileName:="/Users/slava/Desktop/excel_file.xlsm", _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
С FileDialog надо разбираться. Help ведет в инет, показывает вот такой код. Но он на маке не работает.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Sub Main() 
 
 'Declare a variable as a FileDialog object. 
 Dim fd As FileDialog 
 
 'Create a FileDialog object as a File Picker dialog box. 
 Set fd = Application.FileDialog(msoFileDialogFilePicker) 
 
 'Declare a variable to contain the path 
 'of each selected item. Even though the path is aString, 
 'the variable must be a Variant because For Each...Next 
 'routines only work with Variants and Objects. 
 Dim vrtSelectedItem As Variant 
 
 'Use a With...End With block to reference the FileDialog object. 
 With fd 
 
 'Set the initial view to the details view. 
 .InitialView = msoFileDialogViewDetails 
 
 'Use the Show method to display the File Picker dialog box and return the user's action. 
 'If the user presses the button... 
 If .Show = -1 Then 
 
 'Step through each string in the FileDialogSelectedItems collection. 
 For Each vrtSelectedItem In .SelectedItems 
 
 'vrtSelectedItem is aString that contains the path of each selected item. 
 'You can use any file I/O functions that you want to work with this path. 
 'This example displays the path in a message box. 
 MsgBox "Selected item's path: " & vrtSelectedItem 
 
 Next vrtSelectedItem 
 'If the user presses Cancel... 
 Else 
 End If 
 End With 
 
 'Set the object variable to Nothing. 
 Set fd = Nothing 
 
End Sub
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
16.01.2022, 20:35  [ТС] 3
Благодарю, будем пробовать - заочно, у меня винда, у человека Мак, но он в макросах не спец.
Пока нашел такое, поменял под себя:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub SelectFile1()
   ' The user selects a file, the full name of the selected file is written to cell B2.
   Dim FN As String, Title As String, FileFormats As String, AllowMultiSelect As Boolean, InitialView As String
 
   '1. Dialog settings.
   Title = "ВЫБЕРИТЕ ВХОДНОЙ ФАЙЛ"
   FileFormats = "{""org.openxmlformats.spreadsheetml.sheet""}"   ' xlsx only
   AllowMultiSelect = False
   InitialView = MacScript("return (path to desktop folder) as String")
 
   '2. Displaying the dialog.
   If FileDialog(FN, Title, FileFormats, AllowMultiSelect, InitialView) = True Then ThisWorkbook.Sheets(1).Range("B2").Value = FN
End Sub
Функция FileDialog в отдельном модуле:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Option Explicit
Option Base 1
 
Function FileDialog(FNs, Title As String, FileFormats As String, AllowMultiSelect As Boolean, InitialView As String) As Boolean
   ' The function displays a dialog for selecting files.
 
   ' The function will return False in these cases:
       '1) the user refused to select files.
 
   ' Version: 23 August 2021.
 
   Dim i As Long, Script As String, Selected
 
   '1. Enclosing parameters with quotation marks.
   Title = """" & Title & """"
   InitialView = """" & InitialView & """"
 
   '2. Enclosing parameters with spaces.
   Title = " " & Title & " "
   FileFormats = " " & FileFormats & " "
   InitialView = " " & InitialView & " "
 
   '3. Creating a script.
   ' Mac 2011.
   If Val(Application.Version) < 15 Then
      If AllowMultiSelect = False Then
         Script = _
             "set theFile to (" & _
                 "choose file of type" & FileFormats & _
                 "with prompt" & Title & _
                 "default location alias" & InitialView & _
                 "without multiple selections allowed" & _
             ") as string" & vbNewLine & _
             "return theFile"
      Else
         Script = _
             "set applescript's text item delimiters to {ASCII character 10} " & vbNewLine & _
             "set theFiles to (" & _
                 "choose file of type" & FileFormats & _
                 "with prompt" & Title & _
                 "default location alias" & InitialView & _
                 "with multiple selections allowed" & _
             ") as string" & vbNewLine & _
             "set applescript's text item delimiters to """" " & vbNewLine & _
             "return theFiles"
       End If
   ' New versions.
   Else
      If AllowMultiSelect = False Then
         Script = _
             "set theFile to (" & _
                 "choose file of type" & FileFormats & _
                 "with prompt" & Title & _
                 "default location alias" & InitialView & _
                 "without multiple selections allowed" & _
             ") as string" & vbNewLine & _
             "return posix path of theFile"
      Else
         Script = _
             "set theFiles to (" & _
                 "choose file of type" & FileFormats & _
                 "with prompt" & Title & _
                 "default location alias" & InitialView & _
                 "with multiple selections allowed" & _
             ")" & vbNewLine & _
             "set thePOSIXFiles to {}" & vbNewLine & _
             "repeat with aFile in theFiles" & vbNewLine & _
             "set end of thePOSIXFiles to POSIX path of aFile" & vbNewLine & _
             "end repeat" & vbNewLine & _
             "set {TID, text item delimiters} to {text item delimiters, ASCII character 10}" & vbNewLine & _
             "set thePOSIXFiles to thePOSIXFiles as text" & vbNewLine & _
             "set text item delimiters to TID" & vbNewLine & _
             "return thePOSIXFiles"
       End If
   End If
 
   '4. Displaying the dialog.
   On Error Resume Next
   Selected = MacScript(Script)
   On Error GoTo 0
 
   '5. If the user refused to select files.
   If Selected = "" Then Exit Function
 
   '6. Writing the full file name to a variable.
   If AllowMultiSelect = False Then
      FNs = Selected
   '7. Writing full file names to an array.
   Else
      Selected = Split(Selected, Chr(10))
      ReDim FNs(UBound(Selected) + 1)
      For i = 0 To UBound(Selected)
         FNs(i + 1) = Selected(i)
      Next i
   End If
 
   '8.
   FileDialog = True
End Function
Насколько я понял, взято у Рона де Бруна (www.macexcel.com). Покопался там, с сохранением вопрос: из https://www.macexcel.com/examp... ileformat/ понял, что на маке надо непременно указывать формат, умолчания нет (как в 2007 - если ничего не говорить, будет xlsx). Константа для xlsx = 51, однако для Excel 2011 и Excel 2016 версии 15 надо прибавлять 1, то есть 52. У человека 16.54, тогда я 51 задаю?

И второе:
Visual Basic
1
2
3
4
         If Dir(FN1) = "" Then
            MsgBox "Не найден входной файл", vbCritical + vbOKOnly, "Внимание"
            Exit Sub
         End If
На винде пучком, даже если задан файл с пробелами: D:\Test\Weeb\Отчёт по оферте №6713101 от 03.01.2022.xlsx
А на маке, говорит человек, дает ошибку. Если без пробелов (D:\Test\Weeb\Отчёт№6713101.xlsx) - то нормально. Не понимаю...
Нашел по этой теме (https://sqlite.in/?qa=468061/d... l-2011-vba), что надо (в каких случаях?) указывать константу для Dir:
Visual Basic
1
strFile = Dir(strPath, MacID("TEXT"))
Но какую для xlsx? И надо ли или в чем вопрос?
Сложно, когда Мака для тестов нет. Если у вас, уважаемый SlavaRus, есть возможность проверить, было бы хорошо.
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
16.01.2022, 22:16 4
Вышеприведенный код попробовал, отрабатывет без ошибок. В ячеку B2 пишет путь к выбранному файлу.
У меня стоит версия Экселя 16.48. При константе 52 записывает файл с расширением xlsm, при 51 в xlsx.
1
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
16.01.2022, 22:24  [ТС] 5
Благодарю!
А что получается при проверке Dir-ом файла с пробелами в пути и что без пробелов?
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
16.01.2022, 22:43 6
Если я правильно понял, то имя файла с пробелами съедает.
При первом запуске спрашивает разрешения на допуск к файлам и папкам.
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
16.01.2022, 22:54  [ТС] 7
Хм, значит, что-то у него или не так делает. Имя там было /Users/Vlad/Downloads/Отчёт по оферте №6713101 от 03.01.2022.xlsx
Насколько я понял, запрос о доступе выдается, если каталог не пользовательский, а системный. А к пользовательским файлам без него. Но тут я могу ошибаться.
Я попробовал (смотря на тот код FileDialog из инета, где они заключают параметры в кавычки) записать так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
      #If Mac Then
         If Dir(Chr(34) & FN1 & Chr(34)) = "" Then
            MsgBox "Не найден входной файл", vbCritical + vbOKOnly, "Внимание"
            Exit Sub
         End If
      #Else
         If Dir(FN1) = "" Then
            MsgBox "Не найден входной файл", vbCritical + vbOKOnly, "Внимание"
            Exit Sub
         End If
      #End If
Но что будет и пройдет ли - человек мне пока еще не ответил.
В FN1 сидит вот то имя вида /Users/Vlad/Downloads/Отчёт по оферте №6713101 от 03.01.2022.xlsx
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
16.01.2022, 23:01 8
У меня нужно было дать доступ даже к отдельным файлам в моем домашнем каталоге.
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
16.01.2022, 23:10  [ТС] 9
Эппловцам понравился виндовый UAC и sudo из линукса. )))
Спасибо. Подожду ответа человека, которому макрос делал. У меня под виндой тоже не требовалось заключать в кавычки при обращении к стандартным функциям (к командам ОС - надо).
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
17.01.2022, 11:53  [ТС] 10
Цитата Сообщение от SlavaRus Посмотреть сообщение
У меня нужно было дать доступ даже к отдельным файлам в моем домашнем каталоге.
Сейчас смотрел по TeamViewer - с WB скачивается XLSX в папку "Загрузки", подаем на вход макроса - говорит, предоставьте права. Даем, макрос заявляет - файл не найден. Стоит переименовать его в 2.xlsx или любое другое имя - работает.
Можно ли что-то сделать и главное, почему файл не находится, даже когда права даешь? От чего все это зависит? Помня, что и на винде надо скачанное с инета разблокировать, скачали в zip и распаковали локально - все равно права просит и файл потом не находит.
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
17.01.2022, 14:06 11
Добрый день. Вечером попробую, сейчас нет возможности.
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
17.01.2022, 20:12 12
Добрый вечер.
Трудно что то сказать.
Скачал файл с соседней ветки.
Называется №2.xlsx
В загрузках имя файла уже выглядит по разному (см картинки).
Возможно дело кодировке.
Изображения
  
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
17.01.2022, 20:48 13
Чуток модернизировал скрипт из топика №3.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 Private Sub SelectFile1()
   ' The user selects a file, the full name of the selected file is written to cell B2.
   Dim FN As String, Title As String, FileFormats As String, AllowMultiSelect As Boolean, InitialView As String
 
   '1. Dialog settings.
   Title = "ВЫБЕРИТЕ ВХОДНОЙ ФАЙЛ"
   FileFormats = "{""org.openxmlformats.spreadsheetml.sheet""}"   ' xlsx only
   AllowMultiSelect = False
   InitialView = MacScript("return (path to desktop folder) as String")
 
   '2. Displaying the dialog.
   'If FileDialog(FN, Title, FileFormats, AllowMultiSelect, InitialView) = True Then ThisWorkbook.Sheets(1).Range("B2").Value = FN
   If FileDialog(FN, Title, FileFormats, AllowMultiSelect, InitialView) = True Then
    Workbooks.Open FileName:=FN
        ActiveWorkbook.SaveAs FileName:="/Users/slava/Desktop/excel_file.xlsm", _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
   End If
End Sub
Скачал файлик с этого сайта, запустил скрипт, все нормально отработало.
Никаких разрешений на доступ не потребовалось.
Возможно дело еще в версии Макос, у меня стоит Big Sur 11.2.1
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
17.01.2022, 21:28  [ТС] 14
Нет, у него имена были нормальные. Он скачивал с сайта Wilberries отчет о реализации и показывалось русскими буквами в проводнике (Finder). Но, может, эксель не понимает кодировку.
Версию макоси спрошу.
Все же насколько проще в винде. И большое Вам спасибо за тесты, людей с маком тут очень мало.
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
17.01.2022, 21:44 15
Скорее непривычно, поэтому кажется сложно.
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
17.01.2022, 22:29  [ТС] 16
Знаете, после того, как я нашел у Рона де Бруна код открытия диалога выбора файла... (3-е сообщение) Это с пол-пинка не написать. Это надо заучить... А если мало кто может сказать, то где ж найдешь ответ? Вон разбор на хабре - хорош ли мак https://habr.com/ru/post/573630/ Не могу сказать, так ли это на деле, не приходилось работать. Имел дело с айфоном - поставить apk на андроид, забросить туда книжку или забрать файл не в пример легче. Но экраны и отзывчивость у айфонов лучше. Вот чисто личное мнение, никого не сужу. Винда мне кажется удобней в силу постоянного использования, но и в линуксе не теряюсь. А вот мак - странная вещь.
0
1123 / 234 / 37
Регистрация: 15.03.2010
Сообщений: 720
28.01.2022, 20:49 17
Почитал вышеуказанную статью. Полный бред, автор просто набивет себе рейтинг. Компьютер прежде всего инструмент для решения задач. Что там у него под крышкой win, Lin, macOS или что-то еще дело второстепенное. Главное, чтобы он решал поставленные перед ним задачи, остальное религия.
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,675
28.01.2022, 20:58  [ТС] 18
У меня было некое впечатление при чтении, но не мог сказать, так оно или нет за неимением мака. Однако в UI вполне верю - что-то может быть не так удобно.
0
28.01.2022, 20:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2022, 20:58
Помогаю со студенческими работами здесь

Сохранить файл в папку, а ссылку на его в БД, открыть файл по ссылке из Бд
Здравствуйте. Не получается сохранить файлы в папку Data (c записью ссылки на него в БД),а затем...

Открыть файл xlsx (2007), обработать информацию и сохранить в аналогичный файл. Какие библиотеки использовать?
Добрый день друзья, суть вопроса такова: мне нужно открыть файл *.xlsx(именно с 2007 офиса),...

Открыть/сохранить файл
Здравствуйте. Имеется программка, которая редактирует шаблон, исходя из введенных в нее данных. В...

Открыть и сохранить файл
Здравствуйте. Есть программа в которой необходимо считать данные из файла .db, затем провести с...

Открыть/Сохранить файл
Здравствуйте. Подскажите пожалуйста как открыть/сохранить файл в/из элемента FastColoredTextBox

Создать массив натуральных трёхзначных чисел. Открыть файл для редактирования. В новый файл сохранить числа кратные трём
Доброе утро. Помогите пожалуйста. Создать массив натуральных трёхзначных чисел. Открыть файл для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru