Xuất dữ liệu hàng loạt từ textbox

Liên hệ QC

kirakira1603

Thành viên mới
Tham gia
3/5/09
Bài viết
29
Được thích
2
Chào các anh chị!
Em có một sheet cần nhập dữ liệu, dữ liệu được lấy trực tiếp từ các textbox xuống.
Nhưng vấn đề là em không mò ra cách truyền dữ liệu nào nhanh hơn ngoài cách viết lệnh thủ công cho từng textbox.
Anh chị có cách nào nhanh hơn có thể chỉ giúp em được không ạ?
Hoặc chỉ cho em nên sử dụng câu lệnh nào cho việc này cũng được.
Em có đính kèm file.
Cảm ơn các anh chị!__--__
 

File đính kèm

Dùng cái này. Nhớ thứ tự của các textbox từ trên xuống là 1,2,3...

PHP:
Private Sub OK_Click()
    Dim i As Integer
    For i = 1 To 19
        Sheet1.Cells(i, 8) = TextBox & i
    Next
End Sub
 
Upvote 0
Cám ơn anhphuong, để em làm thử. May quá, em đang rất cần. ^^
 
Upvote 0
Có lỗi

AnhPhuong ơi, em đã test thử nhưng báo lỗi chưa được định nghĩa tại chữ textbox ạ. Em phải sửa như thế nào?
 
Upvote 0
Thứ tự từ trên xuống là TextBox1,TextBox2,TextBox3....
Nhấn chuột phải vào từng textbox rồi chọn properties Nhìn bên trái, sửa lại cho đúng thứ tự
 
Upvote 0
Em làm đúng như vậy luôn, nhưng vẫn xuất hiện báo lỗi "variable not defined", dòng báo lỗi tại chữ textbox. Em đã đưa đúng thứ tự các textbox rồi.
 
Upvote 0
Dùng cái này. Nhớ thứ tự của các textbox từ trên xuống là 1,2,3...

PHP:
Private Sub OK_Click()
    Dim i As Integer
    For i = 1 To 19
        Sheet1.Cells(i, 8) = TextBox & i
    Next
End Sub
Vụ này hình như không xong à nha!
Tôi nghĩ phải vầy:
PHP:
Private Sub CommandButton1_Click()
  Dim TB, i As Long
  For Each TB In UserForm1.Controls
    If UCase(TypeName(TB)) = "TEXTBOX" Then
      i = i + 1
      Cells(i, "H") = TB.Text
    End If
  Next TB
End Sub
Đại khái thế chứ sao có vụ nối chuổi TextBox & i được nhỉ
 
Upvote 0
Vụ này hình như không xong à nha!
Tôi nghĩ phải vầy:
PHP:
Private Sub CommandButton1_Click()
  Dim TB, i As Long
  For Each TB In UserForm1.Controls
    If UCase(TypeName(TB)) = "TEXTBOX" Then
      i = i + 1
      Cells(i, "H") = TB.Text
    End If
  Next TB
End Sub
Đại khái thế chứ sao có vụ nối chuổi TextBox & i được nhỉ

Sorry!!!!!!!
Quá vội nên.....Sai....
Mod xoá giùm nhé
 
Upvote 0
Đa tạ anh ndu nhìu nhìu.
Em đã test thử rồi. OK lắm!
Nhưng em còn một vấn đề muốn hỏi anh nữa, mong anh giúp đỡ:
Trong lúc tạo, các textbox này không theo đúng thứ tự, nên em phải đổi tên các textbox này lại.
Nhưng đổi tên, chương trình cũng không chấp nhận. buộc em phải tạo lại textbox theo đúng thứ tự khởi tạo.
Có cách nào khắc phục điều này không ạ?
Nếu em đã lập nhiều form nhập liệu như thế này, việc chỉnh sửa là không tránh khỏi. Bây giờ ngồi dò lại thứ tự thì hơi đuối.
^^
 
Upvote 0
Đa tạ anh ndu nhìu nhìu.
Em đã test thử rồi. OK lắm!
Nhưng em còn một vấn đề muốn hỏi anh nữa, mong anh giúp đỡ:
Trong lúc tạo, các textbox này không theo đúng thứ tự, nên em phải đổi tên các textbox này lại.
Nhưng đổi tên, chương trình cũng không chấp nhận. buộc em phải tạo lại textbox theo đúng thứ tự khởi tạo.

Có cách nào khắc phục điều này không ạ?
Nếu em đã lập nhiều form nhập liệu như thế này, việc chỉnh sửa là không tránh khỏi. Bây giờ ngồi dò lại thứ tự thì hơi đuối.
^^
Tôi cũng thấy vậy!
Tạm thời tôi làm như sau:
- Xóa hết các TextBox
- Vẽ lại theo thứ tự từ trên xuống (chắc ăn TextBox đầu sẽ mang STT là 1... rồi tiếp theo tuần tự)
Bảo đãm chạy chính xác!
Còn lổi "chạy loạn" như bạn vừa nói, tạm thời tôi chưa nghĩ ra cách khắc phục
 
Upvote 0
Hi! Tại em lười nên em hỏi cách khắc phục thôi. Chứ thực ra em thấy việc phải tạo theo thứ tự là đúng thôi.
Do cách học VBA của em chưa được hệ thống, nên mới vậy.
Lần nữa cảm ơn 2 tiền bối nhiều nhiều!
 
Upvote 0
Mình tham gia 1 chút, các TextBox sửa lại Name cho đúng thứ tự từ TextBox1 đến TextBox9
Sau đó, nhập mã nút OK như sau:

Mã:
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 9
Sheet1.Cells(i, 8) = Me.Controls.Item("TextBox" & i)
Next
End Sub
Mình đã test OK. Không cần xóa, đặt lần lượt là Te1-Te9 cũng đwợc mà.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cách của anh sealand cũng OK, lại xúc tích hơn nữa.
Nhưng phải là "TextBox" mới chạy.
^^
Cảm ơn anh!
 
Upvote 0
HI! Vậy là bệnh lười của em lại có cơ hội phát triển.
Cảm ơn anh đã tối ưu lệnh!
Cho em hỏi, em có thể xem lệnh anh viết trong file vừa gửi ở đâu ạ.
Em không rành về cách này lắm.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chọn nút lênh--> Nhấn chuột phải-->Chọn view code
Không phải chỉ TextBox đâu nhé, mình test cả Cômb cũng OK mà
 
Upvote 0
Trong VBA không hỗ trợ mảng control nên việc truy xuất tổng quát cần phải làm như các bài đã nói ở trên thông quan thuộc tính Name hoặc có thể dựa vào thuộc tính Tag, TabIndex để thực hiện.
Nếu như việc đặt lại tên các control của bạn làm mất nhiều thời gian thì bạn có thể set lại Tag, còn nếu như thế vẫn mất thời gian thì đành chịu.
Với trường hợp set lại Tag thì như sau:
PHP:
Private Sub CommandButton1_Click()
  For Each TB In me.Controls
    If Typeof TB is MSForms.TextBox Then
      Cells(TB.Tag, "H") = TB.Text
    End If
  Next TB
End Sub
Còn nếu đổi lại tên thì như sau:
PHP:
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 9
Cells(i, 8) = Me.Controls("TextBox" & i).Text
Next
End Sub
 
Upvote 0
Vẫn còn 1 cách sử lý. Đây là dạng form các điều khiển gắn chặt với 1 ô cố định. Vậy sao ta không khai luôn trong properties của từng điều khiển cái ô nó gắn với.
Ví dụ TextBox1 ta điền vào ControlSoucer=H1...
Như vậy khỏi cần code gì cả
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đúng là một vấn đề tuy nhỏ nhưng lại rất thú vị. Cảm ơn sealand về sự lưu tâm này. Cách của anh thật đơn giản đến không ngờ. Nhưng bù lại, nó trở về với phương pháp thủ công rồi. Với 1 chương trình cần ít số liệu đầu vào chắc chắn em sẽ dùng đến cách của anh! ^_^
 
Upvote 0
Không phải là thủ công mà đây là công việc thiết kế. Nếu chỉ đơn thuần file này mình có thể so sánh như sau:
1/ Đặt tên hay xếp thứ tự<--->Điền contrlsoucer
2/Viết code nhập <---> Không

Tóm lại mình chỉ muốn tham gia với bạn các giải pháp còn sử dụng do bạn lựa chọn.
 
Upvote 0
Web KT

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

Back
Top Bottom