Всем добрый день, подскажите плз как решить вопрос, имеется макрос на выгрузку, который выгружает файлы в таком формате (во вложении) Соответственно нужно, чтобы формат в конце менялся на читабельный типа ".pdf", ".rar" и т.д. Пытался сделать через уже готовое решение по замене символов, но что-то пошло не так( + данное решение не будет учитывать 4 символа формата, типа docx, xlsx. Решение наверняка простое , но что-то ничего не лезет в голову
Код
Function Replace_format(ByVal txt As String) As String
St$ = "pdf,doc,xls,zip,rar"
For i% = 1 To Len(St$) Step 3
txt = Replace(txt, Mid(St$, i, 3), "." & Mid(St$, i, 3))
Next
'txt = Replace(txt, ChrW(774), "")
Replace_symbols = txt
End Function
По идеи, просто поменяв расширение файла вы не меняете сам формат файла (его структуру). Вы не можете взять Word файл (docx) поменять расширение на jpg и получить картинку. Надо дописать в ваш макрос, который создаёт файлы ещё точку перед расширением
New написал: Надо дописать в ваш макрос, который создаёт файлы ещё точку перед расширением
Ну, а если не надо, то можно так
Код
Function Replace_format_3(ByVal txt As String) As String
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "pdf|doc(x|m)?|xls(x|m|b)?|zip|rar"
objRegExp.Global = True
If objRegExp.Test(RTrim(txt)) Then Set objMatch = objRegExp.Execute(RTrim(txt)).Item(objRegExp.Execute(RTrim(txt)).Count - 1) Else Exit Function
If Not objMatch.Length = Len(RTrim(txt)) - objMatch.FirstIndex Then Exit Function
Replace_format_3 = Left(RTrim(txt), objMatch.FirstIndex) & "." & Right(RTrim(txt), Len(RTrim(txt)) - objMatch.FirstIndex)
End Function
или так
Код
Function Replace_format_2(ByVal txt As String) As String
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "pdf |doc(x|m)? |xls(x|m|b)? |zip |rar "
txt1 = Right(txt, 5) & " "
If objRegExp.Test(txt1) Then Set objMatches = objRegExp.Execute(txt1) Else Exit Function
Replace_format_2 = Left(txt, Len(txt) - 5) & RTrim(objRegExp.Replace(txt1, "." & objMatches.Item(0)))
End Function
А чтобы работала Ваша функция замените Replace_symbols = txt на Replace_format = txt
Ну, регулярки для такой задачи слишком мощно. Достаточно такого:
Код
Function Replace_format(ByVal txt As String,sNewFormat$) As String
dim lp&,s$
lp = instrrev(txt, ".")
s = mid(txt,1,lp)
Replace_format = s & sNewFormat
End Function
использовать так:
Код
sNewFileName = Replace_format("Книга1.doc","pdf")
но как написали выше - это сменит только отображаемое расширение файла, но не его формат.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
msi2102, если бы ТС нормально сформулировал проблему и/или дал внятный пример, то и вопросов бы не было Я плюнул, так как нет желания угадывать, нужно "Добавить расширение к полному имени файла" или "Заменить существующее расширение файла на заданное"
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Зачем плеваться , у нас тут культурное сообщество вроде бы, на самом деле оба варианта подходят, тк приходится каждый раз менять расширение, вставляя точку чтобы файл "заработал" Всем спасибо за советы, в итоге работаю с функцией, предложенной msi2102