Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Переименовать книгу, имя из ячейки. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Переименовать книгу, имя из ячейки. (Макросы/Sub)
Переименовать книгу, имя из ячейки.
Yar4i Дата: Среда, 14.12.2016, 06:50 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Доброе утро дамы и господа :D
Есть книга с названием "длинное непонятное название", в каталоге (если надо D:\М29).
Надо старое "длинное непонятное название" заменить новым из ячейки J1 активного листа "Списание материалов (М-29)".
В инете нашел вариацию:
[vba]
Код
OldName = ActiveWorkbook.FullName
NewName = Sheets("Списание материалов (М-29)").[J1] & ".xlsx"
If NewName = ".xlsx" Or NewName = ActiveWorkbook.Name Then Exit Sub
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & NewName
Kill OldName
[/vba]
Не идёт. И так пробовал:
[vba]
Код
fn= [J1]
fn = Replace(fn, """", "")  'в ячейке J1 встречается (") - надо заменить на подходящий для винды знак
fn = Replace(fn, "/", ".")  'в ячейке J1 встречается (/) - надо заменить на подходящий для винды знак
fn = Replace(fn, "*", "х") 'в ячейке J1 встречается (*) - надо заменить на подходящий для винды знак
  ActiveWorkbook.SaveAs "D:\М29\" & fn & ".xlsx", FileFormat:=51
[/vba]
Не едет.
К сообщению приложен файл: 05-11-16_EWP4B2.xlsx (11.8 Kb)


Сообщение отредактировал Yar4i - Среда, 14.12.2016, 07:06
 
Ответить
СообщениеДоброе утро дамы и господа :D
Есть книга с названием "длинное непонятное название", в каталоге (если надо D:\М29).
Надо старое "длинное непонятное название" заменить новым из ячейки J1 активного листа "Списание материалов (М-29)".
В инете нашел вариацию:
[vba]
Код
OldName = ActiveWorkbook.FullName
NewName = Sheets("Списание материалов (М-29)").[J1] & ".xlsx"
If NewName = ".xlsx" Or NewName = ActiveWorkbook.Name Then Exit Sub
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & NewName
Kill OldName
[/vba]
Не идёт. И так пробовал:
[vba]
Код
fn= [J1]
fn = Replace(fn, """", "")  'в ячейке J1 встречается (") - надо заменить на подходящий для винды знак
fn = Replace(fn, "/", ".")  'в ячейке J1 встречается (/) - надо заменить на подходящий для винды знак
fn = Replace(fn, "*", "х") 'в ячейке J1 встречается (*) - надо заменить на подходящий для винды знак
  ActiveWorkbook.SaveAs "D:\М29\" & fn & ".xlsx", FileFormat:=51
[/vba]
Не едет.

Автор - Yar4i
Дата добавления - 14.12.2016 в 06:50
Roman777 Дата: Среда, 14.12.2016, 09:06 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Yar4i, а пробовали вместо:
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & NewName
[/vba]
так:
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "/" & NewName
[/vba],
естественно с учётом удаления из имени запрещённых знаков,
?


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Среда, 14.12.2016, 09:07
 
Ответить
СообщениеYar4i, а пробовали вместо:
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & NewName
[/vba]
так:
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "/" & NewName
[/vba],
естественно с учётом удаления из имени запрещённых знаков,
?

Автор - Roman777
Дата добавления - 14.12.2016 в 09:06
_Boroda_ Дата: Среда, 14.12.2016, 09:30 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
У меня работает вот так
[vba]
Код
Sub tt()
fn = [J1]
fn = Replace(fn, """", "")  'в ячейке J1 встречается (") - надо заменить на подходящий для винды знак
fn = Replace(fn, "/", ".")  'в ячейке J1 встречается (/) - надо заменить на подходящий для винды знак
fn = Replace(fn, "*", "х") 'в ячейке J1 встречается (*) - надо заменить на подходящий для винды знак
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub
[/vba]
Но только сохранять нужно макросом, записанным в другой книге. Мы же сохраняем в xlsx (формат без макросов), а в книге находится макрос сохранения.
Если нужно макросом именно из этой книги, то
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
[/vba]
или
[vba]
Код
Sub tt()
fn = [J1]
fn = Replace(fn, """", "")  'в ячейке J1 встречается (") - надо заменить на подходящий для винды знак
fn = Replace(fn, "/", ".")  'в ячейке J1 встречается (/) - надо заменить на подходящий для винды знак
fn = Replace(fn, "*", "х") 'в ячейке J1 встречается (*) - надо заменить на подходящий для винды знак
Application.DisplayAlerts = 0
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsx", FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = 1
'ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ меня работает вот так
[vba]
Код
Sub tt()
fn = [J1]
fn = Replace(fn, """", "")  'в ячейке J1 встречается (") - надо заменить на подходящий для винды знак
fn = Replace(fn, "/", ".")  'в ячейке J1 встречается (/) - надо заменить на подходящий для винды знак
fn = Replace(fn, "*", "х") 'в ячейке J1 встречается (*) - надо заменить на подходящий для винды знак
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub
[/vba]
Но только сохранять нужно макросом, записанным в другой книге. Мы же сохраняем в xlsx (формат без макросов), а в книге находится макрос сохранения.
Если нужно макросом именно из этой книги, то
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
[/vba]
или
[vba]
Код
Sub tt()
fn = [J1]
fn = Replace(fn, """", "")  'в ячейке J1 встречается (") - надо заменить на подходящий для винды знак
fn = Replace(fn, "/", ".")  'в ячейке J1 встречается (/) - надо заменить на подходящий для винды знак
fn = Replace(fn, "*", "х") 'в ячейке J1 встречается (*) - надо заменить на подходящий для винды знак
Application.DisplayAlerts = 0
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsx", FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = 1
'ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & fn & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 14.12.2016 в 09:30
Alex_ST Дата: Среда, 14.12.2016, 13:05 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Алаверды:
1. Чтобы не путаться с прямыми и обратными слэшами можно тупо использовать значение, возвращаемое Application.PathSeparator
2. Недопустимыми являются ещё и символы \ > < ? : |
Поэтому удобнее использовать функцию, вынесенную в отдельную процедуру.
Типа такой (только она все недопустимые символы заменяет на _ , но можно и переделать)
[vba]
Код
Private Function Replace_UnLegalChr$(ByVal sFileName$)   ' замена не допустимых символов в именах файлов
   Const sUnLegalChr$ = "/\:*?<>|"""   ' символы, не допустимые в именах файлов Windows
   Dim i%
   For i = 1 To Len(sUnLegalChr)
      sFileName = Replace(sFileName, Mid(sUnLegalChr, i, 1), "_")
   Next
   Replace_UnLegalChr = sFileName
End Function
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеАлаверды:
1. Чтобы не путаться с прямыми и обратными слэшами можно тупо использовать значение, возвращаемое Application.PathSeparator
2. Недопустимыми являются ещё и символы \ > < ? : |
Поэтому удобнее использовать функцию, вынесенную в отдельную процедуру.
Типа такой (только она все недопустимые символы заменяет на _ , но можно и переделать)
[vba]
Код
Private Function Replace_UnLegalChr$(ByVal sFileName$)   ' замена не допустимых символов в именах файлов
   Const sUnLegalChr$ = "/\:*?<>|"""   ' символы, не допустимые в именах файлов Windows
   Dim i%
   For i = 1 To Len(sUnLegalChr)
      sFileName = Replace(sFileName, Mid(sUnLegalChr, i, 1), "_")
   Next
   Replace_UnLegalChr = sFileName
End Function
[/vba]

Автор - Alex_ST
Дата добавления - 14.12.2016 в 13:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Переименовать книгу, имя из ячейки. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!