2015-02-10 2 views
0

Я пытаюсь заменить дату в заголовке в различных документах.
Мне все равно, есть ли дата, когда она уже находится в скрипте или если программа требует аргументов.
Формат даты заголовка выглядит следующим образом: 22/02/2015, и я хочу заменить фактическую дату в том же формате.
Это код, который я сделал:Заменить дату заголовка в различных документах .doc

Sub FindAndReplaceFirstStoryOfEachType() 
    Set objRegEx = CreateObject("vbscript.regexp") 
    objRegEx.Global = True 
    objRegEx.IgnoreCase = True 
    objRegEx.MultiLine = True 
    Dim rngStory As Range 
    For Each rngStory In ActiveDocument.StoryRanges 
    With rngStory.Find 
     .Text = "([1-12]{1,3}/[1-09]{1,2}/[1-2014]{1,4})" 
     .Replacement.Text = "<DATE>" 
     .Wrap = wdFindContinue 
     .Execute Replace:=wdReplaceAll 
    End With 
    Next rngStory 
End Sub 

Я видел код, чтобы применить к документам в ковер, но когда я использую это не работает:

Set wdDoc = wdApp.Documents.Open("C:\Nueva carpeta\*.doc") 

EDIT: Я не знаю, как вставить мой последний код в другой vba, чтобы открыть файлы в папке C: \ Nueva carpeta. Вы сказали, чтобы создать слово .doc в C: \ Nueva carpeta, а затем создать модуль с кодом ответа правильно? Но в этом новом модуле мне нужно позвонить или вставить мой код или что?

+0

Что означает «фактическая дата» в том же формате? Не 22/02/2015 - фактическая дата? Или вы хотите заменить его на текущую дату – Alex

+0

Заменить его на текущую дату – Solaire

+0

посмотреть, разрешите ли ответ решить вопрос – Alex

ответ

0

Вы не можете использовать регулярное выражение в качестве текста поиска, вам нужно проверить результат поиска на регулярное выражение, а затем выполнить замену. Кроме того, я изменил регулярное выражение:

Sub FindAndReplaceFirstStoryOfEachType() 
Set objRegEx = CreateObject("vbscript.regexp") 
objRegEx.Global = True 
objRegEx.IgnoreCase = True 
objRegEx.MultiLine = True 
objRegEx.Pattern = "[0-9]{2}/[0-9]{2}/[0-9]{4}" 


Dim rngStory As Range 
For Each rngStory In ActiveDocument.StoryRanges 
If Not IsEmpty(rngStory) Then 
With rngStory.Find 
    If objRegEx.test(rngStory) = True Then 

    .Text = CStr(rngStory) 
    .Replacement.Text = Now() 
    .Wrap = wdFindContinue 
    .Execute Replace:=wdReplaceAll 
    End If 
End With 

End If 
Next rngStory 
End Sub 

Format(now(), "mm/dd/yyyy") можно использовать, если вы хотите изменить формат текущей даты. Кроме того, я не уверен, что в вашей последней части вопроса возникают проблемы с открытием документов.

EDIT: Open multiple documents может помочь, если вы хотите открыть несколько документов.

Вы можете разместить ниже код в шаблон документа и использовать его, чтобы открыть другие файлы:

Sub openf() 
Dim FSO As Object 
Dim fPath As String 
Dim myFolder, myFile 
Dim wdApp As Object 
Dim wdDoc As Variant 

fPath = "C:\" 'change to your directory 
Set wdApp = GetObject(, "Word.Application") 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set myFolder = FSO.GetFolder(fPath).Files 
For Each myFile In myFolder 
    If LCase(myFile) Like "*.docx" Then 'change to you file type 
     Set wdDoc = wdApp.Documents.Open(CStr(myFile)) 
     wdApp.Visible = True 
     FindAndReplaceFirstStoryOfEachType 
     wdDoc.Save 
     wdDoc.Close 
     Set wdDoc = Nothing 
    End If 
Next myFile 

End Sub 

Если вы все еще имеете вопрос о том, как это работает, я предлагаю вам прочитать некоторые основные VBA кодирования учебника : http://www.cpearson.com/Excel/MainPage.aspx

+0

Да, это работает! Прежде всего, спасибо за интерес. Теперь проблема заключается в том, как я могу применить этот код к заголовку различных документов, я имею в виду, что у меня есть разные документы на некотором ковре (в этом случае это будет «C: \ Nueva carpeta \ *. Doc»), и я хочу изменить дата в его заголовках (с кодом, который вы написали). Благодарю. – Solaire

+0

Привет, еще раз, я искал дополнительную информацию, и я получаю этот код, чтобы изменить заголовок, но с помощью этого кода я не могу перемещаться по заголовку, просто измените ячейку первого заголовка: Могу ли я перемещаться по заголовку, если я модифицирую этот код? – Solaire

+0

@ Solaire, вы говорите, что у вас несколько заголовков на тех же документах, или у вас есть многоразовые документы? – Alex

0

Ok, этот код изменяет дату заголовка и прекрасно работает:

Sub ModificarFechaCabecera() 

If ActiveWindow.View.SplitSpecial <> wdPaneNone Then 
    ActiveWindow.Panes(2).Close 
End If 
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _ 
    ActivePane.View.Type = wdOutlineView Then 
    ActiveWindow.ActivePane.View.Type = wdPrintView 
End If 
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 
Selection.MoveRight Unit:=wdCharacter, Count:=14 
Selection.MoveDown Unit:=wdLine, Count:=1 
Selection.MoveRight Unit:=wdCharacter, Count:=3 
Selection.MoveLeft Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.Delete Unit:=wdCharacter, Count:=1 
Selection.TypeText Text:=Format(Now(), "dd/mm/yyyy") 
Selection.MoveLeft Unit:=wdCharacter, Count:=4 
Selection.TypeBackspace 
Selection.TypeText Text:="/" 
End Sub 

Теперь, как я могу выполнить этот код во всех файлах .doc в ди приходский C: \ Nueva carpeta? Приветствия

Смежные вопросы