Word Vba Zellwertänderung in Tabelle auswerten

Hallo Wissende,

prinzipiell für Word 2000, gilt aber für alle Versionen.
Kann man mit Vba automatisch auf eine Zellwertänderung wie in Excel reagieren?

In dieser Doc habe ich einen workaround gebastelt.
http://www.herber.de/bbs/user/73600.doc
Sie hat nachfolgende Codes.

Im Code (derzeit) auskommentiert könnte ich mir anzeigen lassen welche Spaltennummer die Zelle der Tabelle hat, die ich anklicke.

Achso, das Ziel ist, wenn jmd. in der oberen Zeile der tab Werte einträgt und bei „Version“ was reinschreibt, soll dann automatisch in der unteren Tab der höchste/unterste Wert von Spalte 4 erscheinen.

Mein Code läuft an sich gut, reagiert auf Klicks in die Tabelle hinein und aktualisiert bei jedem Klick das was in der unteren Tabelle steht.

Eine saubere Lösung wäre aber, sofort und nur wenn in Spalte 4 ein Wert geändert wird, sollte die untere Tab geändert werden.
Ich brauch also ein Klassenmodul oder sonstwas was auf Zellwertänderung in Wordtabellen reagiert.
Hat jmd. dafür Codeschnipsel?

Ein Zusatzproblem bei vielen Tabellen, wie finde ich anhand eines Klicks in eine beliebige Tabelle heraus wie die Tabelle heißt, bzw. den Index?

Mit „Sel.Information(wdWithInTable)“ finde ich nur heraus DAS in eine beliebige Tabelle geklickt wurde, abewr nicht in welche Tabelle.

Ich weiß viele Fragen, ihr müßt sie ja auch nicht sofort lösen, in 1 Stunde reicht mir auch *bescheiden bin* *grien*

Danke ^ Gruß
Reinhard

In ThisDocument:

Option Explicit

Private Sub Document\_Open()
Call TabellenUeberwachungEin
End Sub

In Modul1:

Option Explicit
Dim X As New clsTabelle

Sub VersionErmitteln()
Dim Zei As Long
With ActiveDocument.Tables(1)
 For Zei = 2 To .Rows.Count
 If Replace(Replace(.Cell(Zei, 4).Range, Chr(13), ""), Chr(7), "") = "" Then Exit For
 Next Zei
 If Zei 2 Then
 ActiveDocument.Tables(2).Cell(1, 1).Range = Replace(Replace(.Cell(Zei - 1, 4).Range.Text, \_
Chr(13), ""), Chr(7), "")
 Else
 ActiveDocument.Tables(2).Cell(1, 1).Range = ""
 End If
End With
End Sub

Sub TabellenUeberwachungEin()
Set X.oApp = Word.Application
End Sub

In Klassenmodul clsTabelle:

Option Explicit
Public WithEvents oApp As Word.Application

Private Sub oApp\_WindowSelectionChange(ByVal Sel As Selection)
If Sel.Information(wdWithInTable) = True Then
 'MsgBox Sel.Information(wdStartOfRangeColumnNumber)
 'MsgBox "In Tabelle geklickt"
 Call VersionErmitteln
End If
End Sub

Hallo Reinhard,

Achso, das Ziel ist, wenn jmd. in der oberen Zeile der tab Werte einträgt und bei „Version“ was reinschreibt, soll dann automatisch in der unteren Tab der höchste/unterste Wert von Spalte 4 erscheinen.

Das geht ohne VBA, wenn die untere Tab Bestandteil der Tabelle ist, z.B. als unterste Zeile. Dann wählst Du Tabelle > Formel und tippst ein

=Max(über)

Word kann auch mit Tabellenzellen rechnen und kennt sogar rudimentäre Tabellenfunktionen wie MIN und MAX. Den zu brechnenden Bereich kann man, soweit ich mich dunkel erinnere, ähnlich wie in Excel eingeben. Es gibt aber auch die Worte UNTER und ÜBER, die sich auf die Spalte unter- oder oberhalb der Zelle mit der Formel beziehen.

Mit diesen Informationen könntest Du so vorgehen:

  • In der ersten Zeile der Versionentabelle steht {=MAX(unter).
  • Diese Zeile blendest Du durch verborgene Formatierung bzw. Zeilenhöhe aus.
  • Du läßt den Benutzer die Versionen erfassen. Anmerkung: auch in Word gibt’s die Datenmaske - suche auf der Seriendruck-Symbolleiste.
  • Die höchste Versionsnummer kannst Du überall im Dokument kriegen:
    … Du setzst eine Textmarke auf die MAX-Formel in der ersten Tabellenzeile
    … und verweist darauf mit {REF LastVersion}.

HTH.

Markus