Mengapa kata makro yang sederhana ini begitu lambat


1

Makro ini menerapkan desain tabled untuk semua tabel dalam dokumen. Kemudian menerapkan format paragraf ke tabel. Ketika hanya ada beberapa tabel (mis. 20) ini berjalan sangat lambat.

Bagaimana saya bisa mengoptimalkannya?

Sub Apply_tabledesign_to_all_tables()
'
' Apply_tabledesign_to_all_tables Macro
' Apply EVU table to all tables in document. 
'
Application.ScreenUpdating = False
    Dim tbl As Table
    Dim ac_cell As Word.cell
        For Each tbl In ActiveDocument.Tables
            tbl.Style = "EVU"
        For Each ac_cell In tbl.Range.Cells
            ac_cell.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
        Next
        'Set the alignment for the first column
        For k = 1 To tbl.Columns(1).Cells.Count
                tbl.cell(k, 1).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
        Next k
    Next
Application.ScreenUpdating = True
End Sub

Sunting: Saya lupa menyertakan perataan kolom pertama.


Anda akan sel ke sel dalam tabel ke meja, mengapa tidak hanya menerapkannya ke seluruh tabel atau seluruh rentang? Dua loop akan selalu lambat
Raystafarian

Bagaimana Anda mendefinisikan "sangat lambat" dengan tepat.
Ramhound

@Ramhound sangat lambat: 15 menit mungkin? 14 halaman 20 tabel pada i7 dengan ram 16 gb?
Andreas

@Raystafarian - oke - masuk akal. Saya belum menjadi orang VBA, jadi sebagian besar kode disatukan dari googling. Saya benar-benar mencoba menerapkan gaya paragraf ke seluruh tabel - tetapi tidak berhasil. Setiap petunjuk akan sangat dihargai.
Andreas

Excel 32-bit atau 64-bit? Jadi 20 tabel atau 14 halaman dengan 20 tabel masing-masing?
Ramhound

Jawaban:


2

Anda memutar melalui tabel dan kemudian melalui setiap sel di setiap tabel. Itu akan memakan waktu. Alamatkan rentang sebagai objek tunggal alih-alih melewati sel.

Sesuatu seperti ini seharusnya bekerja (dengan asumsi benda Anda benar)

Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
    tbl.Style = "EVU"
    tbl.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
Next
End Sub

Pada dasarnya ini (yang bekerja pasti)

Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
    tbl.Style = "Light Shading"
    tbl.Range.ParagraphFormat.Style = "Heading 1"
Next
End Sub

Terima kasih telah membantu banyak. Sebenarnya saya baru saja memperbarui pertanyaan saya karena bagian terakhir masih sulit ...
Andreas

Jika ini menjawab pertanyaan, harap jangan ubah pertanyaan - alih-alih tanyakan yang baru.
Raystafarian

oke - menurut Anda pembaruan saya memberi pertanyaan lain? - sepertinya jawabannya adalah: menerapkan kode Anda ke tingkat objek setinggi mungkin (tabel bukan sel). - Hanya untuk memastikan - Saya akan menandai jawaban yang diterima. Terima kasih.
Andreas

Ya, jadi terapkan saja ke seluruh jajaran
Raystafarian

Tampaknya tidak perlu loong untuk berjalan melalui setiap sel setelah optimasi Anda - jadi ini: Untuk k = 1 Untuk tbl. Kolom (1). Sel. Jumlah tbl.cell (k, 1). = wdAlignParagraphLeft Next k masih sangat cepat. Terima kasih
Andreas

-1

Saya memiliki masalah yang sama, perulangan melalui sel dalam tabel dan pengaturan format paragraf dari setiap sel. Meskipun saya setuju dengan jawaban di atas, itu bukan perulangan melalui sel-sel yang menjadi hambatan, sebenarnya format paragraf yang lambat - sangat lambat. Saya mencoba mengubah jumlah properti format paragraf yang saya atur di loop. Pengaturan 1 properti cepat, tetapi ketika saya meningkatkan jumlah properti saya atur ke 8 kode vba menjadi lebih lambat dan lebih lambat; pada 8 itu sangat lambat. Saya pikir ini hanya masalah kata 2013.


Bahkan kemudian: jika seseorang berniat memformat seluruh tabel, maka itulah yang harus dilakukan. Selain kecepatan, ini juga memungkinkan Word untuk memutuskan di mana menyimpan informasi pemformatan. Seperti, jika diterapkan dengan buruk, maka memformat setiap sel daripada seluruh tabel dapat meningkatkan ukuran file.
Arjan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.