Страницы: 1
RSS
макрос сохранения листа в новый файл
 

Добрый вечер!
нашла макрос, удалила из него ненужное мне, и вроде код простой, но все равно не получилось самостоятельно разобраться с тем, что удалось найти на форуме, не хочет работать.
нужно: скопировать лист в новый файл с нужным именем в нужную папку.
получилось: копирует лист в новый файл без нужного имени и предлагает выбрать, куда сохранить.

подскажите пожалуйста, где ошибка?

Код
Sub SaveMe()
Application.ScreenUpdating = False
Dim NewFilePath As String
Dim NewFileName As String

On Error Resume Next

NewFilePath = "Y:\RU\"
NewFileName = ActiveWorkbook.Sheets("pivot").Range("M2").Value

Sheets("date_1").Select
Sheets("date_1").Copy

ActiveWorkbook.SaveAs FileName:=NewFilePath & NewFileName & ".xlsx", FileFormat:=51
ActiveWindow.Close

Application.ScreenUpdating = True

End Sub

 
Ошибка в том, что нет такого каталога.
Строка 11 лишняя.
Изменено: Hugo - 22.05.2018 19:43:57
 
Hugo, удалила 11 строку, все по-прежнему

если в 9 строке заменить
Код
NewFileName = ActiveWorkbook.Sheets("pivot").Range("M2").Value
на
Код
NewFileName = ActiveSheet.Name
то все работает, но соответственно имя файла не то, которое мне нужно.  
 
У меня и так всё работает. Только естественно заменил отсутствующий "Y:\RU\" на то, что у меня есть.
Именно про это я и говорил. Есть у Вас каталог "Y:\RU\"?
А если не нравится только то имя файла, которое даёте - ну значит даёте негодное имя файла. Они знаете имеют некоторые ограничения...
Изменено: Hugo - 22.05.2018 19:55:15
 
а покажите что у вас тут:
ActiveWorkbook.Sheets("pivot").Range("M2").Value
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
anna ry написал:
Sheets("pivot").Range("M2").Value
а какое у Вас значение в этой ячейке?
 
Hugo, каталог такой есть.
yozhik, Ігор Гончаренко, значение в ячейке формула сцепка, например такое: "ООО "МЕРКУРИ 202001 сч.123  от"
31 знак не превышает.
 
попробуйте вручную сохранить книгу с именем "ООО "МЕРКУРИ   - именно с кавычками
Изменено: yozhik - 22.05.2018 20:02:01
 
31 знак - это ограничение названия листа, имени файла это не помеха.
А почему не соблюдаете правила форума? :)
 
yozhik,кавычек там нет, это я тут добавила, чтобы отделить текст ячейки :)
Hugo, точно про 31 знак, уже просто голова кругом от этого кода... я уже пыталась переименовывать лист, чтобы потом брать имя активного листа.

прикладываю файл, убрала из него всю коммерческую тайну, вроде принципиальные значения тем не менее есть.  
 
Ну так кавычки и не проходят. Нужно допфункцией самописанной эти имена в порядок приводить.
Вот например так можно завершить код:

Код
ActiveWorkbook.SaveAs FileName:=NewFilePath & Replace_symbols(NewFileName) & ".xlsx", FileFormat:=51
ActiveWindow.Close
 
Application.ScreenUpdating = True
 
End Sub

Function Replace_symbols(ByVal txt As String) As String
    St$ = "~!@#$%^&*=|`'"""
    For i% = 1 To Len(St$)
        txt = Replace(txt, Mid(St$, i, 1), "_")
    Next
    Replace_symbols = txt
End Function
Изменено: Hugo - 22.05.2018 20:21:38
 
Hugo, yozhik, да кавычки, теперь вижу, сразу полегчало )) вы же, наверняка, можете с такой функцией помочь? сама-то я точно не осилю
 
Hugo, Спасибо вам большущее!  :)  
 
я удаляю другой список символов:
Код
Function DelBadDOSChar$(s$)
  Const bch$ = "\/|*?<>"""
  Dim i&:  i = 1
  Do While i <= Len(s)
    If InStr(bch, Mid(s, i, 1)) > 0 Then s = Left(s, i - 1) & Right(s, Len(s) - i) Else i = i + 1
  Loop
  DelBadDOSChar = s
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Да, нужно сделать ревизию, я честно не вникал, взял готовое что было.
Вики вот что говорит:

Запрещённые символы
Многие операционные системы запрещают использование некоторых служебных символов.

Запрещённые символы Windows (в различных версиях):

\ — разделитель подкаталогов
/ — разделитель ключей командного интерпретатора
: — отделяет букву диска или имя альтернативного потока данных
* — заменяющий символ (маска «любое количество любых символов»)
? — заменяющий символ (маска «один любой символ»)
" — используется для указания путей, содержащих пробелы
< — перенаправление ввода
> — перенаправление вывода
| — обозначает конвейер
+ — (в различных версиях) конкатенация
Частично запрещённые символы Windows:

пробел — не допускается в конце имени файла;
. — не допускается в конце имени файла кроме имён каталогов, состоящих из точек и доступа с префиксом «\\?\».
Символы, вызывающие проблемы в широко распространённых компонентах:

% — в Windows используется для подстановки переменных окружения в интерпретаторе команд, вызывает проблемы при открытии файла через стандартный диалог открытия файла;
! — в Windows используется для подстановки переменных окружения в интерпретаторе команд, в bash используется для доступа к истории[1];
@ — в интерпретаторах команд вызывает срабатывание функций, предназначенных для почты.
Страницы: 1
Наверх