Wątek przeniesiony 2024-06-25 14:48 z Inne języki programowania przez cerrato.

VBA Word unikalna stopka

0

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ę:

  1. 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.
  2. 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?

0

W edytorze Word aby mieć inny tekst w stopce na nowej stronie należy stworzyć nową sekcję.
Poczytaj o sekcjach

1 użytkowników online, w tym zalogowanych: 0, gości: 1