VBA Word - numerowanie tabel

Anonimowe
2022-11-16T08:40:42+00:00

Mam problem z makro w Word. Może ktoś poprawi to makro, które nie działa w pełni tak jak powinno. Już tłumaczę o co chodzi.

W pliku Worda mam tabele podpisane jako "Tabela. [Nazwa tabeli]." Tabele nie są automatycznie numerowane, tak aby potem można było zrobić ich spis. Postanowiłem więc spróbować zrobić makro działające w taki sposób, aby:

  1. Wszystkie akapity zaczynające się od "Tabela. zmieniały formatowanie stylu właściwego dla podpisu tabeli.
  2. Słowa "Tabela. " zostały zastąpione na "Tabela [nr]. ", gdzie [nr] jest automatycznym, kolejnym numerem tabeli w dokumencie.

O ile udało mi się osiągnąć pkt. 1 to mam problem z pkt. 2 :(

Po zastosowaniu poniższego makro formatuje mi zgodnie ze stylem wszystkie akapity, które zaczynają się od "Tabela. ". Ale niestety tylko pierwsze występowanie słowa tabela jest numerowane na zasadzie "Tabela 1." a w pozostałych przypadkach makro usuwa słowa "Tabela. " i nie wstawia podpisu z automatycznym numerowaniem :( Nie potrafię niestety rozwiązać tego problemu. Będę bardzo wdzięczny za pomoc

Sub Change_Tabel()

Dim objDoc As Document

Dim head7 As Style

Set objDoc = ActiveDocument

Set head7 = ActiveDocument.Styles("Podpis nad obiektem")

With objDoc.Content.Find

.ClearFormatting

.Text = "Tabela. "

.MatchWildcards = True

With .Replacement

.ClearFormatting

.Style = head7

End With

.Execute Wrap:=wdFindContinue, Format:=True, Replace:=wdReplaceAll

End With

With objDoc.Content.Find

.ClearFormatting

    Options.ReplaceSelection = True

ActiveDocument.Sentences(1).Select

.Execute FindText:="Tabela. "

.MatchWildcards = True

If .Found = True Then

Selection.Delete Unit:=wdCharacter, Count:=1

Selection.InsertCaption Label:=wdCaptionTable, TitleAutoText:="", \_

    Title:="", Position:=wdCaptionPositionAbove, ExcludeLabel:=0

Selection.TypeText Text:="." & vbTab

End If

.Execute Wrap:=wdFindContinue, Format:=True, Replace:=wdReplaceAll

End With

End Sub

Microsoft 365 i pakiet Office | Excel | Do użytku biznesowego | Windows

Pytanie zablokowane. To pytanie zostało zmigrowane ze społeczności pomocy technicznej firmy Microsoft. Możesz zagłosować, czy pytanie jest pomocne, ale nie możesz dodawać komentarzy ani odpowiedzi, ani też śledzić pytania.

Komentarze: 0 Brak komentarzy
Odpowiedź zaakceptowana przez autora pytania
Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
2022-11-16T19:06:08+00:00

No, dobra :P

Sub Tabele_spis_ilustracji()
'MVP Oskar Shon www.VBATools.pl dodatki do Office
Dim p As Paragraph, i%, t$
Dim head7 As Style: Set head7 = ActiveDocument.Styles("Podpis nad obiektem")
For Each p In ActiveDocument.Paragraphs
    With p.Range
      t = Trim(.Text)
      If t Like "Tabela*" And Len(t) > 6 And Not t Like "Tabela #*" Then
         i = i + 1
         .Text = ""
         .Select
         Selection.InsertCaption Label:="Tabela", TitleAutoText:="InsertCaption1", _
            Title:=". " & Trim(Mid(t, 7)), Position:=0, ExcludeLabel:=0
         Selection.Style = head7
      End If
    End With
Next
End Sub

No i wyszło tak:

Obraz

Pozdrawiam.

Obraz

Czy ta odpowiedź była pomocna?

1 osoba uznała tę odpowiedź za pomocną.
Komentarze: 0 Brak komentarzy

Dodatkowe odpowiedzi: 17

Sortuj według: Najbardziej pomocne
  1. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2022-11-16T16:18:18+00:00

    Czyli nie sugerujemy się żadnymi tabelami. a po prostu szukamy w całym dokumencie fraz "Tabela ...coś tam" (rozpoczynającym się na słowie "Tabela")

    Do tych fraz stosujemy Twój styl i wrzucamy kolejny numerek zaczynając od jedynki.

    Tak.?

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  2. Anonimowe
    2022-11-16T15:55:35+00:00

    Nie, nie do końca tak. (Nie sugeruj się tym pierwszym plikiem, który błędnie wysłałem).

    Makro ma znaleźć zadania, które zaczynają się dokładnie od tekstu "Tabela. ". Po tym tekście jest tytuł tabeli.

    Zdanie zaczynające się od "Tabela. " Ma być sformatowane zgodnie ze stylem właściwym dla podpisu tabeli (u mnie nazywa się on "Podpis nad obiektem ".

    Następnie tekst "Tabela. " ma być zastąpiony Tabela NUMER. (Numer ma być autonumerowaniem, tak jakby korzystać z opcji "Wstaw podpis").

    W pliku, który wysłałem jako poglądowy jest zrobione przeze mnie makro. Oni wyszukuje akapity "Tabela. ", formatuje je zgodnie ze stylem. Ale autonumeracje nadaje tylko pierwszej tabeli.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  3. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2022-11-16T15:32:43+00:00

    Czyli chcesz mieć kod, który wyszuka tabelę (nie rysunek bo masz takie co przypominają tabele, ale są zdjęciem)

    i linie przed nią (nad nią) umieści "Tabela NUMER. " bez tytułu (no bo tego nie wiadomo skąd pobrać) korzystając z tego stylu, tak?

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  4. Anonimowe
    2022-11-16T13:04:18+00:00

    Chciałbym osiągnąć efekt taki, że po formatowaniu plik będzie wyglądał tak:

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy