Cześć,
mam prostą aplikację napisana w VBA (Excel) która generuje pliki Word.
W zależności od tego co user wybierze powstają dokumenty które mają od kilku do kilkunastu stron.
Aplikacja otwiera przygotowany prze zemnie plik Word w którym jest jakiś tam layout, wypełnia tekstem i zapisuje pod odpowiednią nazwą gotowy dokument.
Wszystko fajnie działa, mam tylko problem ze stopką w której na każdej stronie muszą być 2 informację:
- numer dokumentu który jest identyczny na każdej stronie. Tu nie ma problemu, na pliku Word w stopkę wrzuciłem <>nrUmowy<> i po wygenerowaniu replacem poodmieniam na konkretny numer.
- dowolny string ale różny dla każdej strony. Załóżmy, że user generuje dokument który ma 5 stron. Ma on możliwość na formie wpisać jakiś krótki przypis który ma być w stopce na każdej stronie czyli np: Strona 1: wprowadzenie, Strona 2: opis... i ja to muszę umieścić w stopce na konkretnej stronie :/
Próbowałem tu już różnych metod, np. dałem w stopce <>{ PAGE}<> a potem replacem chciałem podmieniać <>1<> na "wprowadzenie", <>2<> na opis... ale niestety nie zadziałało :/
Będę wdzięczny za jakieś podpowiedzi, poniżej wklejam kawałek kodu jak to teraz wygląda:
Sub test()
Set cWord = New Word.Application
cWord.Visible = True
cWord.WindowState = wdWindowStateMaximize
Set cWordDoc = cWord.Documents.Open("C:/test/draft.docx")
paragraphTextStart = paragraphCurrent
cWordDoc.Content.InsertAfter "sdddddddddddddddd" & Chr(10) & "1111111111111111" & Chr(10) & "2222222222222222" & Chr(10) & "33333333333333"
..................
..................
Dim myRange As Range
cWord.Selection.Find.ClearFormatting
cWord.Selection.Find.Replacement.ClearFormatting
With cWord.Selection.Find
.Text = "<*>nrUmowy<*>"
.Font.Size = 1
.Font.Color = -603914241
.Replacement.Text = "na to zmieniamy"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
cWord.Selection.Find.Execute Replace:=wdReplaceAll
Dim myStoryRange As Word.Range
For Each myStoryRange In cWord.ActiveDocument.StoryRanges
With myStoryRange.Find
.Text = "<*>nrUmowy<*>"
.Replacement.Text = "na to zmieniamy"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Do While Not (myStoryRange.NextStoryRange Is Nothing)
Set myStoryRange = myStoryRange.NextStoryRange
With myStoryRange.Find
.Text = "<*>nrUmowy<*>"
.Replacement.Text = "na to zmieniamy"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Loop
Next myStoryRange
''''''
End Sub
Jest fajne rozwiązanie które można użyć wklepując w stopkę dokumentu Word:
{ IF { PAGE } = 1 "wprowadzenie"
{ IF { PAGE } = 2 "opis"
{ IF { PAGE } = 3 "coś tam"" } } }
ale pytanie czy można taki kod 'wstrzyknąć' do stopki z poziomu VBA?