title image


Smiley Re: VBA: dynamische Userform mit Tabelleninhalt.
Hallo,



ja, recht einfach sogar:



1) Erstelle ein leeres Dokument mit der Tabelle



2) Mit Alt + F11 den VBA Editor aufrufen. In der Linken Seite unter "Dokuemnt1" drücktst Du die rechte Maustaste und sagst "Einfügen" -> "UserForm". Ändere den Namen des UserForms auf "MeineTabelle"



3) Erstelle darin die Tabelle mit Textfeldern und bezeichne diese mit Zellennamen ("A1", "A2, "A3", ... , "B1", "B2", ... etc.)



4) Erstelle einen "OK" und einen "Abbruch"-Button. Damit ist das Formular schon fertig.



5) Wechsle zum Dokument und füge dort im "Entwurfsmodus" (1. Button in der Menüleiste Steuerelement-Toolbox) eine Commandoknopf ein. Beschrifte diesen mit "Editieren". Drücke die rechte Maustaste "Code anzeigen" und gib in die Prozedur ein:





Private Sub CommandButton1_Click()

    MeineTabelle.Show

End Sub





Damit ist der Button fertig und Du kannst den Entwurfsmodus verlassen.



6) Jetzt wieder zum UserForm:



Füge im Code des UserForms folgende Prozeduren ein:





Function gekuerzt(Wert) As String

    gekuerzt = Left(Wert, Len(Wert) - 2)

End Function



Private Sub UserForm_Initialize()

    Set Q = ActiveDocument.Tables(1)

    MeineTabelle.A1.Value = gekuerzt(Q.Cell(1, 1).Range.Text)

    MeineTabelle.A2.Value = gekuerzt(Q.Cell(1, 2).Range.Text)

    ... usw. für alle Zellen der Zeile

    MeineTabelle.B1.Value = gekuerzt(Q.Cell(2, 1).Range.Text)

    MeineTabelle.B2.Value = gekuerzt(Q.Cell(2, 2).Range.Text)

    ... usw. für alle Zeilen

End Sub



Private Sub UserForm_Deactivate()

    Set Q = ActiveDocument.Tables(1)

    Q.Cell(1, 1).Range.Text = MeineTabelle.A1.Value

    Q.Cell(1, 2).Range.Text = MeineTabelle.A2.Value

    ... usw. für alle Felder der Tabelle

End Sub









Das war es eigentlich schon. Viel Glück beim Coden.

Es geht sicher noch eleganter, aber so geht es wenigstens erst mal.



Wenn Du willst, das nach dem Öffnen der Tabelle sofort die EingabeMaske aufgerufen wird, benötigst Du folgenden Makro unter "This Document":





Private Sub Document_Open()

    ActiveDocument.ActiveWindow.WindowState = wdWindowStateMinimize

    MeineTabelle.Show

End Sub







Gruß, Michael.



Ich weiß, daß ich nichts weiß, aber ich will's wissen!


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: