1

Тема: Помогите с кодом Макроса

Имеется Мелкосовтовский маккрос с сайта внешняя ссылка

Его код такой

Sub Bingo1()
'
' Bingo1
'
'
    Dim strDocName As String
    Dim intPos As Integer

    'Find position of extension in file name
    strDocName = ActiveDocument.Name

    ActiveDocument.SaveAs FileName:=strDocName, _
        FileFormat:=wdFormatText
    ActiveDocument.Close
End Sub

Как заставить собаку работать???  Открываю файл "*.docx", нажимаю выполнить макрос. Но после закрытия документа в папке находится только оригинал  mad  mad  mad

2

Re: Помогите с кодом Макроса

Использовал другой код, с сайта ОСЗона.ру где ссылались на этот сайт

Sub SaveAllToWeb()
  Dim sDir As String
  Dim sFileName As String
  Dim oDoc As Document
  Dim i As Integer
  
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Выберите папку"
    If .Show Then sDir = .SelectedItems(1) Else Exit Sub
  End With
  
  Application.ScreenUpdating = False
  sFileName = Dir(sDir & Application.PathSeparator & "*.rtf")
  While Len(sFileName) > 0
    sFileName = sDir & Application.PathSeparator & sFileName
    Set oDoc = Documents.Open(sFileName, False, False, False)
    oDoc.SaveAs Mid(sFileName, 1, InStrRev(sFileName, ".")) & "htm", wdFormatHTML, AddToRecentFiles:=False
    oDoc.Close
    sFileName = Dir
    i = i + 1
    DoEvents
  Wend
  Application.ScreenUpdating = True
  MsgBox "Пересохранение завершено. Сохранено " & i & " файлов."
End Sub

Пришлось капельку изменить под себя, и получаю три макроса

Sub SaveDOCToText()
  Dim sDir As String
  Dim sFileName As String
  Dim oDoc As Document
  Dim i As Integer
  
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Âûáåðèòå ïàïêó"
    If .Show Then sDir = .SelectedItems(1) Else Exit Sub
  End With
  
  Application.ScreenUpdating = False
  sFileName = Dir(sDir & Application.PathSeparator & "*.doc")
  While Len(sFileName) > 0
    sFileName = sDir & Application.PathSeparator & sFileName
    Set oDoc = Documents.Open(sFileName, False, False, False)
    oDoc.SaveAs Mid(sFileName, 1, InStrRev(sFileName, ".")) & "txt", wdFormatText, AddToRecentFiles:=False
    oDoc.Close
    sFileName = Dir
    i = i + 1
    DoEvents
  Wend
  Application.ScreenUpdating = True
  MsgBox "Ïåðåñîõðàíåíèå çàâåðøåíî. Ñîõðàíåíî " & i & " ôàéëîâ."
End Sub
Sub SaveDocxToText()
  Dim sDir As String
  Dim sFileName As String
  Dim oDoc As Document
  Dim i As Integer
  
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Âûáåðèòå ïàïêó"
    If .Show Then sDir = .SelectedItems(1) Else Exit Sub
  End With
  
  Application.ScreenUpdating = False
  sFileName = Dir(sDir & Application.PathSeparator & "*.docx")
  While Len(sFileName) > 0
    sFileName = sDir & Application.PathSeparator & sFileName
    Set oDoc = Documents.Open(sFileName, False, False, False)
    oDoc.SaveAs Mid(sFileName, 1, InStrRev(sFileName, ".")) & "txt", wdFormatText, AddToRecentFiles:=False
    oDoc.Close
    sFileName = Dir
    i = i + 1
    DoEvents
  Wend
  Application.ScreenUpdating = True
  MsgBox "Ïåðåñîõðàíåíèå çàâåðøåíî. Ñîõðàíåíî " & i & " ôàéëîâ."
End Sub

Все три - делают то что мне нужно, а это --- Конвертируют папку с файлами Doc Docx и RTF, в файлы TXT в этих же папках

За скрипт спасибо El Sanchez, и viter.alex

Остался вопрос, как объединить все три скрипта в один. Пробовал добалением расширений через запятую, но не получилось, потому что не представляю как это работает. Пробовал добавлением дополнительных строк, но, не получилось, так как макрос читает первую строку с расширением, и остальные игнорирует

подскажите плиз



Да, путём подстановки знака "*" в строке сразу после "*.Doc"

  sFileName = Dir(sDir & Application.PathSeparator & "*.doc*")

Получилось избавиться от второго скрипта. Данный сможет работать с DOC и DOCX одновременно (а также docf,  docg и doccjffjjg)
однако с RTF проблема не решена.
Можно конечно подставить знак *.* но тогда под раздачу люлей могут попасть не те файлы (например desktop.ini, thumb.db, а так же *pdf и html )
В итоге если файл вордом не откроется, то макрос выдаст ошибку и конвертация прекратится.

Отредактировано Godlatro (16.03.2011 16:04:52)

3

Re: Помогите с кодом Макроса

Короче как избавиться от ошибок?
Если файл неудастся открыть или что то еще, то пусть он пропускается мимо.
Где то я видел подобный код на этом форуме, но найти не смог

4

Re: Помогите с кодом Макроса

Здравствуйте
Позвольте предложить следующее:

Конструкцию - sFileName = Dir … While … Wend
Повторить последовательно для каждого типа файла
Обратите внимание, что txt сохраняются без проверки имени файла
для каждого типа возможно изменить строчку
например для rtf

oDoc.SaveAs Mid(sFileName, 1, InStrRev(sFileName, ".") - 1) & "rtf" & Str(i) & "txt", wdFormatText, AddToRecentFiles:=False

также и для других
хотя можно и не мудрить -- в такой конструкции счетчик i общий

5

Re: Помогите с кодом Макроса

Что значит: txt сохраняется без проверки имени файла? К чему это приводит?

6

Re: Помогите с кодом Макроса

Подобная ситуация приводит к тому, что при наличии в одной директории файлов: 1.doc и 1.rtf Вы получите один файл 1.txt, причём макрос составит отчет: "Пересохранение завершено. Сохранено 2 файла"