Tutorial: Word 2007, 2010, 2013.
Tutorial ini menyajikan cara menggunakan macro VB untuk menghapus sel
kosong dalam tabel Microsoft Word yang berjumlah banyak dan letaknya
tidak berurutan.
Rekomendasi: Cara Menggunakan Table di Word
Kita bisa menghapus sel kosong dengan fungsi DELETE dalam fitur Table Tools | Layout.
Namun bila dokumen memiliki tabel yang panjang dan letak sel kosong
tersebar di sana-sini, maka kita perlu menggunakan macro untuk
menghapusnya.
Hal yang perlu diketahui:
- Macro ini akan menghapus sel kosong dalam tabel dengan cara memindahkan isi sel yang ada di bawahnya. Bila setelah dipindahkan ada baris yang selnya kosong semua, maka baris tersebut akan dihapus.
- Macro bisa digunakan untuk menghapus sel kosong pada seluruh tabel atau pada tabel yang dipilih saja.
- Macro tidak berlaku untuk tabel yang memiliki sel yang digabung (merged cell).
Langkah-Langkah
- Back up terlebih dahulu dokumen Word.
- Pilih tabel yang ingin dihapus sel kosongnya. Bila tidak ada tabel
yang dipilih, maka macro ini akan menghapus sel kosong di seluruh tabel
dalam dokumen.
Gambar berikut adalah contoh tabel dengan sel yang kosong. - Tekan tombol ALT + F11 untuk menampilkan layar editor Microsoft Visual Basic for Applications.
- Kemudian pada tab Insert, pilih Module. Akan muncul satu layar putih.
- Salin dan tempatkan kode di bawah ini pada layar putih tersebut.
Option Explicit
Sub MoveCells()
Dim objTable As Table
Dim intTblCount As Integer
Dim n As Integer
‘turn off screen updating to increase speed
Application.ScreenUpdating = False
With ActiveDocument
‘if selection is in a table act only on this table,
If Selection.Information(wdWithInTable) = True Then
‘single table option
Set objTable = Selection.Tables(1)
Call TableCellDelete(objTable)
Else
‘else act on all tables
intTblCount = .Tables.Count
For n = 1 To intTblCount
Set objTable = .Tables(n)
Call TableCellDelete(objTable)
Next n
End If
Set objTable = Nothing
End With
‘restore screen updating
Application.ScreenUpdating = True
End Sub
Sub TableCellDelete(OneTable As Table)
‘subroutine to handle cell deletes in one table
Dim intCol As Integer
Dim intRow As Integer
Dim intEqual As Integer
Dim blnMerged As Boolean
Dim rngCell As Cell
Dim intCols As Integer
Dim blnCopyClear As Boolean
Dim blnRowEmpty As Boolean
Dim m As Integer
Dim n As Integer
Dim o As Integer
‘test that cell has no merged rows or columns
‘set merged cell flag to false
blnMerged = False
intEqual = OneTable.Rows(1).Cells.Count
For n = 2 To OneTable.Rows.Count
If OneTable.Rows(n).Cells.Count <> intEqual Then blnMerged = True
Next n
If blnMerged = True Then GoTo Merged
intEqual = OneTable.Columns(1).Cells.Count
For n = 2 To OneTable.Columns.Count
If OneTable.Columns(n).Cells.Count <> intEqual Then blnMerged = True
Next n
If blnMerged = True Then GoTo Merged
‘look for empty cells in each row
‘table has no merged cells – so get column count
intCols = OneTable.Columns.Count
‘loop through all rows except the last one
For m = 1 To OneTable.Rows.Count – 1
For n = 1 To intCols
If CellData(OneTable.Rows(m).Cells(n)) = "" Then
‘copy text from same column in next row or below
blnCopyClear = False
For o = m + 1 To OneTable.Rows.Count
If CellData(OneTable.Rows(o).Cells(n)) <> "" Then
OneTable.Rows(m).Cells(n).Range.Text = _
CellData(OneTable.Rows(o).Cells(n))
‘clear copied cell’s contents
OneTable.Rows(o).Cells(n).Range.Text = ""
‘flag that we have done a copy & clear
blnCopyClear = True
End If
‘don’t look in any more rows if we have copied data
If blnCopyClear = True Then Exit For
Next o
End If
Next n
Next m
‘remove any fully blank rows – start at last row
For m = OneTable.Rows.Count To 2 Step -1
blnRowEmpty = True
For n = 1 To intCols
If CellData(OneTable.Rows(m).Cells(n)) <> "" _
Then blnRowEmpty = False
Next n
‘delete empty row
If blnRowEmpty = True Then
OneTable.Rows(m).Delete
End If
Next m
Exit Sub
Merged:
MsgBox "This routine does not work on tables with merged cells"
End Sub
Private Function CellData(contents As Cell)
‘removes end of cell marker from text in cell
‘and returns only the text
CellData = Left(contents.Range.Text, Len(contents.Range.Text) – 2)
End Function - Tekan tombol F5 untuk menjalankan macro dan tekan tombol ALT + F11 untuk kembali ke layar dokumen Word. Hasilnya adalah seperti gambar berikut.
0 komentar:
Posting Komentar