2011-08-29 20 views
11

Şu anda bulunduğum masayı manipüle eden bir VBA modülü çalıştırabilmeyi diliyorum (yani, imleç bu tablonun içinde bir yerlerde). VBA kodu, çalıştırdığınız sırada olduğunuz her tabloda aynı işlemi gerçekleştirir. Örneğin, örneğin, her tablonun üst satırını (başlıklar) kalınlaştırması gereken bir modülüm olduğunu varsayalım. Şu anda bulunduğunuz tablo nesnesini (whatever olarak adlandırılır) bulmanız gerekecek ve böylece whatever.rows(0).Güncel tabloyu MS Word VBA'da nasıl edinebilirsiniz?

Tablo nesnesini imleç konumundan nasıl alabilirim? Ayrıca bir tabloda olduğumu ve hiçbir şey yapmadığımı (veya bir hata iletişim kutusunu kaldırdığımı) tespit etmem gerekiyor.

cevap

11

Bu yanıtın altındaki VBA alt yordamı, bunun nasıl yapılacağını gösterir.

çok kademeli seçimleri konusunda endişelenmenize gerek yok siz olarak böylece başlangıç ​​noktasına geri çöken, geçerli seçimi kullanır

:

Selection.Collapse Direction:=wdCollapseStart 

Daha sonra seçim bir tabloda içeride sağlamak için kontrol eder

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

Tablo, Selection.Tables(1)'a başvurarak erişilebilir.


Aşağıdaki kod sadece takmak veya dikey bir çubuk işareti silme ya tablonun her satırda başlayan hücrelerin her konum değiştirir kavramının basit bir kanıtı.

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

Bu oldukça eski bir sorudur farkındayım ama benzer bir sorun ile karşı karşıyadır sonraki kişiyi yardımcı olabilecek bazı kod tökezledi.

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

Bu sırada işaretçi tablonun indeksi dönecektir ardından bilgi değişiklikleri yapmak veya almak için kullanılabilir Hangi.

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 

Açıkçası çekler imleci sağlamak eklenmelidir içindedir bir masa.

+0

Mükemmel! Bu tam olarak ihtiyacım olan şey @enifeder: ActiveDocument.Range (0, Selection.Tables (1) .Range.End) .Tables.count – DRC

İlgili konular