Преодолеть ограничение на количество символов в VBA InputBox - PullRequest
5 голосов
/ 04 июня 2010

Текущая функция, которую я использую для сбора текста InputBox не может принимать более 255 символов, по-видимому, и мне нужно иметь возможность собирать больше, чем это? Есть ли параметр или другая функция, которую я могу использовать для увеличения этого предела?

Ответы [ 3 ]

4 голосов
/ 04 июня 2010

Чтобы быть педантичным, в поле ввода можно вводить до 255 символов, но возвращаются только 254 символа.

Помимо этого, да, вам нужно будет создать простую форму с текстовым полем. Затем просто сделайте небольшую «вспомогательную функцию» что-то вроде:

Function getBigInput(prompt As String) As String
    frmBigInputBox.Caption = prompt
    frmBigInputBox.Show
    getBigInput = frmBigInputBox.txtStuff.Text
End Function

или что-то в этом роде ...

2 голосов
/ 07 июня 2010

Спасибо BradC за информацию, что. Мой окончательный код был примерно следующим: у меня есть кнопка, которая вызывает форму, которую я создал, и немного ее позиционирую, поскольку у меня возникали некоторые проблемы с тем, что форма находилась в неправильном месте каждый раз после первого использования.

Sub InsertNotesAttempt()
    NoteEntryForm.Show
    With NoteEntryForm
        .Top = 125
        .Left = 125
    End With
End Sub

Пользовательской формой был TextBox и две кнопки Command (Cancel и Ok). Код для кнопок был следующим:

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
1 голос
/ 06 мая 2016

Мне не хватает представителя, чтобы комментировать, но в sub form_load для помощника вы можете добавить:

me.AutoCenter = True

Вне этой формы вы можете сделать это так:

NoteEntryForm.Show
Forms("NoteEntryForm").AutoCenter = True

Мои формы доступа запутываются, когда я перехожу с двух дополнительных мониторов на работе к одному дополнительному монитору дома, а иногда теряюсь в углу. Этот Автоцентр превратил его в свойства формы каждой из моих форм.

...