2010-06-03 70 views
5

Chức năng hiện tại tôi sử dụng để thu thập văn bản InputBox không thể chấp nhận hơn 255 ký tự, và tôi cần có khả năng thu thập nhiều hơn thế? Có một tham số hoặc chức năng khác mà tôi có thể sử dụng để tăng giới hạn này?Vượt qua giới hạn ký tự đầu vào VBA

+1

Tại sao hộp nhập liệu? Một hình thức nhỏ và hộp văn bản gần như luôn luôn là một ý tưởng tốt hơn. – Fionnuala

+0

@Remou ~ bởi vì phải mất nhiều mã hơn và không phải lúc nào cũng dễ dàng cho nhà phát triển mới sử dụng, trong khi InputBox rất dễ truy cập. Nếu không +1 – jcolebrand

+0

~ Tôi không nghĩ rằng nó sẽ mất một chuỗi dài hơn, SOL ... Làm theo lời khuyên của @ Remou. – jcolebrand

Trả lời

4

Để trở nên phổ biến, Hộp nhập liệu sẽ cho phép bạn nhập tối đa 255 ký tự, nhưng nó sẽ chỉ trả lại 254 ký tự.

Ngoài ra, có, bạn cần phải tạo một biểu mẫu đơn giản với hộp văn bản. Sau đó chỉ cần làm một chút "chức năng helper" một cái gì đó như:

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

hoặc một cái gì đó như thế ...

+0

không nên nằm trong nhãn như thế này 'frmBigInputBox.myLabel.caption = prompt' nếu không mọi thứ nằm trong thanh trên cùng của biểu mẫu/cửa sổ. – mountainclimber

2

Cảm ơn BradC cho các thông tin đó. Mã cuối cùng của tôi là gần như sau, tôi có một nút gọi biểu mẫu mà tôi đã tạo và định vị nó một chút khi tôi gặp một số vấn đề với biểu mẫu nằm sai chỗ mỗi lần sau lần đầu tiên tôi sử dụng.

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

Biểu mẫu người dùng là một TextBox và hai CommandButton (Hủy và Ok). Các mã cho các nút như sau:

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

tôi không có đủ đại diện cho bình luận, nhưng trong Form_Load phụ cho helper bạn có thể thêm:

me.AutoCenter = True 

Ngoài hình thức đó, bạn có thể làm như sau:

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

Biểu mẫu truy cập của tôi bị lẫn lộn khi tôi đi từ hai màn hình phụ làm việc thêm một màn hình phụ ở nhà và đôi khi bị mất ở góc. AutoCenter này đã biến nó thành các thuộc tính biểu mẫu của mỗi một trong các biểu mẫu của tôi.

+0

Chào mừng bạn đến với trang web! Điều này không cố gắng trả lời câu hỏi đã đăng, như bạn biết và phải là nhận xét. [Vui lòng sử dụng Câu trả lời dành riêng để trả lời câu hỏi] (// meta.stackoverflow.com/q/92107). Để phê bình hoặc yêu cầu làm rõ từ tác giả, để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và sau khi bạn có [đủ danh tiếng] (// stackoverflow.com/help/whats-reputation), bạn sẽ có thể để [nhận xét về bất kỳ bài đăng nào] (// stackoverflow.com/help/privileges/comment). Trong thời gian chờ đợi, vui lòng không sử dụng câu trả lời để đăng nhận xét. – Mogsdad

Các vấn đề liên quan