powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel (Office for Mac)
31 сообщений из 31, показаны все 2 страниц
Excel (Office for Mac)
    #37687302
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени!

Интересует вопрос, как этот код оптимизировать под Excel (Office for Mac 2011)?

Смысл кода.
Кнопка на форме открывает диалоговое окно, в нём выбирается нужный файл, при нажатии "открыть", по предустановленному шаблону создаётся папка, в неё копируется выбранный файл, диалоговое окно закрывается. Этот код нормально работает на Windows (исходно открывает диск С). На маке при нажатии ничего не происходит.

Код: vbnet
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.
Private Sub Photoprot_bef_oper_but_Click()

 File_Path = GetFilePath

 St = ActiveWorkbook.Path

 SrcFile = File_Path
 DestFile = St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\" & "6. Фото-видеопротокол" & "_" & Photoprot_bef_oper.Text & "\"

 On Error Resume Next

 MkDir (St & "\" & "MRI_CT_Rtg" & "\")
 MkDir (St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\")
 MkDir (St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\" & "6. Фото-видеопротокол" & "_" & Photoprot_bef_oper.Text)

 Set fs = CreateObject("Scripting.FileSystemObject")
 fs.CopyFile SrcFile, DestFile

End Sub

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для загрузки", _
 Optional ByVal InitialPath As String = "C:\") As String

On Error Resume Next

With Application.FileDialog(msoFileDialogOpen)

 .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
 If .Show <> -1 Then Exit Function
 GetFilePath = .SelectedItems(1): PS = Application.PathSeparator

End With

End Function



Подскажите, что нужно дописать, чтобы работало как на винде, так и на маке.

Спасибо!
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37687311
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorПодскажите, что нужно дописать,не дописать, а убрать On Error Resume Next
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37687381
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и чего? В винде он будет выдавать ошибку, если я буду добавлять ещё файлы в эту же папку - нажимать на кнопку (напишет, что объект уже существует).

Можно, конечно, прописать, чтобы каждый раз при нажатии на кнопку он проверял наличие соответствующих директорий и при их отсутствии, создавал, но как это сделать?
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37687385
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или, имеется ввиду, убрать из функции?
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37687386
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и того, что надо увидеть ошибку, а не игнорировать ее для начала и говорить "ничего не происходит"

Я не спец по маку, возможно, там надо использовать прямой слеш в пути. Что на нем выдает .Path?

А проверять наличие папки можно функцией Dir
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37687401
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не программер, если бы всё знал и умел, не рылся бы по форумам в поисках истины. До написанного выше своей головой дошел, изучая книжки и интернет. Будьте немного снисходительны.

Вторая проблема - отсутствие мака в настоящий момент. Сам не поклонник и не специалист в яблочных делах.

Лады. Доберусь до него, продолжим.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689244
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит, пишет. Ошибка выполнения "438". Объект не поддерживает это свойство или метод.
Выделяет строчку

Код: vbnet
1.
With Application.FileDialog(msoFileDialogOpen)
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689251
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё выделяет строку
Код: vbnet
1.
 MkDir (St & "\" & "MRI_CT_Rtg" & "\")



Пишет: Ошибка выполнения "75". Ошибка доступа к пути или файлу. Поменял слэши с '\' на '/'. По-прежнему эта ошибка.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689262
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorЗначит, пишет. Ошибка выполнения "438". Объект не поддерживает это свойство или метод.значит не поддерживает. Можно попробовать вместо этого GetOpenFileName


Dark Victorишет: Ошибка выполнения "75". Ошибка доступа к пути или файлу. Поменял слэши с '\' на '/'. По-прежнему эта ошибка.так чему St-то равно?
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689272
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
St = ActiveWorkbook.Path

В начале кода написано.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689310
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorSt = ActiveWorkbook.Path
В начале кода написано.
- Скажи чабан, а сколько овцы съедают травы в год?
- А какие, чёрные овцы или белые овцы?
- Ну к примеру белые?
- Нууу,- чешет в затылке чабан,- белые 20 кг.,
- А чёрные?
- А чёрные, тоже 20 кг.
- А сколько шерсти дают овцы?
- А какие, чёрные или белые?
- Чёрные к примеру.
- Чёрные 20 кг.
- А белые?
- И белые 20 кг.
- Слушай чабан, а чё ты спрашиваешь белые или чёрные!?
- Ну, дак белые - то овцы мои!
- А чёрные?
- А чёрные тоже мои!
Спросил, чему равен .Path? Ответа нет. Спросил, чему равен St. Оказывается .Path. Как бы так ответ-то получить (
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689317
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProDark VictorSt = ActiveWorkbook.Path
В начале кода написано.
Спросил, чему равен .Path? Ответа нет. Спросил, чему равен St. Оказывается .Path. Как бы так ответ-то получить (

Собственно, вопрос был
так чему St-то равно?
Я написал, чему. Какой вопрос, такой ответ.
Для ясности, можно было просто спросить, путь до книги.
Path в данном случае (на маке) равен "/Users/sdok/Documents/base/base.xlsm"
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689320
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorPath в данном случае (на маке) равен "/Users/sdok/Documents/base/base.xlsm"ага, именно это я и хотел понять, значит слеши все-таки прямые.

Нут так и что получается, вы пытаетесь создать папку
"/Users/sdok/Documents/base/base.xlsm/MRI_CT_Rtg/"
Думаю, это не получается, как минимум из-за отсутствия папки /Users/sdok/Documents/base/base.xlsm/
.Path на винде не содержит имени файла. Стало быть с этим на маке как-то придется бороться.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689322
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorСобственно, вопрос был
так чему St-то равно?

Я написал, чему. Какой вопрос, такой ответ.я не слепой - я вижу это в коде.
С тем же успехом можно было бы ответить: "значению типа String". Это тоже было бы правильным ответом, однако это не приближает нас к решению вопроса.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689325
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProDark VictorPath в данном случае (на маке) равен "/Users/sdok/Documents/base/base.xlsm"ага, именно это я и хотел понять, значит слеши все-таки прямые.

Не совсем правильно указал. base.xlsm это уже сама книга. Путь в директорию, где она лежит "/Users/sdok/Documents/base/" В этой же директории будет создаваться папка "MRI_CT_Rtg". На винде всё без проблем работает и создаёт.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689326
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro+
Dark VictorСобственно, вопрос был
пропущено...

Я написал, чему. Какой вопрос, такой ответ.
я не слепой - я вижу это в коде.
С тем же успехом можно было бы ответить: "значению типа String". Это тоже было бы правильным ответом, однако это не приближает нас к решению вопроса.

Как-то так.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689330
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorДля ясности, можно было просто спросить, путь до книги.Dark VictorНе совсем правильно указал. base.xlsm это уже сама книга. Путь в директорию, где она лежит "/Users/sdok/Documents/base/" В этой же директории будет создаваться папка "MRI_CT_Rtg". На винде всё без проблем работает и создаёт.Ну так потому я и не спрашивал путь к книге, а спрашивал чему равна переменная St и ожидал ответа именно на этот вопрос, потому что важно именно состояние переменной, а не путь к книге.
В таком случае, наиболее вероятна проблема с правами - недостаточно прав, чтобы создать эту папку.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689334
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно. Мысли были про это. Можно как-то из кода расширить права, или это для всего приложения нужно делать?
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689342
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorВозможно. Мысли были про это. Можно как-то из кода расширить права, или это для всего приложения нужно делать?нет, из кода, конечно, нельзя, иначе зачем они вообще существуют. Нужно дать их пользователю, от имени которого выполняется эксель.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689345
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписал кнопку через GetOpenFilename

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Photoprot_bef_oper_but_Click()

 File_Path = Application.GetOpenFilename _
                 ("All Files (*.*),*.*")

 St = ActiveWorkbook.Path

 SrcFile = File_Path
 DestFile = St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\" & "6. Фото-видеопротокол" & "_" & Photoprot_bef_oper.Text & "\"

 On Error Resume Next

 MkDir (St & "\" & "MRI_CT_Rtg" & "\")
 MkDir (St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\")
 MkDir (St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\" & "6. Фото-видеопротокол" & "_" & Photoprot_bef_oper.Text)

 Set fs = CreateObject("Scripting.FileSystemObject")
 fs.CopyFile SrcFile, DestFile




Снова на винде работает, на маке выдвёт новую ошибку: Ошибка выполнения "1004". Ошибка метода "GetOpenFilename" объекта "_Application".
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689349
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Капризная, видать, эта штука - офис для мака, особенно в части совместимости с неродной файловой системой.
Надо курить хелпы по этим командам, именно хелп маковского офиса.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689351
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, боюсь "Scripting.FileSystemObject" там тоже неоткуда взяться.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689358
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне ещё придётся как-то совмещать, чтобы оно работало на винде и маке. Уже были мысли предложить владельцу поставить винду второй системой. Ещё день-другой помучаюсь, наверно так и сделаю...
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37689380
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наткнулся.

В маке, судя по всему, вообще слэшей нет в пути...
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37690938
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо! Разобрался самостоятельно.

Переписал кнопку. Теперь работает как на винде, так и на маке. Может кому пригодится.

кнопка
Код: vbnet
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.
Private Sub Photoprot_bef_oper_but_Click()

    File_Path = Application.GetOpenFilename()
    St = ActiveWorkbook.Path
    
            If Application.OperatingSystem Like "*Mac*" Then
                
                If File_Path = False Then
            
                    MsgBox "Canceled!"
                    
                Else
                
                        DestFile = St & ":" & "MRI_CT_Rtg" & ":" & Name_.Text & "_" & Date_hospit.Text & ":" & "6. Photo-videoprotokol" & ":" & "Date_" & Photoprot_bef_oper.Text & ":"
        
                    On Error Resume Next
        
                        MkDir (St & ":" & "MRI_CT_Rtg" & ":")
                        MkDir (St & ":" & "MRI_CT_Rtg" & ":" & Name_.Text & "_" & Date_hospit.Text & ":")
                        MkDir (St & ":" & "MRI_CT_Rtg" & ":" & Name_.Text & "_" & Date_hospit.Text & ":" & "6. Photo-videoprotokol" & ":")
                        MkDir (St & ":" & "MRI_CT_Rtg" & ":" & Name_.Text & "_" & Date_hospit.Text & ":" & "6. Photo-videoprotokol" & ":" & "Date_" & Photoprot_bef_oper.Text)
        
                    On Error GoTo 0
            
                        FileCopy File_Path, DestFile
                        
                End If
                    
            Else
              
                If File_Path = False Then
            
                    MsgBox "Canceled!"
                    
                Else
                          
                        DestFile = St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\" & "6. Photo-videoprotokol" & "\" & "Date_" & Photoprot_bef_oper.Text & "\"

                    On Error Resume Next

                        MkDir (St & "\" & "MRI_CT_Rtg" & "\")
                        MkDir (St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\")
                        MkDir (St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\" & "6. Photo-videoprotokol" & "\")
                        MkDir (St & "\" & "MRI_CT_Rtg" & "\" & Name_.Text & "_" & Date_hospit.Text & "\" & "6. Photo-videoprotokol" & "\" & "Date_" & Photoprot_bef_oper.Text)
    
                    On Error GoTo 0
                        
                        Set fs = CreateObject("Scripting.FileSystemObject")
                        fs.CopyFile File_Path, DestFile
                        
                End If
    
            End If
                                                  
    Photoprot_bef_oper.Text = ClearContents
            
            

End Sub



По поводу создания папок в винде с SHCreateDirectoryEx заморачиваться не стал.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37690955
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark Victor,

Отлично, спасибо, что отписался
Так а что на маке выдает Application.PathSeparator и ActiveWorkbook.Path ?
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37691031
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProDark Victor,

Отлично, спасибо, что отписался
Так а что на маке выдает Application.PathSeparator и ActiveWorkbook.Path ?
В терминах не особо силен. Я так понимаю, Application.PathSeparator - это то, что выдаёт Application.GetOpenFilename?

Если да, то Application.PathSeparator = Macintosh HD:Users:sdok:Desktop:filename.ext
при этом файл 'filename.ext' находится на рабстоле,
а ActiveWorkbook.Path = Macintosh HD:Users:названиеучётнойзаписи:папкагдележитфайл
В моём случае книга на рабочем столе: Macintosh HD:Users:sdok:Desktop

Помимо того, что всё по-другому, на маке мне не понравилась организация рабочего пространства. Там нет, как в винде, раскрывания на весь экран с "фиксацией" окна к краям. В редакторе куча открытых окошек, каждое норовит залезть на другое. При каждом новом запуске одно за другое прячутся, что приходится их вылавливать, прежде, чем нажать кнопку "заветного зеленого плюса" для растяжения на свободное пространство экрана. Ещё у него проблемы с кириллицей в пути к фалу, созданного при помощи VBA. Пришлось ещё транслитерацию прописывать. Хотя, может это проблема конкретного образца.

Отчего многие от мака балдеют?..
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37691165
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorВ терминах не особо силен. Я так понимаю, Application.PathSeparator - это то, что выдаёт Application.GetOpenFilename?Нет, Application.PathSeparator - это то, что выдает Application.PathSeparator.
Dark Victor ActiveWorkbook.Path = Macintosh HD:Users:названиеучётнойзаписи:папкагдележитфайлDark VictorPath в данном случае (на маке) равен "/Users/sdok/Documents/base/base.xlsm"Вот ведь, блин!!! Ну зачем голову было морочить? Спрашивал несколько раз, чему равен Path? в итоге настоящий ответ получил только сейчас посли долгих препираний. Зачем вы вообще консультировались на форуме?
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37692697
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, за тем, что не знал как на маке это происходит. Всё что знал по VBA до этого и пробовал - было бесполезным. Были мысли, что Гуру помогут.
Проведя трое суток за компом узнал что как и куда. Повторюсь, я не программист (образование даже не техническое), но при необходимости, быстро учусь.

По поводу Path в данном случае (на маке) равен "/Users/sdok/Documents/base/base.xlsm" - это в свойствах файла на маке оно так значится. Вытащить Path, известным мне способом на тот момент, не получалось, выдавал какую-то ошибку.
Нет, Application.PathSeparator - это то, что выдает Application.PathSeparator. Если это ещё актуально, подскажите, куда прикрутить, чтобы вывести в MsgBox, нет сил уже в хэлпах копаться. Да и мак отдал уже.

Один хрен, всё с ним нет так. После простого открытия на нем редактора VBA (не редактируя особо ничего и сохранения), любой русский превращается в китайца. Ниже - форма, точнее, то, во что она превращается после мака.
Если даже не открывать, при простом запуске книги выбивает любые кириллические символы в коде (например, при создании папки), причём, как-то избирательно, часть слова остается нетронутой. Созданный путь, соответственно, в таком случае найти не может. Пришлось ещё транслит прописывать.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37692897
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark VictorНет, Application.PathSeparator - это то, что выдает Application.PathSeparator. Если это ещё актуально, подскажите, куда прикрутить, чтобы вывести в MsgBox, нет сил уже в хэлпах копаться. Да и мак отдал уже.Вы будете смеяться:
Код: vbnet
1.
MsgBox Application.PathSeparator

можно просто написать это в Immediate Window (которое вызывается по Ctrl+G) и нажать Enter. А лучше написать там просто
Код: vbnet
1.
?Application.PathSeparator

и нажать Enter.
...
Рейтинг: 0 / 0
Excel (Office for Mac)
    #37694414
Dark Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не работает там можно просто написать это в Immediate Window (которое вызывается по Ctrl+G) и нажать Enter. А лучше написать там простоНи Ctrl+G, ни Command+G...

MsgBox Application.PathSeparator= :
что подтверждает предыдущие посты.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel (Office for Mac)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]