Guten Tag,
ich habe eine Frage bezüglich eines makros, und zwar habb ich ein makro erstellt welches aus einem Textfeld bei Aktivierung eine Userform mit KOmbinationsfeld macht. mit folgendem Code.
Private WithEvents cbbFeld As MSForms.ComboBox
Private WithEvents cmdOk As MSForms.CommandButton
Private WithEvents cmdCancel As MSForms.CommandButton
Private WithEvents cmdHelp As MSForms.CommandButton
Private Eintraege() As String
Private strTitel As String
Private strAufforderung As String
Private FldName As Variant
Private FldValue As Variant
Private FldStatus As String
Private FldHelp As String
Sub DropdownFormularInit(x() As String, ByVal Titel As String, _
ByVal Aufforderung As String)
ReDim Eintraege(UBound(x) - 1)
For i = 1 To UBound(x)
Eintraege(i - 1) = x(i)
Next i
strAufforderung = Aufforderung
strTitel = Titel
Me.Show
End Sub
Private Sub UserForm_Activate()
Me.Caption = strTitel
Me.Height = 96
Me.Width = 320
FldName = Selection.Bookmarks(1).Name
With ActiveDocument.FormFields(FldName)
If .DropDown.Valid Then
If .DropDown.ListEntries.Count > 0 Then FldValue = .Result
Else
FldValue = .Result
End If
If .OwnStatus Then FldStatus = .StatusText
If .OwnHelp Then FldHelp = .HelpText
End With
DropdownSchaltflaechenHinzufuegen
cbbFeld.List = Eintraege()
If Not FldStatus = "" Then Me.Height = Me.Height + 30
For i = 0 To UBound(Eintraege)
If FldValue = Eintraege(i) Then
cbbFeld.ListIndex = i
Exit For
End If
Next i
End Sub
Private Sub cbbFeld_Change()
ActiveDocument.FormFields(FldName).Result = cbbFeld.Value
Application.ScreenRefresh
End Sub
Private Sub DropdownSchaltflaechenHinzufuegen()
Set lblName = Me.Controls.Add("Forms.Label.1", , True)
With lblName
.Top = 4
.Left = 9
.Height = 12
.Width = 240
.Caption = strAufforderung
End With
Set cbbFeld = Me.Controls.Add("Forms.ComboBox.1", "cbbFeld", True)
With cbbFeld
.Top = 18
.Left = 9
.Height = 18
.Width = 300
.Style = fmStyleDropDownList
End With
Breite = 60
rechts = Me.Width - Breite - 12
For i = 1 To 3
Set cmd = Me.Controls.Add("Forms.CommandButton.1", , True)
With cmd
.Top = 48
.Left = rechts
.Height = 18
.Width = Breite
.Font.Size = 8
Select Case i
Case 1
.Caption = "Ok"
.Accelerator = "O"
.Default = True
Set cmdOk = cmd
Case 2
.Caption = "Abbrechen"
.Accelerator = "A"
.Cancel = True
Set cmdCancel = cmd
Case 3
.Caption = "Hilfe"
.Accelerator = "H"
If FldHelp = "" Then .Enabled = False
Set cmdHelp = cmd
End Select
End With
rechts = rechts - Breite - 6
Next i
If Not FldStatus = "" Then
Set lblStatus = Me.Controls.Add("Forms.Label.1", , True)
With lblStatus
.Top = Me.Height - 12
.Left = 9
.Height = 24
.Width = Me.Width - 24
.Caption = FldStatus
End With
End If
End Sub
Private Sub cmdOk_Click()
Unload Me
End Sub
Private Sub cmdHelp_Click()
MsgBox FldHelp, vbOKOnly + vbInformation, strTitel
End Sub
Private Sub cmdCancel_Click()
If Not FldValue = "" Then _
ActiveDocument.FormFields(FldName).Result = FldValue
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then cmdCancel_Click
End Sub
Hiernach wird also am Ende aus dem Userform wieder ein gewöhnliches Textfeld.
Allerdings möchte ich das nachdem der gewünschte Eintrag aus dem Kombinationsfeld gewählt wurde und dieser in das Textfeld übertragen wurde, ein weiteres manuelles editieren des Textfeldes nicht mehr möglich ist, wohl aber das bei erneutem anklicken des Textfeldes wieder die Userform mit Kombinationsfeld geöffnet wird um ein erneutes Auswählen eines Eintrags zu ermöglichen.
Ich hoffe es ist einigermaßen klar verständlich worauf ich hinaus möchte.
Hat irgendjemand eine Idee wie sowas verwirklicht werden kann?
Für ein paar Hinweise wäre ich sehr dankbar.
Gruß
Manuel
|