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

Вход

Регистрация

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

 

= Мир MS Excel/Сохранить файл Word в PDF с нужным названием - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Сохранить файл Word в PDF с нужным названием
Rama Дата: Пятница, 18.05.2018, 00:16 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

2010
Привет. Есть макрос, который сохраняет документ word в формат pdf по названию файла. Проблема состоит в том, что при сохранении макрос запрашивает "Перезаписать или изменить название", если я меняю название то ошибка. Прошу поправить ошибку
[vba]
Код
Sub Word_ExportPDF()
'https://www.thespreadsheetguru.com/the-code-vault/microsoft-word-vba-to-save-document-as-a-pdf-in-same-folder
'PURPOSE: Generate A PDF Document From Current Word Document
'NOTES: PDF Will Be Saved To Same Folder As Word Document File
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim CurrentFolder As String
Dim FileName As String
Dim myPath As String
Dim UniqueName As Boolean

UniqueName = False

'Store Information About Word File
'Сохранить информацию о файле Word
  myPath = ActiveDocument.FullName
  'CurrentFolder = ActiveDocument.Path & "\"  'Сохранить файл pdf там же где и doc
  CurrentFolder = "D:\YandexDisk\1C Счета и договора\"  'Сохранить файл pdf по пути..
  FileName = Mid(myPath, InStrRev(myPath, "\") + 1, _
   InStrRev(myPath, ".") - InStrRev(myPath, "\") - 1)

'Does File Already Exist?
'Уже существует ли файл?
  Do While UniqueName = False
    DirFile = CurrentFolder & FileName & ".pdf"
    If Len(Dir(DirFile)) <> 0 Then
      UserAnswer = MsgBox("Файл уже существует. Нажмите " & _
       "[Yes] что бы перезаписать. Нажмите [No] что бы переименовать.", vbYesNoCancel)
      
      If UserAnswer = vbYes Then
        UniqueName = True
      ElseIf UserAnswer = vbNo Then
        Do
          'Retrieve New File Name
          'Получить новое имя файла
            FileName = InputBox("Укажите новое имя файла " & _
             "(спросит снова, если вы указали недопустимое имя файла)", _
             "Введите имя файла", FileName)
          
          'Exit if User Wants To
          'Выход, если пользователь хочет
            If FileName = "False" Or FileName = "" Then Exit Sub
        Loop While ValidFileName(FileName) = False
      Else
        Exit Sub 'Cancel
      End If
    Else
      UniqueName = True
    End If
  Loop
  
'Save As PDF Document
'Сохранить как документ в формате PDF
  On Error GoTo ProblemSaving
    ActiveDocument.ExportAsFixedFormat _
     OutputFileName:=CurrentFolder & FileName & ".pdf", _
     ExportFormat:=wdExportFormatPDF
  On Error GoTo 0

'Confirm Save To User
'Подтвердить Сохранить пользователю
  With ActiveDocument
    FolderName = Mid(.Path, InStrRev(.Path, "\") + 1, Len(.Path) - InStrRev(.Path, "\"))
  End With
  
  'MsgBox "PDF Saved in the Folder: " & FolderName
  MsgBox "Файл pdf создан в указанную папку"

Exit Sub

'Error Handlers
ProblemSaving:
  'MsgBox "There was a problem saving your PDF. This is most commonly caused" & _
   " by the original PDF file already being open."
  MsgBox "Не удалось скопировать"
  Exit Sub

End Sub
Function ValidFileName(FileName As String) As Boolean
'PURPOSE: Determine If A Given Word Document File Name Is Valid
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim TempPath As String
Dim doc As Document

'Determine Folder Where Temporary Files Are Stored
  TempPath = Environ("TEMP")

'Create a Temporary XLS file (XLS in case there are macros)
  On Error GoTo InvalidFileName
    Set doc = ActiveDocument.SaveAs2(ActiveDocument.TempPath & _
     "\" & FileName & ".doc", wdFormatDocument)
  On Error Resume Next

'Delete Temp File
  Kill doc.FullName

'File Name is Valid
  ValidFileName = True

Exit Function

'ERROR HANDLERS
InvalidFileName:
'File Name is Invalid
  ValidFileName = False

End Function
[/vba]
 
Ответить
СообщениеПривет. Есть макрос, который сохраняет документ word в формат pdf по названию файла. Проблема состоит в том, что при сохранении макрос запрашивает "Перезаписать или изменить название", если я меняю название то ошибка. Прошу поправить ошибку
[vba]
Код
Sub Word_ExportPDF()
'https://www.thespreadsheetguru.com/the-code-vault/microsoft-word-vba-to-save-document-as-a-pdf-in-same-folder
'PURPOSE: Generate A PDF Document From Current Word Document
'NOTES: PDF Will Be Saved To Same Folder As Word Document File
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim CurrentFolder As String
Dim FileName As String
Dim myPath As String
Dim UniqueName As Boolean

UniqueName = False

'Store Information About Word File
'Сохранить информацию о файле Word
  myPath = ActiveDocument.FullName
  'CurrentFolder = ActiveDocument.Path & "\"  'Сохранить файл pdf там же где и doc
  CurrentFolder = "D:\YandexDisk\1C Счета и договора\"  'Сохранить файл pdf по пути..
  FileName = Mid(myPath, InStrRev(myPath, "\") + 1, _
   InStrRev(myPath, ".") - InStrRev(myPath, "\") - 1)

'Does File Already Exist?
'Уже существует ли файл?
  Do While UniqueName = False
    DirFile = CurrentFolder & FileName & ".pdf"
    If Len(Dir(DirFile)) <> 0 Then
      UserAnswer = MsgBox("Файл уже существует. Нажмите " & _
       "[Yes] что бы перезаписать. Нажмите [No] что бы переименовать.", vbYesNoCancel)
      
      If UserAnswer = vbYes Then
        UniqueName = True
      ElseIf UserAnswer = vbNo Then
        Do
          'Retrieve New File Name
          'Получить новое имя файла
            FileName = InputBox("Укажите новое имя файла " & _
             "(спросит снова, если вы указали недопустимое имя файла)", _
             "Введите имя файла", FileName)
          
          'Exit if User Wants To
          'Выход, если пользователь хочет
            If FileName = "False" Or FileName = "" Then Exit Sub
        Loop While ValidFileName(FileName) = False
      Else
        Exit Sub 'Cancel
      End If
    Else
      UniqueName = True
    End If
  Loop
  
'Save As PDF Document
'Сохранить как документ в формате PDF
  On Error GoTo ProblemSaving
    ActiveDocument.ExportAsFixedFormat _
     OutputFileName:=CurrentFolder & FileName & ".pdf", _
     ExportFormat:=wdExportFormatPDF
  On Error GoTo 0

'Confirm Save To User
'Подтвердить Сохранить пользователю
  With ActiveDocument
    FolderName = Mid(.Path, InStrRev(.Path, "\") + 1, Len(.Path) - InStrRev(.Path, "\"))
  End With
  
  'MsgBox "PDF Saved in the Folder: " & FolderName
  MsgBox "Файл pdf создан в указанную папку"

Exit Sub

'Error Handlers
ProblemSaving:
  'MsgBox "There was a problem saving your PDF. This is most commonly caused" & _
   " by the original PDF file already being open."
  MsgBox "Не удалось скопировать"
  Exit Sub

End Sub
Function ValidFileName(FileName As String) As Boolean
'PURPOSE: Determine If A Given Word Document File Name Is Valid
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim TempPath As String
Dim doc As Document

'Determine Folder Where Temporary Files Are Stored
  TempPath = Environ("TEMP")

'Create a Temporary XLS file (XLS in case there are macros)
  On Error GoTo InvalidFileName
    Set doc = ActiveDocument.SaveAs2(ActiveDocument.TempPath & _
     "\" & FileName & ".doc", wdFormatDocument)
  On Error Resume Next

'Delete Temp File
  Kill doc.FullName

'File Name is Valid
  ValidFileName = True

Exit Function

'ERROR HANDLERS
InvalidFileName:
'File Name is Invalid
  ValidFileName = False

End Function
[/vba]

Автор - Rama
Дата добавления - 18.05.2018 в 00:16
Pelena Дата: Пятница, 18.05.2018, 10:32 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19401
Репутация: 4549 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте. У меня так сработало
[vba]
Код
Function ValidFileName(FileName As String) As Boolean
'PURPOSE: Determine If A Given Word Document File Name Is Valid
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim TempPath As String
Dim doc As Document

'Determine Folder Where Temporary Files Are Stored
TempPath = Environ("TEMP")

'Create a Temporary XLS file (XLS in case there are macros)
On Error GoTo InvalidFileName
    Set doc = Documents.Add
    doc.SaveAs2 TempPath & "\" & FileName & ".doc", wdFormatDocument
    doc.Close False
On Error Resume Next

'Delete Temp File
Kill doc.FullName

'File Name is Valid
ValidFileName = True

Exit Function

'ERROR HANDLERS
InvalidFileName:
'File Name is Invalid
ValidFileName = False

End Function
[/vba]

UPD. Изменила код


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816


Сообщение отредактировал Pelena - Пятница, 18.05.2018, 11:03
 
Ответить
СообщениеЗдравствуйте. У меня так сработало
[vba]
Код
Function ValidFileName(FileName As String) As Boolean
'PURPOSE: Determine If A Given Word Document File Name Is Valid
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim TempPath As String
Dim doc As Document

'Determine Folder Where Temporary Files Are Stored
TempPath = Environ("TEMP")

'Create a Temporary XLS file (XLS in case there are macros)
On Error GoTo InvalidFileName
    Set doc = Documents.Add
    doc.SaveAs2 TempPath & "\" & FileName & ".doc", wdFormatDocument
    doc.Close False
On Error Resume Next

'Delete Temp File
Kill doc.FullName

'File Name is Valid
ValidFileName = True

Exit Function

'ERROR HANDLERS
InvalidFileName:
'File Name is Invalid
ValidFileName = False

End Function
[/vba]

UPD. Изменила код

Автор - Pelena
Дата добавления - 18.05.2018 в 10:32
Rama Дата: Пятница, 18.05.2018, 14:28 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

2010
Pelena, а у меня не работает. При переименовывании (когда уже лежит в той папке файл с таким же названием) http://prntscr.com/jjhj7w, возникает ошибка в виде создается какой то документ с вопросом сохранения http://prntscr.com/jjhkb3


Сообщение отредактировал Rama - Пятница, 18.05.2018, 14:30
 
Ответить
СообщениеPelena, а у меня не работает. При переименовывании (когда уже лежит в той папке файл с таким же названием) http://prntscr.com/jjhj7w, возникает ошибка в виде создается какой то документ с вопросом сохранения http://prntscr.com/jjhkb3

Автор - Rama
Дата добавления - 18.05.2018 в 14:28
Pelena Дата: Пятница, 18.05.2018, 15:45 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19401
Репутация: 4549 ±
Замечаний: ±

Excel 365 & Mac Excel
Попробуйте поставить точку останова на строке
[vba]
Код
Set doc = Documents.Add
[/vba]
и посмотрите, чему равна переменная TempPath, а также существует ли папка Temp по этому пути


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПопробуйте поставить точку останова на строке
[vba]
Код
Set doc = Documents.Add
[/vba]
и посмотрите, чему равна переменная TempPath, а также существует ли папка Temp по этому пути

Автор - Pelena
Дата добавления - 18.05.2018 в 15:45
Rama Дата: Пятница, 18.05.2018, 17:56 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

2010
Pelena, прошу прощения, но моих знаний не хватает даже на такие действия. Я не понимаю что за точку поставить и где посмотреть переменную.
 
Ответить
СообщениеPelena, прошу прощения, но моих знаний не хватает даже на такие действия. Я не понимаю что за точку поставить и где посмотреть переменную.

Автор - Rama
Дата добавления - 18.05.2018 в 17:56
Pelena Дата: Пятница, 18.05.2018, 19:13 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19401
Репутация: 4549 ±
Замечаний: ±

Excel 365 & Mac Excel
После строчки [vba]
Код
TempPath = Environ("TEMP")
[/vba]добавьте [vba]
Код
MsgBox TempPath
[/vba] посмотрите, что выведется в окне сообщений


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПосле строчки [vba]
Код
TempPath = Environ("TEMP")
[/vba]добавьте [vba]
Код
MsgBox TempPath
[/vba] посмотрите, что выведется в окне сообщений

Автор - Pelena
Дата добавления - 18.05.2018 в 19:13
  • Страница 1 из 1
  • 1
Поиск:

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