2011-08-29 21 views
11

Tôi muốn có thể chạy mô-đun VBA điều khiển bảng mà tôi hiện đang ở (tức là, con trỏ ở đâu đó trong bảng đó). Mã VBA sẽ thực hiện một thao tác giống nhau trên mỗi bảng mà bạn đang sử dụng khi bạn chạy nó.Làm thế nào bạn có thể lấy bảng hiện tại trong MS Word VBA?

Vì vậy, ví dụ: giả sử tôi có mô-đun cần in đậm hàng trên cùng của mỗi bảng (tiêu đề). Nó sẽ cần phải xác định vị trí đối tượng bảng (gọi là whatever) mà bạn hiện đang ở để nó có thể thao tác whatever.rows(0).

Làm cách nào để lấy đối tượng bảng từ vị trí con trỏ? Tôi cũng cần phát hiện nếu tôi là không phải trong một bảng và không làm gì cả (hoặc nâng cao hộp thoại báo lỗi).

Trả lời

11

Trình con VBA ở cuối câu trả lời này cho thấy cách thực hiện việc này.

Nó sử dụng các lựa chọn hiện tại, sụp đổ nó vào điểm xuất phát đầu tiên để không phải lo lắng về các lựa chọn đa phân khúc:

Selection.Collapse Direction:=wdCollapseStart 

Sau đó nó sẽ kiểm tra rằng lựa chọn để đảm bảo nó là bên trong một bảng

If Not Selection.Information(wdWithInTable) Then 
     MsgBox "Can only run this within a table" 
     Exit Sub 
    End If 

Bảng sau đó có thể truy cập được bằng cách tham chiếu đến Selection.Tables(1).


Mã chứng minh đơn giản về khái niệm chỉ đơn giản là bật mỗi ô khởi động trong mỗi hàng của bảng để chèn hoặc xóa một vạch đánh dấu dọc.

Sub VertBar() 
    ' Collapse the range to start so as to not have to deal with ' 
    ' multi-segment ranges. Then check to make sure cursor is ' 
    ' within a table. ' 
    Selection.Collapse Direction:=wdCollapseStart 
    If Not Selection.Information(wdWithInTable) Then 
     MsgBox "Can only run this within a table" 
     Exit Sub 
    End If 

    ' Process every row in the current table. ' 
    Dim row As Integer 
    Dim rng As Range 

    For row = 1 To Selection.Tables(1).Rows.Count 
     ' Get the range for the leftmost cell. ' 
     Set rng = Selection.Tables(1).Rows(row).Cells(1).Range 

     ' For each, toggle text in leftmost cell. ' 
     If Left(rng.Text, 2) = "| " Then 
      ' Change range to first two characters and delete them. ' 
      rng.Collapse Direction:=wdCollapseStart 
      rng.MoveEnd Unit:=wdCharacter, Count:=2 
      rng.Delete 
     Else 
      ' Just insert the vertical bar. ' 
      rng.InsertBefore ("| ") 
     End If 
    Next 
End Sub 
3

Tôi nhận thấy đây là câu hỏi khá cũ, nhưng tôi tình cờ gặp một số mã có thể giúp người tiếp theo gặp phải sự cố tương tự.

ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.count 

này sẽ trở lại với chỉ số của bảng con trỏ là ở nào sau đó có thể được sử dụng để thực hiện thay đổi hoặc lấy thông tin:.

dim numberOfColumnsInCurrentTable as Integer 
dim currentTableIndex as Integer 

currentTableIndex = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.count 
numberOfColumns = ActiveDocument.Tables(currentTableIndex).Columns.count 

Rõ ràng kiểm tra nên được bổ sung để đảm bảo con trỏ nằm trong một cái bàn.

+0

Hoàn hảo! Đây chính xác là những gì tôi cần @enifeder: ActiveDocument.Range (0, Selection.Tables (1) .Range.End) .Tables.count – DRC