Страницы: 1 2 След.
RSS
Исправить код для создания папки, VBA WORD
 
Здравствуйте. Код должен по идее создать папку по нажатию кнопки, под именем вписанным в поле (Textbox). А также сохранить туда текущий документ с таким же именем. но он просто создает папку при чем необходимо чтобы папка создавалась на уровень выше но такого не происходит помогите разобраться почему (Word)
Код
  Private Sub CommandButton1_Click()
Dim s1
s1 = ActiveDocument.Path & "\"
  On Error Resume Next
    MkDir s1 & TextBox1.Value
    ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & ActiveDocument.Name, FileFormat:=wdFormatFlatXMLTemplateMacroEnabled
End Sub
 
Цитата
Kentavrik7 написал:
(Word)
А причем ту форум по Excel, если вопрос по Word?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Kentavrik7 написал:
папка создавалась на уровень выше но такого не происходит
потому что такого просто нет в коде. Там берется путь к папке с активным документом. Чтобы определить папку выше можно просто использовать InStrRev для поиска последнего слеша:
Код
s1 = Mid(ActiveDocument.Path,1,instrrev(ActiveDocument.Path,"\"))

Цитата
Kentavrik7 написал:
но он просто создает папку
уберите On Error Resume Next и увидите почему. Что-то явно не дает его сохранить. Разбирайтесь с самой ошибкой.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Спасибо. Создает верно папку. А вот с сохранением ошибка Run-time Error '4198' ошибка команды
 
Как вариант
Код
s1=CreateObject("Scripting.FileSystemObject").GetParentFolderName(ActiveDocument.Path)

разделитель добавить по вкусу.

У меня код работает. для проверки так написал
Код
Sub CommandButton1_Click()
Dim s1
s1 = CreateObject("Scripting.FileSystemObject").GetParentFolderName(ActiveDocument.Path) & "\"
  On Error Resume Next
    MkDir s1 & "111"
    ActiveDocument.SaveAs FileName:=s1 & "111" & "\" & ActiveDocument.Name, FileFormat:=wdFormatFlatXMLTemplateMacroEnabled
End Sub
По вопросам из тем форума, личку не читаю.
 
Цитата
Kentavrik7 написал:
А вот с сохранением ошибка
А Гугл что по этому поводу говорит? Такие ошибки возникают если есть некие повреждения структуры документа. Наблюдалось такое, если в Word есть гиперссылки. Попробуйте удалить гиперссылки(если они есть) и повторить. Но допускаю, что гиперссылки могут быть не единственной причиной.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
БМВ,если с пустым файлом, у меня работает) Только нужно было чтобы он не у папки добавлял название в конце, а у самого файла  :D . Но блин даже несмотря на то что сохраняется вордовский файл, открыть его не получается, пишет "проблема с содержимым".
 
Off
Дмитрий(The_Prist) Щербаков, Дмитрий, возвращайте уж просто The_Prist. Я серьезно. Первая смена для меня шоком была. аватарку точно не перепутал, компетенции высокии  теже, но имя другое :-)
По вопросам из тем форума, личку не читаю.
 
Код
Private Sub CommandButton1_Click()
  Dim s1
s1 = Mid(ActiveDocument.Path, 1, InStrRev(ActiveDocument.Path, "\"))
    MkDir TextBox1.Value
    ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & ActiveDocument.Name, FileFormat:=wdFormatFlatXMLTemplateMacroEnabled
End Sub
Да блин что не так(( Выводит теперь ошибку "5152"
Изменено: Kentavrik7 - 10.07.2018 13:05:44
 
Kentavrik7, проверять нет желания, но вы сохраняете файл FileFormat:=wdFormatFlatXMLTemplateMacroEnabled не меняя расширения, которое наследуется от ActiveDocument.Name но это уже не имеет отношения к созданию папаки

https://msdn.microsoft.com/en-us/vba/word-vba/articles/wdsaveformat-enumeration-word
Изменено: БМВ - 10.07.2018 13:21:14
По вопросам из тем форума, личку не читаю.
 
Kentavrik7, попробуйте вообще не указывать никакой формат.
 
БМВ, StoTisteg, спасибо вот так работает
Код
Private Sub CommandButton1_Click()
  Dim s1
s1 = Mid(ActiveDocument.Path, 1, InStrRev(ActiveDocument.Path, "\"))
    MkDir s1 & TextBox1.Value
    ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & ActiveDocument.Name
End Sub

Теперь создает папку и копирует туда файл. Подскажите как изменять имя файла самого, чтобы допустим если там написано какое то слово ( Чаще всего город ) переписать ему месяц ( из "Азов март" сделать "Азов апрель") исходя из текстбокса
Изменено: Kentavrik7 - 10.07.2018 14:02:20
 
Если нет гарантии что место положение упоминания о месяце фиксировано, то я б сперва 12 раз заменил месяц из списка на месяц из текстбокса. На первый и второй пробел ориентироваться опасно, на последний возможно тоже :-(
По вопросам из тем форума, личку не читаю.
 
БМВ, например, если я все заголовки заменю на "Кузнецк_Раздел 1,2_сентябрь 2014_Вариация"
По нижнему подчеркиванию как можно поменять ?
 
да я б все равно сделал  типа так
Код
Months=array("январь",..... ….,"декабрь")
Name = ActiveDocument.Name
for I = 0 to 11
 Name = replace(name,Months(I),TextBox1.Value)
next 
По вопросам из тем форума, личку не читаю.
 
БМВ, В общий код к сожалению интегрировать не получилось. Может я не так что то делаю
Код
Private Sub CommandButton1_Click()
  Dim s1
s1 = Mid(ActiveDocument.Path, 1, InStrRev(ActiveDocument.Path, "\"))
    MkDir s1 & TextBox1.Value
    Months = Array("январь", "Февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь")
Name = ActiveDocument.Name
For I = 0 To 11
 Name = Replace(Name, Months(I), TextBox1.Value)
Next
    ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & ActiveDocument.Name
    MsgBox "Папка создана"
End Sub

Вопрос такой в строке
Код
ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & ActiveDocument.Name
Если ничего не менять, то он сохраняет файл с исходным именем.
Если сделать так
Код
ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value
Он меняет имя но сохраняет его поверх папки, а не в нее. Логика вообще не понятная, и как это победить
Изменено: Kentavrik7 - 10.07.2018 14:53:58
 
А если так?
Код
ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & Name

:-)

Да  и с Февраль осторожнее . Чуствительность к регистру имеется.
Изменено: БМВ - 10.07.2018 15:34:13
По вопросам из тем форума, личку не читаю.
 
БМВ,
Код
Private Sub CommandButton1_Click()
  Dim s1
s1 = Mid(ActiveDocument.Path, 1, InStrRev(ActiveDocument.Path, "\"))
    MkDir s1 & TextBox1.Value
    Months = Array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь")
Name = ActiveDocument.Name
For I = 0 To 11
 Name = Replace(Name, Months(I), TextBox1.Value)
Next
    ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & Name
    MsgBox "Папка создана"
End Sub
так не получается, ошибка что-то
Изменено: Kentavrik7 - 10.07.2018 15:53:15
 
БМВ, или же нужно как то в цикл это все?
Код
   Dim Months
    Dim OldFileName As String
    Dim NewFileName As String
    Dim i As Integer
    
    OldFileName = "Кузнецк_Раздел 1,2_сентябрь 2018_Вариация"
    Months = Array("январь", "февраль", "декабрь", "сентябрь")
   
 For i = 0 To UBound(Months)
        If (InStr(OldFileName, Months(i)) > 0) Then
            If i <> UBound(Months) Then
                NewFileName = Replace(OldFileName, Months(i), Months(i + 1))
                MsgBox NewFileName
                Exit For
             
             Else 'если последний месяц - перескакиваем на первый элемент массива
                NewFileName = Replace(OldFileName, Months(i), Months(0))
                MsgBox NewFileName
                Exit For
             End If
        End If
    Next i
Изменено: Kentavrik7 - 10.07.2018 15:56:53
 
Цитата
Kentavrik7 написал:
так не получается, ошибка что-то
что при этом в Name?
По вопросам из тем форума, личку не читаю.
 
БМВ, Ярославль_Разделы 2,3_Апрель_ 2018
Изменено: Kentavrik7 - 10.07.2018 16:13:00
 
Код
Private Sub CommandButton1_Click()
  Dim s1
s1 = Mid(ActiveDocument.Path, 1, InStrRev(ActiveDocument.Path, "\"))
    MkDir s1 & TextBox1.Value
    Months = Array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь")
NewName = ActiveDocument.Name
For i = 0 To 11
 Name = Replace(NewName, Months(i), TextBox1.Value)
Next
    ActiveDocument.SaveAs FileName:=s1 & TextBox1.Value & "\" & NewName
    MsgBox "Папка создана"
End Sub
По вопросам из тем форума, личку не читаю.
 
БМВ, Выдает ошибку на Name
Изменено: Kentavrik7 - 10.07.2018 16:25:52
 
Здравствуйте, Михаил! Боюсь, что имя Name для переменной в Word не подходит.
Владимир
 
черт пропустил  там NewName должно быть везде.
По вопросам из тем форума, личку не читаю.
 
БМВ, sokol92, Отлично! Спасибо работает ))))
Большая вам благодарность!!!.
Маленький вопрос еще) Если будет необходимо называть папки
05_Май
06_Июнь
07_Июль
Можно ли чтобы в названия файла не шли три первые символа?
 
sokol92,  Владимир, приветствую. Правильно боитесь :-) .

Цитата
Kentavrik7 написал:
Можно ли чтобы в названия файла не шли три первые символа?
не понял, просто и имени вырезать первые три?

NewName=Mid(NewName,4,256)
По вопросам из тем форума, личку не читаю.
 
БМВ,Ну или как то сделать чтобы только месяц тянулся. Сейчас если попробовать внести в текст бокс 05_Май
он из этого
Ярославль_Разделы 2,3_Апрель_ 2018
делает вот так
Ярославль_Разделы 2,3_05_05_Май_ 2018
Изменено: Kentavrik7 - 10.07.2018 17:06:32
 
Цитата
Kentavrik7 написал:
Ну или как то сделать чтобы только месяц тянулся.
Mid(TextBox1.Value,4,256)
По вопросам из тем форума, личку не читаю.
 
БМВ,Вы гений, спасибо большое)))  
Страницы: 1 2 След.
Читают тему
Наверх