Jak w dokumencie MS Word można usunąć wszystkie tabele i grafiki?
Tak, można automatycznie usunąć wszystkie tabele lub grafiki korzystając ze skryptów vba MS Word. W dokumencie liczącym kilkaset stron znajduje się około stu tabel i grafik, które utrudniają ciągłe czytanie dokumentu. Ręczne usuwanie każdej pojedynczej tabeli lub grafiki to żmudne rozwiązanie. Proponuję napisanie i uruchomienie prostych skryptów, które wykonają to zadanie automatycznie. Co to są skrypty i jak ich używać opisane zostało w artykule na blogu JAWS: Jak przy pomocy JAWS korzystać z VBA dla aplikacji w MS Word?
Usuwanie wszystkich tabel.
Poniżej znajduje się listing skryptu usuwającego wszystkie tabele w aktywnym dokumencie MS Word, (usuwatabele.bas, plik w załączniku):
Sub UsuwaWszystkieTabele()
’deklaracja zmiennej jako tabela
Dim tabela As Table
For Each tabela In ActiveDocument.Tables
’wyszukuje w aktywnym dokumencie wszystkie tabele i usuwa je
tabela.Delete
Next tabela
End Sub
Usuwanie wszystkich grafik.
W dokumencie MS Word może znajdować się wiele grafik jako kształty, figury, rysunki itp. Możemy to sprawdzić naciskając skrót klawiszowy JAWS, Ctrl + Shift + O, aby wyświetlić listę wszystkich obiektów w linii (in line shape). Pamiętając o tym, że grafiki mają przypisany typ InlineShape, możemy napisać makro usuwające wszystkie grafiki, podobne do tego usuwające wszystkie tabele. Poniżej listing tego makra, a plik makra znajduje się w załączniku jako usuwagrafiki.bas.
Sub UsuwaWszystkieGrafiki()
’deklaracja zmiennej grafika jako objekt w linii
Dim grafika As InlineShape
For Each grafika In ActiveDocument.InlineShapes
’wyszukuje w aktywnym dokumencie wszystkie grafiki i usuwa je
grafika.Delete
Next grafika
End Sub
Dodatkowo poniżej pokazowe makro zawierające funkcję oczyszczającą dokument docx, która nie zwraca żadnej wartości. Dodano numerację wierszy, aby dokładniej opisać działanie makra. W załączniku znajduje się poprawne makro jako makro1pokazowe.bas.
1. Option Explicit
2.
3. Function Strip_Hyperlinks_Bookmarks_Fields()
4. Dim myLink As Hyperlink
5. Dim myBookmark As Bookmark
6. Dim myField As Field
7. With ActiveDocument
8. For Each myLink In .Hyperlinks
9. myLink.Delete
10. Next myLink
11. For Each myBookmark In .Bookmarks
12. myBookmark.Delete
13. Next myBookmark
14. For Each myField In .Fields
15. myField.Unlink
16. Next myField
17. End With
18. End Function
19.
20. Sub Clean_Up_Document_for_Conversion()
21. Call Strip_Hyperlinks_Bookmarks_Fields
22. 'inne funkcje oczyszczające dokument
23. End Sub
Objaśnienia jak działa to pokazowe makro:
- Wiersz 1 zawiera instrukcję Option Explicit dla modułu, aby wymusić jawne deklaracje wszystkich zmiennych.
- Wiersz 2 to odstępnik.
- Wiersz 3 uruchamia funkcję o nazwie Strip_Hyperlinks_Bookmarks_Fields, która usuwa wszystkie hiperłącza, zakładki i pola z aktywnego dokumentu. Funkcja działa aż do instrukcji End Function w wierszu 18.
- Wiersz 4 deklaruje zmienną o nazwie myLink jako typu Hyperlink.
- Wiersz 5 deklaruje zmienną o nazwie myBookmark jako należącą do typu zakładki.
- Wiersz 6 deklaruje zmienną o nazwie myField jako typu pole.
- Wiersz 7 rozpoczyna instrukcję With, która działa z obiektem ActiveDocument (aktywny dokument), i jest kontynuowana do instrukcji End With w wierszu 17.
Instrukcja With zawiera trzy pętle For Each … Next.
- Pierwsza pętla For Each … Next, w wierszach od 8 do 10, przechodzi przez każdy obiekt myLink w kolekcji Hyperlinks bieżącego dokumentu. Wiersz 9 używa metody Delete do usuwania po kolei każdego z łączy.Usunięcie hiperłącza usuwa łącze z dokumentu, ale pozostawia tekst, który był wyświetlany dla hiperłącza.
- Druga pętla For Each … Next, w wierszach od 11 do 13, działa z każdym obiektem myBookmark w kolekcji zakładek. Wiersz 12 wykorzystuje metodę Delete, aby kolejno usunąć każdą z zakładek. Usunięcie zakładki usuwa znacznik z dokumentu, ale pozostawia wszelki tekst lub inny obiekt zawarty w zakładce.
- Trzecia pętla For Each…Next, w wierszach od 14 do 16, działa z każdym obiektem myField w kolekcji pola. Wiersz 15 używa metody Unlink, aby rozłączyć kolejno każde z pól. Odłączenie pola pozostawia zawartość pola w dokumencie jako tekst lub obiekt, ale usuwa łącze do pola.
- Wiersz 17 zawiera instrukcję End With, która kończy instrukcję With, a wiersz 18 zawiera instrukcję End Function, która kończy funkcję.
- Wiersz 19 to odstępnik.
- Wiersze od 20 do 23 zawierają krótką pod procedurę, która po prostu wywołuje funkcję Strip_Hyperlinks_Bookmarks_Fields.
- Wiersz 22 zawiera komentarz stwierdzający, że pod procedura wywołałaby inne funkcje czyszczące, ale nie zostały one jeszcze napisane.
Załączniki: