Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2011, 23:55   #1
asd2011
Новичок
Джуниор
 
Регистрация: 12.04.2011
Сообщений: 1
По умолчанию Поиск word документов с колонтитулам

help!
Нужно организовать поиск word документам , которые содержат колонтитулы. Т.е. прошерстить все word доки - при обнаружении связки .doc, .docx + колонтитул = запись в .txt имени файла и его пути.
Умею только batniki клеить - но тут кажется посложнее будет.
asd2011 вне форума Ответить с цитированием
Старый 13.04.2011, 04:22   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Не намного сложнее батников:
Код:
Option Explicit

Sub FilterDocsWithHF()
  Dim FileNames As FileDialogSelectedItems
  Dim oDoc As Document
  Dim i As Integer
  Dim HFExists As Boolean
  Dim oSec As Section
  
  Dim LogFilePath As String
  
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Выберите документы"
    .ButtonName = "Выбрать"
    .Filters.Add "Докуметы Word", "*.doc,*.docx"
    .AllowMultiSelect = True
    If .Show Then
      Set FileNames = .SelectedItems
      LogFilePath = .InitialFileName
      LogFilePath = Mid(LogFilePath, 1, InStrRev(LogFilePath, "\"))
      LogFilePath = LogFilePath & "log.txt"
    Else
      Exit Sub
    End If
  End With
  
  For i = 1 To FileNames.Count
    Application.ScreenUpdating = False
    Set oDoc = Documents.Open(FileNames(i), ReadOnly:=True, AddToRecentFiles:=False)
    For Each oSec In oDoc.Sections
      With oSec
        If .Headers(wdHeaderFooterEvenPages).Exists Or _
            .Headers(wdHeaderFooterFirstPage).Exists Or _
            .Headers(wdHeaderFooterPrimary).Exists Or _
            .Footers(wdHeaderFooterEvenPages).Exists Or _
            .Footers(wdHeaderFooterFirstPage).Exists Or _
            .Footers(wdHeaderFooterPrimary).Exists Then
          HFExists = True
          Exit For
        End If
      End With
    Next
    If HFExists Then
      
      FixInLogFile LogFilePath, FileNames(i)
      HFExists = False
    End If
    oDoc.Close
  Next
  Application.ScreenUpdating = True
End Sub

'Запись в лог-файл
Public Sub FixInLogFile(sLogFilePath As String, sMessage As String, Optional OverWriteFile As Boolean = False)
  If OverWriteFile Then
    Open sLogFilePath For Output As #1
  Else
    Open sLogFilePath For Append As #1
  End If
  Print #1, sMessage
  Close #1
End Sub
Лог сохраняется в папку с исходными документами
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нумерация распечатываемых документов word radionmc Microsoft Office Word 1 20.12.2010 08:58
Слияние документов WORD iBass Win Api 1 04.02.2010 22:10
Сохранение документов Word artemavd Общие вопросы Delphi 0 08.08.2009 10:37
Печать документов в Word... Busine2009 Microsoft Office Word 1 09.06.2009 07:48
Печать документов Word Busine2009 Общие вопросы Delphi 1 08.06.2009 21:28