Hỏi về TextBox và cách rút gọn code

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Tôi có 1 đoạn code như sau:
Mã:
Sheet1.TextBox1.Text = Cells(1,1).Value
Sheet1.TextBox2.Text = Cells(2,1).Value
Sheet1.TextBox3.Text = Cells(3,1).Value
Sheet1.TextBox4.Text = Cells(4,1).Value
Sheet1.TextBox5.Text = Cells(5,1).Value
Sheet1.TextBox6.Text = Cells(6,1).Value
Sheet1.TextBox7.Text = Cells(7,1).Value
Sheet1.TextBox8.Text = Cells(8,1).Value
Xin hỏi làm sao rút gọn dc nó, đại khái giống như:
Mã:
Sheet1.TextBox(i) = Cells(i,1).Value
Xin cảm ơn!
ANH TUẤN
 
Thế này anh ạ:
Mã:
Sub ValuesToTextBoxs()
    Dim sh As Worksheet
    Dim objTextBox As OLEObject
    Dim RowIdx As Integer, ColIdx As Integer
    
    Set sh = ActiveSheet
    RowIdx = 0
    ColIdx = 8
    For Each objTextBox In sh.OLEObjects
        Debug.Print objTextBox.progID, objTextBox.Name
        If objTextBox.progID = "Forms.TextBox.1" Then 'Test for the textBox control
            RowIdx = RowIdx + 1
            objTextBox.Object.Value = Cells(RowIdx, ColIdx).Value
        End If
    Next
End Sub
 
Upvote 0
Hỏi thêm 1 tí về TextBox: Tôi phải dùng code gì hoặc công cụ có sẳn gì đễ dời con trỏ từ TextBox này sang TextBox khác bằng phím Tab
Tôi đã thử nhiều cách mà ko ăn thua!
Mong dc hướng dẩn!
ANH TUẤN
 
Upvote 0
Bác dùng tính năng Tab Order (Trong VBA, Chọn Form, vào View -> Tab Order -> Di chuyển lên xuống để sắp xếp) để có thể sắp xếp các textbox theo 1 thứ tự nhất định thì khi nhấn nút Tab chúng sẽ thay đổi vị trí lấn lượt từ Textbox này sang Textbox khác thôi!
 
Lần chỉnh sửa cuối:
Upvote 0
Ah... còn 1 câu hỏi nữa... Trên mạng nước ngoài tôi có đọc 1 đoạn code dùng đễ Clear tất cả các textbox 1 lượt bằng FOR:
PHP:
For i=1 to 8
controls("TextBox" & i).value=vbnullstring
Next i
Nhưng sao lại ko xài dc nhỉ? Báo lỗi: "Sub or Function not defined" Là sao nhỉ?

boong đã viết:
Bác dùng tính năng Tab Order (Trong VBA, Chọn Form, vào View -> Tab Order -> Di chuyển lên xuống để sắp xếp) để có thể sắp xếp các textbox theo 1 thứ tự nhất định thì khi nhấn nút Tab chúng sẽ thay đổi vị trí lấn lượt từ Textbox này sang Textbox khác thôi!
Ah... tôi quên nói cho các bạn biết là tôi ko có xài User Form gì cả... đấy chỉ là 8 cái TextBox nằm trên bảng tính (ko phải User Form)
ANH TUẤN
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
"Sub or Function not defined" chính là function controls(x as string) as OLEObject,
anhtuan tìm thử xem, có thể sub đó đổi tên các textbox thành các object dạng OLEObject
Mình đoán thế.
 
Upvote 0
Mình lượm được cái này trên xa lộ; Biếu bạn thử ra răng!

Ah... tôi quên nói cho các bạn biết là tôi ko có xài User Form gì cả... đấy chỉ là 8 cái TextBox nằm trên bảng tính (ko phải User Form)ANH TUẤN
PHP:
Option Explicit

Sub GetShapeProperties()
    Dim sShapes As Shape, lLoop As Long
    Dim wsStart As Worksheet, WsNew As Worksheet
    
    ''''''''''LIST PROPERTIES OF SHAPES''''''''''''' '
    
    Set wsStart = ActiveSheet
    Set WsNew = Sheets.Add
     
    'Add headings for our lists. Expand as needed'
    WsNew.Range("A1:F1") = _
     Array("Shape Name", "Shape Type", "Text?", "Height", "Width", "Left", "Top")
     
    'Loop through all shapes on active sheet'
    For Each sShapes In wsStart.Shapes
        'Increment Variable lLoop for row numbers'
        lLoop = lLoop + 1
        With sShapes
            'Add shape properties'
            WsNew.Cells(lLoop + 1, 1) = .Name
            WsNew.Cells(lLoop + 1, 2) = .OLEFormat.Object.Name
            WsNew.Cells(lLoop + 1, 3) = .AlternativeText '(Sa_DQ)'
            WsNew.Cells(lLoop + 1, 4) = .Height
            WsNew.Cells(lLoop + 1, 5) = .Width
            WsNew.Cells(lLoop + 1, 6) = .Left
            WsNew.Cells(lLoop + 1, 7) = .Top
            'Follow the same pattern for more : AnhTuan '
        End With
    Next sShapes
    'AutoFit Columns.'
    WsNew.Columns.AutoFit
End Sub

Kết quả của 5 loại Shapes khác nhau là vầy:
PHP:
Shape Name	Shape Type	Text?	Height	Width	Left	
AutoShape 1	AutoShape 1	Cloud Callout: Mây mưa	35.25	126	13.5	105
Cloud	Cloud		       52.5	    100.5	       21.75	     165.75
Rectangle 3	Rectangle 3		30.75	91.5	151.5	143.25
Text Box 4	Text Box 4	Text Box: GPE.COM	39.75	124.5	150.75	195.75
WordArt 5	WordArt 5	GPE.COM	65.25	124.5	312	138
 
Upvote 0
Ai cha cha... quả là ko có cách nào ngắn gọn cho vụ này dc rồi... Vì quả thật tôi muốn dùng FOR với mục đích rút gọn code, chứ nếu dùng FOR mà code còn dài hơn thì thôi thà rằng:
PHP:
Sheet1.TextBox1.Text = ""
Sheet1.TextBox2.Text = ""
Sheet1.TextBox3.Text = ""
Sheet1.TextBox4.Text = ""
.... cho lẹ và dễ hiểu...
Hic...
ANH TUẤN
 
Upvote 0
anhtuan1066 đã viết:
Ai cha cha... quả là ko có cách nào ngắn gọn cho vụ này dc rồi... Vì quả thật tôi muốn dùng FOR với mục đích rút gọn code, chứ nếu dùng FOR mà code còn dài hơn thì thôi thà rằng:
PHP:
Sheet1.TextBox1.Text = ""
Sheet1.TextBox2.Text = ""
Sheet1.TextBox3.Text = ""
Sheet1.TextBox4.Text = ""
.... cho lẹ và dễ hiểu...
Hic...
ANH TUẤN

Thật khó hiểu ý bác quá! Với cách của em thì cho dù số TextBox1-1000 đi nữa thì cũng chỉ một thủ tục "ValuesToTextBoxs" (có 7 dòng trong For..Next). Còn cách mà anh làm thì phải viết 1000 dòng :).
Vậy đâu là ngắn gọn bác nhỉ?
 
Upvote 0
TuanVNUNI đã viết:
Thật khó hiểu ý bác quá! Với cách của em thì cho dù số TextBox1-1000 đi nữa thì cũng chỉ một thủ tục "ValuesToTextBoxs" (có 7 dòng trong For..Next). Còn cách mà anh làm thì phải viết 1000 dòng :).
Vậy đâu là ngắn gọn bác nhỉ?
Đọc hết cái thread này, không hiểu bác Tuấn muốn gì nữa.+-+-+-+

LVD
 
Upvote 0
levanduyet đã viết:
Đọc hết cái thread này, không hiểu bác Tuấn muốn gì nữa.+-+-+-+ LVD
Theo mình thì mấy cái textBox gì đó của bạn AnhTuấn là mấy cái Shapes
Mà đã vậy thì nó hoàn toàn khác à nha. . . .
(Không phải các textBox trong Form đâu, phải không AnhTuấn!)
LoHoa.jpg
Chúc mừng nhân ngày 8/3​
 
Upvote 0
Vâng! Tất nhiên tôi hiểu chứ... Với số lượng Texbox càng nhiều thì code cũng các bạn mới có lợi về mặt ngắn gọn... còn như chỉ có 4, 5 cái texbox thì dùng code như vậy e hơi.. phí...
----------------------------------
Anh Sa ơi! TextBox của em chính xác là TextBox trên thanh Control Toolbox đấy!
ANH TUẤN
 
Upvote 0
Tôi thấy như thế này,
Thực sự ra một đoạn code giống như TuanVNUNI giới thiệu (cũng giống như lập trình viên khác thực hiện) nó giúp cho bạn có thể sử dụng lại.
Vì vậy việc anhtuan1066 nói "vậy e hơi phí" thì chắc cũng nên phải suy nghĩ lại.

Vbavn
 
Upvote 0
Tôi ko hiểu mấy về lập trình.. nhưng tôi cũng biết rằng: "Một lập trình viên giõi mà lại dễ nỗi nóng với yêu cầu của khách hàng thì chẳng bao giờ tiến bộ dc"
Các bạn có thể cho rằng 1 yêu cầu nào đó của khách hàng là quá vô lý, và cố gắng ép họ phải theo ý của bạn... He... he... Tôi ko nghĩ rằng đó là biện pháp hay!
Vài lời vu vơ... Tóm lại: ai quan điểm thế nào xin cứ giữ lấy nhỉ!
ANH TUẤN
 
Upvote 0
Vâng, lẽ dĩ nhiên nếu quan hệ với khách hàng thì phải làm khách hàng hài lòng ở mức độ cao nhất, không phải chỉ đạt được cái trước mắt mà còn cái lợi lớn hơn cho tương lai. Có những điều nguyên lý là không thể thì vẫn là không thể!

Nếu như nội dung hỏi của anh có nói "không dùng các điều khiển lặp For..Next, Do..Loop..." thì chắc vấn đề đã được giải quyết theo hướng khác rồi. Vấn đề của anh đã làm được, nhưng theo ý đồ của anh chắc không có cách rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi xin nói ngoài lề 1 chút:
Thông thường khi ta bị bí 1 vấn đề nào đó và đưa câu hỏi lên diển đàn.. chúng ta sẽ xem xét tất cả các giãi pháp mà các cao thủ đưa ra đễ chọn lấy 1 cái ưng ý nhất...
Với giãi pháp của TuanVNUNI thì ko ai dám nói ko hay... Nhưng tôi tin chắc 1 điều là ai cũng muốn chọn cái mình hiểu chứ ko phải cái hay nhất đâu... nghỉ lại xem!
Từ đó mà tôi lại phải tìm tòi và tiếp tục hỏi đễ xem có cái nào tôi hiểu dc ko! Code của bạn TuanVNUNI dù có chạy ngon lành nhưng trình độ tôi ko với tới thì làm sao tùy biến dc đây!
Dù sao cũng cảm ơn Tuân đã dành chút thời giờ giãi quyết vấn đề của tôi.. nhưng có lẽ tôi đành phải copy vào máy đễ dành, khi nào hiểu rõ mới mang ra xài!
(Tính tôi ko thích xài cái mình ko hiểu.. chỉ đơn giãn vậy thôi... Mong tất cả các cao thủ thông cãm và đừng trách)
Mến
ANH TUẤN
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom