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. Anonimowe
    2022-11-16T12:53:18+00:00

    Załączyłem zły plik :/ przepraszam. już jest poprawny:

    przyklad-tabela.zip

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  2. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2022-11-16T12:35:19+00:00

    No dobra ale jeszcze raz.

    W załączniku jest wiele tabel (co najmniej 5) o wymiarach ilości komórek (96, 40, 28, 16, 35) i żadna nie ma tytułu, ale tylko jedna ma nagłówek j.n.

    Sub tabele() 
    
    Dim t As Table 
    
    For Each t In ActiveDocument.Tables 
    
          Debug.Print t.Title & ", " & t.Range.Cells.Count 
    
    Next 
    
    End Sub
    

    Co ty chcesz osiągnąć?

    Pozdrawiam

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  3. Anonimowe
    2022-11-16T12:11:22+00:00

    Witaj Oskarze,

    dziękuje za zainteresowanie. Mam nadzieję, że uda Ci się pobrać plik:

    przyklad-tabela.zip

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  4. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2022-11-16T11:40:52+00:00

    W sumie widzę że nikt się nie odzywa. Sam Worda nie używam produkcyjnie, wiec mało wykorzystuje automatyzującej dokumentów o ile nie wykraczają poza samo ich tworzenie i drukowanie. Zatem nie zajmowałem się takim przypadkiem.

    Wklej może kawałek struktury (może być obrazek) z fejkowymi danymi jak to u ciebie wygląda, abym załapał szczegóły tego tworu, labo wklej link do chmury spakowanego pliku abym pobrał i w wolnej chwili zobaczył czy da się coś z tym zrobić.

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy