Überwinden Sie die VBA Inputbox -Zeichengrenze
Frage
Die aktuelle Funktion, mit der ich eine Texteingangsbox sammle, kann anscheinend nicht mehr als 255 Zeichen akzeptieren, und ich muss in der Lage sein, mehr als das zu sammeln? Gibt es einen Parameter oder eine andere Funktion, mit der ich diese Grenze erhöhen kann?
Lösung
Um pedantisch zu sein, können Sie mit der Inputbox bis zu 255 Zeichen eingeben, aber nur 254 Zeichen zurückgeben.
Darüber hinaus müssen Sie eine einfache Form mit einem Textfeld erstellen. Dann machen Sie einfach eine kleine "Helferfunktion" so etwas wie:
Function getBigInput(prompt As String) As String
frmBigInputBox.Caption = prompt
frmBigInputBox.Show
getBigInput = frmBigInputBox.txtStuff.Text
End Function
oder sowas ähnliches...
Andere Tipps
Danke Bradc für die Info so. Mein endgültiger Code war grob wie folgt. Ich habe einen Knopf, der das Formular aufgerufen habe, das ich erstellt habe, und positioniert es ein wenig, da ich einige Probleme mit dem Formular hatte, das jedes Mal nach dem ersten Mal, als ich verwendet habe, an der falschen Stelle war.
Sub InsertNotesAttempt()
NoteEntryForm.Show
With NoteEntryForm
.Top = 125
.Left = 125
End With
End Sub
Die Benutzerform war ein Textfeld und zwei Befehlsbuttons (Abbrechen und OK). Der Code für die Schaltflächen war wie folgt:
Private Sub CancelButton_Click()
Unload NoteEntryForm
End Sub
Private Sub OkButton_Click()
Dim UserNotes As String
UserNotes = NotesInput.Text
Application.ScreenUpdating = False
If UserNotes = "" Then
NoteEntryForm.Hide
Exit Sub
End If
Worksheets("Notes").ListObjects("Notes").ListRows.Add (1)
Worksheets("Notes").Range("Notes").Cells(1, 1) = Date
Worksheets("Notes").Range("Notes").Cells(1, 2) = UserNotes
Worksheets("Notes").Range("Notes").Cells(1, 2).WrapText = True
' Crap fix to get the wrap to work. I noticed that after I inserted another row the previous rows
' word wrap property would kick in. So I just add in and delete a row to force that behaviour.
Worksheets("Notes").ListObjects("Notes").ListRows.Add (1)
Worksheets("Notes").Range("Notes").Item(1).Delete
NotesInput.Text = vbNullString
NotesInput.SetFocus ' Retains focus on text entry box instead of command button.
NoteEntryForm.Hide
Application.ScreenUpdating = True
End Sub
Ich habe nicht genug Repräsentanten, um Kommentare abzugeben, aber in der Subform_Load für den Helfer können Sie hinzufügen:
me.AutoCenter = True
Außerhalb dieser Form können Sie es so tun:
NoteEntryForm.Show
Forms("NoteEntryForm").AutoCenter = True
Meine Zugangsformulare werden alle verwirrt, wenn ich von meinen beiden zusätzlichen Monitoren bei der Arbeit zu meinem One Extra -Monitor zu Hause gehe und manchmal in der Ecke verloren geht. Dieser Autokenter hat es in die Formeigenschaften jeder meiner Formen geschafft.