Доброе утро дамы и господа Есть книга с названием "длинное непонятное название", в каталоге (если надо 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] Не едет.
Доброе утро дамы и господа Есть книга с названием "длинное непонятное название", в каталоге (если надо 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
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]
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]
У меня работает вот так [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]
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
Алаверды: 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]
Алаверды: 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