Преодолеть ограничение на количество символов сайт inputbox в VBA


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

3 5

3 ответа:

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

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

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

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

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

Sub InsertNotesAttempt()
    NoteEntryForm.Show
    With NoteEntryForm
        .Top = 125
        .Left = 125
    End With
End Sub
Форма пользователя представляла собой текстовое поле и две кнопки командной строки (Отмена и 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

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

me.AutoCenter = True

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

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

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