Ich erstelle ein Dokument mit VBA bei der Arbeit (weil das ist das einzige, was ich bei der Arbeit verwenden kann). Meine Variable gibt eine leere Zeichenfolge zurück, nachdem sie festgelegt wurde. Ich versuche, Daten an ein Benutzerformular von einer Methode zu übergeben, die zur Laufzeit dynamisch generiert wird.Öffentliche Variable gibt leere Zeichenfolge zurück
I die Variable, wie dies auf der Oberseite des Thisdocument Modul
Public theName As String
Dann betreibe ich dies, wenn ein Kontrollkästchen markiert ist
With tblNew
'.Cell(Row:=rowCount, Column:=2).Merge MergeTo:=.Cell(Row:=rowCount, Column:=3)
.Rows(rowCount).SetHeight RowHeight:=InchesToPoints(0.35), HeightRule:=wdRowHeightExactly
.Cell(Row:=rowCount, Column:=1).SetWidth ColumnWidth:=InchesToPoints(0.75), RulerStyle:=wdAdjustNone
.Cell(Row:=rowCount, Column:=2).SetWidth ColumnWidth:=InchesToPoints(2.08), RulerStyle:=wdAdjustNone
.Cell(Row:=rowCount, Column:=3).SetWidth ColumnWidth:=InchesToPoints(1), RulerStyle:=wdAdjustNone
.Cell(Row:=rowCount, Column:=4).SetWidth ColumnWidth:=InchesToPoints(2), RulerStyle:=wdAdjustNone
.Cell(Row:=rowCount, Column:=5).SetWidth ColumnWidth:=InchesToPoints(1.85), RulerStyle:=wdAdjustNone
.Cell(rowCount, 1).Range.InsertAfter "Name:"
.Cell(rowCount, 3).Range.InsertAfter "Type:"
.Cell(rowCount, 2).Range.InlineShapes.AddOLEControl ClassType:="Forms.TextBox.1"
Set myCB = .Cell(rowCount, 4).Range.InlineShapes.AddOLEControl(ClassType:="Forms.TextBox.1")
Dim uofCode As String
Dim doc As Word.Document
Set doc = ActiveDocument
theName = myCB.OLEFormat.Object.Name
MsgBox theName ‘this message works fine
uofCode = "Private Sub " & myCB.OLEFormat.Object.Name & "_GotFocus()" & vbCrLf & _
vbCr & "Load uofForm" & vbCr & "uofForm.Tag = theName" & vbCr & "uofForm.Show" & vbCr & vbCrLf & _
"End Sub"
doc.VBProject.VBComponents("ThisDocument").CodeModule.AddFromString uofCode
End With
I die Variable theName
mit dieser Linie gesetzt theName = myCB.OLEFormat.Object.Name
und Stellen Sie sicher, dass es zum Testen mit einer MsgBox eingestellt ist MsgBox theName
Diese Nachricht funktioniert einwandfrei. Jetzt ist das Problem, wenn es die Funktion erzeugt, die die Variable leer ist. Irgendwelche Ideen, warum die Variable theName
nicht gesetzt bleibt?
Ich habe das Gefühl, dass Ihr '&" uofForm.Tag = theName "&' nur eine gewundene Methode ist, '&" uofForm.Tag = "" "& myCB.OLEFormat.Object.Name &" "" " & '. (Meine Vermutung, warum Ihre Variable nicht gesetzt ist, ist, dass einige Änderungen an Code-Reset-Variablen, so dass Ihre Code-Addition wahrscheinlich die Ursache ist. Sie könnten versuchen, die 'theName = myCB.OLEFormat.Object.Name'-Zeile nach Ihnen zu verschieben Aktualisieren Sie den Code und sehen Sie, was passiert.) – YowE3K