2010-04-26 26 views
6

Tôi có biểu mẫu VBA (trong Excel nếu có vấn đề) có chứa hộp văn bản.Khóa tab VBA đặt giá trị tab thực tế trong hộp văn bản thay vì điều hướng đến điều khiển tiếp theo

Trong ba lần, tôi thấy mình đang nhấn phím tab để điều hướng đến điều khiển tiếp theo, nhưng thay vào đó TAB thực tế đang được đặt vào hộp văn bản.

Biểu mẫu thường hoạt động như bình thường nhưng điều đó khiến tôi lo ngại rằng gremlin này hiển thị thường xuyên.

Nó đã hiển thị trên Office 2003 cũng như Office 2007 trên hai máy tính khác nhau.

Có ai khác đã gặp sự cố này và, nếu có, bạn đã khắc phục sự cố đó như thế nào?

+0

Tôi đã nhìn thấy hành vi tương tự thỉnh thoảng không có giải pháp rõ ràng. Đóng và mở lại Excel thường sửa chữa nó nhưng đó không phải là chính xác lý tưởng – barrowc

+0

đồng ý. Trong ba trường hợp tôi đã chứng kiến, các phương pháp sau đây đã sửa lỗi: 1. Nhấp vào nút lệnh và trở lại hộp văn bản. (Đây là lần đầu tiên tôi nhìn thấy hành vi này và đã xảy ra trong khi khách hàng của tôi đã đưa ra một bản demo cho nhân viên của mình. Ông nhìn qua tôi với một cái nhìn bối rối và tôi không có ý tưởng làm thế nào để sửa chữa như tôi đã không nhìn thấy nó trước đây. một chút xấu hổ.). Điều thú vị là, nó đã xảy ra hai lần với tôi kể từ bản demo đó. 2. Shift + Tab để chuyển đến điều khiển trước 3.Đóng và mở lại biểu mẫu – ray

+0

@tmdean bạn có thể hiển thị mã đằng sau biểu mẫu và hộp văn bản để xem điều gì đang xảy ra không? – JimmyPena

Trả lời

2

Tôi đã có thể tạo lại vấn đề 100% thời gian bằng cách khởi chạy Excel, lập tức kéo biểu mẫu lên và giữ phím tab.

Nếu tôi thay đổi bất kỳ mã nào trong biểu mẫu và lưu sổ làm việc, sự cố sẽ biến mất. Tôi sẽ viết nó cho một lỗi biên dịch trong VBA.

+2

Tôi đã làm theo hướng dẫn của bạn và sao chép lại. Tuyệt vời tìm thấy, bạn của tôi! Đánh dấu là câu trả lời vì chúng tôi biết nguyên nhân và cách khắc phục. BTW, tôi thích ảnh tiểu sử; nhắc nhở tôi về những ngày giết chết các đốm màu đỏ và xanh để kiếm được sự ủng hộ của phụ nữ sexy và trang phục 8-bit của họ. – ray

0

Đặt thuộc tính TabKeyBehavior thành False để nhận hành vi "Tab nhảy tới trường tiếp theo".

+0

Hmmm ... được đặt thành False theo mặc định. Tôi đã làm một tìm kiếm nhanh trên đó tên thuộc tính và tìm thấy bài đăng này: http://www.mrexcel.com/forum/showthread.php?t=44922 Nó có đoạn mã sau snippit gợi ý: Private Sub UserForm_Initialize() Dim CTL Như kiểm soát Đối Mỗi CTL Trong UserForm1.Controls MsgBox TypeName (CTL) Select Case TypeName (CTL) Case "TextBox" Ctl.TabKeyBehavior = False End Select Tiếp CTL End Sub Tôi sẽ thử điều đó và xem nó có hoạt động không. Ty để trả lời nhanh. – ray

+0

@ray: Đoạn mã này không làm gì khác ngoài việc đặt thuộc tính thành 'False' cho tất cả các hộp văn bản. Đó là không có gì bạn không thể làm ngay trong nhà thiết kế, vậy tại sao lại sử dụng nó. – Tomalak

+1

Bởi vì khi một cái gì đó không hoạt động và bạn đã thử các tuyến đường hợp lý ... đôi khi bạn cần phải thử một cái gì đó vô lý để xem nếu bạn có thể làm cho nó hoạt động. Đề xuất của bạn hữu ích, nhưng không áp dụng. – ray

1

Tôi đã tạo biểu mẫu có ba hộp văn bản. Tôi đã nhập các ký tự và được gắn thẻ vào phần tiếp theo trong một thời gian mà không thể sao chép vấn đề của bạn.

Cách duy nhất tôi có thể lấy tab vào hộp văn bản là bằng cách nhập Ctrl + Tab. Điều này có thể là đáng xấu hổ nhưng backspace loại bỏ nó vì vậy nó không phải là một vấn đề lớn. Có thể bạn vô tình nhấn Ctrl cùng một lúc?

Thỉnh thoảng tôi thấy rằng nếu tôi nhấn nhầm phím mà con trỏ nhảy đến một nơi khác trên màn hình. Tôi không hoàn toàn chắc chắn những gì tôi có nghĩa là "mispress"; nó có vẻ là một cái gì đó để làm với cách nhấn hai phím cùng một lúc. Đây có vẻ là một tính năng của bàn phím hiện đại và cách chúng phát hiện ra chìa khóa nào đã được nhấn vì tôi đã gặp phải nó trên nhiều máy tính khác nhau. Hàm ý là bằng cách ấn một phím, một ký tự điều khiển (có thể là tab hoặc tab ctrl +) được tạo ra.

Tôi cũng đã thử những điều sau đây đã hoạt động và che giấu sự cố bằng cách xóa tab và chuyển sang điều khiển tiếp theo.

Private Sub TextBox1_Change() 

    If InStr(1, TextBox1.Text, Chr(9)) <> 0 Then 
    TextBox1.Text = Replace(TextBox1.Text, Chr(9), "") 
    TextBox2.SetFocus 
    End If 

End Sub 
+0

Cảm ơn bạn đã xem xét nó. – Tmdean

1

Làm việc nhanh, sử dụng mã này trong sự kiện Thoát của kiểm soát.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    TextBox1.Text = VBA.Replace(TextBox1.Text, VBA.Chr(9), "") 
End Sub 
0

Điều này có thể giải quyết vấn đề:

Public Sub MoveFocusToNextControl(xfrmFormName As UserForm, _ 
xctlCurrentControl As control) 

Dim xctl As control 
Dim lngTab As Long, lngNewTab As Long 

On Error Resume Next 

' Move focus to the next control in the tab order 
lngTab = xctlCurrentControl.TabIndex + 1 
    For Each xctl In xfrmFormName.Controls 
     lngNewTab = xctl.TabIndex 
     ' An error will occur if the control does not have a TabIndex property; 
     ' skip over those controls. 
     If Err.Number = 0 Then 
      If lngNewTab = lngTab Then 
       xctl.SetFocus 
       Exit For 
      End If 
     Else 
      Err.Clear 
     End If 
    Next xctl 
Set xctl = Nothing 
Err.Clear 
End Sub 
Các vấn đề liên quan