Удалить символ в FileName во время SaveAs - PullRequest
0 голосов
/ 22 апреля 2020

Я имею дело с кодом, написанным кем-то другим (и кем-то более продвинутым), и сейчас я немного над головой.

Соответствующий код:

ActiveDocument.SaveAs FileName:=MyString & Mystring2 & MyString3 & MyString4

Указывает имя, под которым он сохраняет документы Word. Это гладко, пока я не попытаюсь удалить специальные символы из значения, которое я добавил к имени файла.

Он отлично работает до последнего шага удаления специальных символов из MyString4.

MyString4 - Document.Bookmarks("Index").Range.Text

Я пытаюсь объявить всю строку как отдельную переменную

Dim Mystring MyString4 = Document.Bookmarks("Index").Range.Text, а затем с помощью команды Replace избавиться от некоторых определенных c символов в , К сожалению, это не позволит мне объявить строку как отдельную переменную. В конце файлы сохраняются без MyString4.

Поэтому мне интересно, на каком этапе и как можно избавиться от специальных символов, чтобы файл можно было сохранить.

Большое спасибо заранее

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Самое простое решение - заменить

MyString & Mystring2 & MyString3 & MyString4

вызовом функции, которая выполняет необходимые замены

SafeFileName(MyString & Mystring2 & MyString3 & MyString4)

Использование

Public Function SafeFileName(ByVal ipFileName as String) as String

    ' Do as many replaces as you need
    ipFileName=Replace(ipFileNAme, <your find text 1>, <your replace text>
    ipFileName=Replace(ipFileNAme, <your find text 2>, <your replace text>
    ipFileName=Replace(ipFileNAme, <your find text 3>, <your replace text>
    SafeFileName = ipFilename

End Function

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

0 голосов
/ 23 апреля 2020

Например, следующее заменяет недопустимые символы имени файла подчеркиванием:

Dim i As Long: Const StrExcl As String = """*./\:?|"
StrName = MyString & Mystring2 & MyString3 & MyString4
For i = 1 To Len(StrExcl)
  StrName = Replace(StrName, Mid(StrExcl, i, 1), "_")
Next
StrName = Trim(StrName)
ActiveDocument.SaveAs FileName:=StrName & ".docx"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...