Tạo Form nhập dữ liệu cho các sheet bằng VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

luongchihien

Thành viên mới
Tham gia
26/8/11
Bài viết
7
Được thích
1
Mình tạo một file excel để lưu trữ thông tin khách hàng, vì nó nhiều cột quá nên muốn tạo một form để thuận tiện. trong file có các sheet "Form", sheet "Thong tin KH". Khi mình nhập dữ liệu vào form rồi enter thì dữ liệu sẽ được nhập vào sheet "Thong tin KH".
Xin các anh/chị em diễn đàn giúp đỡ, mình ngồi mò mẫn mãi mà không được, cứ báo lỗi hoài ah! (
file đuợc đính kèm theo, một file excel và file words chứa code mình làm )
 

File đính kèm

Down về định xem nhưng mở ra lại Excel2007 -->Bó tay vì không dùngn 2007
 
Upvote 0
Như thế này đi:

1/Nếu có thể dồn cột B và C trên Sh Form làm 1 thôi, tránh rườm rà.
2/Mình tìm mãi không ổn, tốt nhất bạn gõ từ D4-->D32 tương ứng với số hoặc ký tự cột cần nhập bên Sh Thong tin KH
Ví dụ: Ô D4 nhập vào cột B hoặc cột 2 bên Sh Thong tin KH (Bạn gõ vào ô D4 là B hoặc 2)

Tôi tin code chỉ bằng 1/10 code cuả bạn mà còn có thể cả kiểm tra dữ liệu , reset dữ liệu
 
Upvote 0
Sub ()
Sheets("Form").Select
1 = Range("d4").Value
2 = Range("d5").Value
3 = Range("d7").Value
4 = Range("d8").Value
5 = Range("d9").Value
6 = range(“d10”).Value
7 = range(“d12”).Value
8 = range(“d13”).Value
9 = range(“d14”).Value
10 = range(“d15”).Value
11 = range(“d16”).Value
12 = range(“d17”).Value
13 = range(“d18”).Value
14 = range(“d19”).Value
15 = range(“d20”).Value
16 = range(“d21”).Value
17 = range(“d22”).Value
18 = range(“d23”).Value
19 = range(“d24”).Value
20 = range(“d25”).Value
21 = range(“d26”).Value
22 = range(“d27”).Value
23 = range(“d28”).Value
24 = range(“d29”).Value
25 = range(“d30”).value
26 = range(“d31”).value
27 = range(“d32”).Value
28 = range(“d33”).Value
29 = range(“d34”).Value

Sheets("Thong Tin KH").Select
n = Range("F1").Value
Range("B1").Select
ActiveCell.Offset(n + 3, 1).Value = 1
ActiveCell.Offset(n + 3, 2).Value = 2
ActiveCell.Offset(n + 3, 3).Value = 3
ActiveCell.Offset(n+3, 4).Value = 4
ActiveCell.Offset(n+3, 5).Value = 5
ActiveCell.Offset(n+3, 6).value = 6
ActiveCell.Offset(n+3, 7).Value = 7
ActiveCell.Offset(n+3, 8).value = 8
ActiveCell.Offset(n+3, 9).value = 9
ActiveCell.Offset(n+3, 10).value = 10
ActiveCell.Offset(n+3, 11).value = 11
ActiveCell.Offset(n+3, 12).value = 12
ActiveCell.Offset(n+3, 13).value = 13
ActiveCell.Offset(n+3, 14).value = 14
ActiveCell.Offset(n+3, 15).value = 15
ActiveCell.Offset(n+3, 16).value = 16
ActiveCell.Offset(n+3, 17).value = 17
ActiveCell.Offset(n+3, 18).value = 18
ActiveCell.Offset(n+3, 19) = 19
ActiveCell.Offset(n+3, 20) = 20
ActiveCell.Offset(n+3, 21) = 21
ActiveCell.Offset(n+3, 22) = 22
ActiveCell.Offset(n+3, 23) = 23
ActiveCell.Offset(n+3, 24) = 24
ActiveCell.Offset(n+3, 25) = 25
ActiveCell.Offset(n+3, 26) = 26
ActiveCell.Offset(n+3, 27) = 27
ActiveCell.Offset(n+3, 28) = 28
ActiveCell.Offset(n+3, 29) = 29
Sheets("Form").Select
Range("D4:D32").Select
Selection.ClearContents
Range("D4").Select
End Sub

Cảm ơn ý kiến đóng góp của anh, tôi đã chỉnh sửa cho đơn giản hơn.
Nhưng ko biết sao khi tôi gán các giá trị như 1,2,3... thì khi copy vào VBA (module) thì nó báo lỗi và tô đỏ lên như vậy?
bây giờ nhờ giúp làm sao để form đó hoạt động được ko? thank you very much!
 
Upvote 0
Bạn thử code sau nha:

Mã:
Option Explicit
Sub NhapDL()
Dim i, j
j = Sheet2.[B65536].End(3).Row + 1
If j < 6 Then j = 6
'Kiem tra
For i = 4 To 32
If Sheet1.Cells(i, 4) = "" And i <> 7 Or Sheet1.Cells(i, 4) = "" And i <> 7 Then
MsgBox i
MsgBox "Thieu thong tin: - " & IIf(Sheet1.Cells(i, 4).Offset(, -1) = "", _
Sheet1.Cells(i, 4).Offset(, -2), Sheet1.Cells(i, 4).Offset(, -1))
Sheet1.Cells(i, 4).Select
Exit Sub
End If
Next
'Nhap
For i = 4 To 32
Sheet2.Cells(j, i - 2) = Sheet1.Cells(i, 4)
Next
'Don dep
Sheet1.[D4:D32].ClearContents
Sheet1.[D4].Select
End Sub

Việc chép dữ liệu: Vì các ô liên tục nên có dùng đoạn code sau:

Mã:
'.........................
Sheet1.[D4:D32].Copy
Sheet2.Cells(j,2)..PasteSpecial Paste:=xlPasteAll,Transpose:=True
'.........................

(Bạn xoá giùm dòng Msgbox i .Trước định thông báo dòng thiếu dữ liệu giờ bỏ đi)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xin chân thành cảm ơn anh rất nhiều!
Lỡ hỏi rồi thì làm phiền một tí nữa luôn nhé!
Hiện tại mình đang có 4: sheet 1 là "Form" sheet 2 là "Thong tin KH", sheet 3 là "KH CUON", và sheet 4 là "KH Ống"
khi nhập dữ liệu vào Form (tức sheet 1) nếu tại trường Ống (tức là tai ô D6) có nhập dữ liệu thì tại sheet 4 dữ liệu trường Mã KH, Tên KH, Số ĐT được tự động nhập vào
còn nếu nhập vào trường Cuộn (tức ô D7) có nhập dữ liệu thì dữ liệu được tự động thêm vào sheet 3 (sheet KH Cuộn). Và nếu có cả 2, tại ô D6 và D7 thì dữ liệu được nhập vào 2 sheet 3 và 4 luôn.
Cảm ơn Sealand!
 
Upvote 0
Bạn tham khảo tiếp nha
Mã:
Sub NhapDL()
Dim i, j, Cl As Range
j = Sheet2.[B65536].End(3).Row + 1
If j < 6 Then j = 6
'Kiem tra
For i = 4 To 32
If Sheet1.Cells(i, 4) = "" Then
If i <> 6 And i <> 7 And i <> 32 Then
MsgBox "Thieu thong tin: - " & IIf(Sheet1.Cells(i, 4).Offset(, -1) = "", _
Sheet1.Cells(i, 4).Offset(, -2), Sheet1.Cells(i, 4).Offset(, -1))
Sheet1.Cells(i, 4).Select
Exit Sub
End If
End If
Next
'Nhap Sheet thong tin KH
For i = 4 To 32
Sheet2.Cells(j, i - 2) = Sheet1.Cells(i, 4)
Next
'Nhap sheet chi tiet
Set Cl = IIf(Sheet1.[D6] = "", Sheet4.[A65536].End(3).Offset(1), _
Sheet5.[A65536].End(3).Offset(1))
Cl.Value = Sheet1.[D4]
Cl.Offset(, 1) = Sheet1.[D5]
Cl.Offset(, 2) = Sheet1.[D16]
Cl.Offset(, 3) = Sheet1.[D13]
Cl.Offset(, 4) = Sheet1.[D14]
Cl.Offset(, 5) = Sheet1.[D18]
'Don dep
Sheet1.[D4:D32].ClearContents
Sheet1.[D4].Select
End Sub
 

File đính kèm

Upvote 0
Mình đọc không kỹ câu hỏi, phải thế này mới đúng:
Mã:
Sub NhapDL()
Dim i, j, Cl As Range
j = Sheet2.[B65536].End(3).Row + 1
If j < 6 Then j = 6
'Kiem tra
For i = 4 To 32
If Sheet1.Cells(i, 4) = "" Then
If i <> 6 And i <> 7 And i <> 32 Then
MsgBox "Thieu thong tin: - " & IIf(Sheet1.Cells(i, 4).Offset(, -1) = "", _
Sheet1.Cells(i, 4).Offset(, -2), Sheet1.Cells(i, 4).Offset(, -1))
Sheet1.Cells(i, 4).Select
Exit Sub
End If
End If
Next
'Nhap Sheet thong tin KH
For i = 4 To 32
Sheet2.Cells(j, i - 2) = Sheet1.Cells(i, 4)
Next
'Nhap sheet chi tiet
If Sheet1.[D6] <> "" Then NapCT Sheet5.[A65536].End(3).Offset(1)
If Sheet1.[D6] <> "" Then NapCT Sheet4.[A65536].End(3).Offset(1)
'Don dep
Sheet1.[D4:D32].ClearContents
Sheet1.[D4].Select
End Sub
'-----------------------------------------------------------------
Sub NapCT(Cl As Range)
Cl.Value = Sheet1.[D4]
Cl.Offset(, 1) = Sheet1.[D5]
Cl.Offset(, 2) = Sheet1.[D16]
Cl.Offset(, 3) = Sheet1.[D13]
Cl.Offset(, 4) = Sheet1.[D14]
Cl.Offset(, 5) = Sheet1.[D18]
End Sub
 

File đính kèm

Upvote 0
Tuyệt vời lắm! Đúng cái mình cần rồi! Tuy nhiên trong sheet 3 (sheet "khách hàng cuộn") không hoạt động, khi nhập form có dữ liệu cả 2 ( tức có cả khách hàng cuộn và ống) nhưng chỉ có 1 sheet hoạt động còn sheet kia không hoạt động ah! Bạn xem lại giùm mình với! Cảm ơn nhiều
 
Upvote 0
Trời ! Mình soát chưa hết lỗi. Bạn sửa đoạn sau nha:

.........

If Sheet1.[D6] <> "" Then NapCT Sheet5.[A65536].End(3).Offset(1)
If Sheet1.[D6] <> "" Then NapCT Sheet4.[A65536].End(3).Offset(1)
..........

Sửa thành:
................

If Sheet1.[D6] <> "" Then NapCT Sheet5.[A65536].End(3).Offset(1)
If Sheet1.[D7] <> "" Then NapCT Sheet4.[A65536].End(3).Offset(1)
 
Upvote 0
Tuyệt vời!
Cho mình nhờ thêm một tí nữa nhé! Bây giờ sheet "Form" (sheet 1) tại trường MaKH nếu nhập MaKH đã có trong sheet "Thong Tin KH" ( có nghĩa là MaKh đã bị trùng) thì hiện lên thông báo và không cho nhập.
Giúp tí nữa nhé Sealand. Xin cảm ơn!
 
Upvote 0
Tại vùng Code của Sheet1 bạn dán vào đoạn code sau

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$4" Then
If WorksheetFunction.CountIf(Sheet2.[b6:b65536], Target) > 0 Then
MsgBox "Ma Khach hang da co. Hay nhap lai."
Target = ""
Target.Select
End If
End If
End Sub

Bạn tham khảo trong file
 

File đính kèm

Upvote 0
Giúp tạo form nhập trong excel

Mình muốn tạo một form đơn giản nhập dữ liệu vào sheet có sẵn với các cột :mã khách hàng, tên khách hàng, địa chỉ, mã số thuế; làm sao để form báo nhập trùng đối với mã khách hàng đã có trong sheet đó.Mong các bạn giúp cho.
 

File đính kèm

Upvote 0
Cho mình hỏi:
- mình cũng muốn tạo 1 form nhập liệu giống như vậy, nhưng form của mình là nhập số lượng sản phẩm kh mua, vì thế có sp k.hàng đặt, có sản phẩm thì không. Vì thế, mình muốn form không nhất thiết phải nhập đủ thông tin như form ở trên, thì mình phải làm sao ah.
Mong mọi người giúp đỡ ah. Em mới tìm hiểu về vba nên...
 
Upvote 0
chào bác sealand, em cũng mới bập bẹ học VBA nhưng mà vẫn chưa biết gì. em muốn nhờ bác xem giúp em file báo cáo đánh giá đầu tư, có các shêêt các số liệu, nhờ bác giúp em tạo form nhập dữ liệu, các dữ liệu sẽ tự động vào các Sheet. mỗi dự án sẽ vào một trang để khi in tiện lợi. mong bác hỗ trợ giúp em. file excel em gửi là làm thủ công, tự căn chỉnh
 

File đính kèm

Upvote 0
Bạn ơi cho mình hỏi chút:

Phần cột D lúc nào cũng phải nhập đủ hết các cột thông tin thì mới ĐỒNG Ý NHẬP được.

Có code nào mà có thể chèn vào giúp phần D không đủ thông tin vẫn nhập được không?

'Kiem tra
For i = 4 To 250
If Sheets("Form").Cells(i, 4) = "" Then
If i <> 6 And i <> 7 And i <> 250 Then
MsgBox "Thieu thong tin: - " & IIf(Sheets("Form").Cells(i, 4).Offset(, -1) = "", _
Sheets("Form").Cells(i, 4).Offset(, -2), Sheets("Form").Cells(i, 4).Offset(, -1))
Sheets("Form").Cells(i, 4).Select
Exit Sub
End If
End If
Next
'Nhap Sheet thong tin KH


Tại vùng Code của Sheet1 bạn dán vào đoạn code sau

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$4" Then
If WorksheetFunction.CountIf(Sheet2.[b6:b65536], Target) > 0 Then
MsgBox "Ma Khach hang da co. Hay nhap lai."
Target = ""
Target.Select
End If
End If
End Sub

Bạn tham khảo trong file
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử bỏ đi 2 dòng màu đỏ dưới đây xem sao:


Mã:
'Kiem tra
For i = 4 To 250
[COLOR=#ff0000]If Sheets("Form").Cells(i, 4) = "" Then[/COLOR]
If i <> 6 And i <> 7 And i <> 250 Then
MsgBox "Thieu thong tin: - " & IIf(Sheets("Form").Cells(i, 4).Offset(, -1) = "", _
Sheets("Form").Cells(i, 4).Offset(, -2), Sheets("Form").Cells(i, 4).Offset(, -1))
Sheets("Form").Cells(i, 4).Select
Exit Sub
End If
[COLOR=#ff0000]End If[/COLOR]
Next
'Nhap Sheet thong tin KH
 
Upvote 0
anh kiem tra.jpg

Không được bạn à.(File đính kèm đó bạn)

Bình thường phải nhập hết thông tin tại cột D tương ứng với phần màu bôi vàng ở cột B,C thì khi nhấn đồng ý nhập thì mới Click ĐỒNG Ý NHẬP được

Bây giờ chỉ m muốn nhập đến cột Ô D14 sau đó Click ĐỒNG Ý NHẬP là đã nhập rồi.

Đại ý là chỉ nhập Ô D4,5,6 là bắt buộc còn lại các ô kia nhập đủ và không đủ đều Click ĐỒNG Ý NHẬP được.

Cảm ơn bạn nhé!
 

File đính kèm

Upvote 0
Đây là code trong file của bạn:
Mã:
Sub NhapDL()
Dim i, j, Cl As Range
j = Sheet2.[B65536].End(3).Row + 1
If j < 6 Then j = 6
[COLOR=#0000ff]'Kiem tra
[SIZE=4]For i = 4 To [/SIZE][/COLOR][COLOR=#ff0000][SIZE=4]32[/SIZE][/COLOR][COLOR=#0000ff][SIZE=4][/SIZE]
If Sheet1.Cells(i, 4) = "" Then
If i <> 6 And i <> 7 And i <> 32 Then
MsgBox "Thieu thong tin: - " & IIf(Sheet1.Cells(i, 4).Offset(, -1) = "", _
Sheet1.Cells(i, 4).Offset(, -2), Sheet1.Cells(i, 4).Offset(, -1))
Sheet1.Cells(i, 4).Select
Exit Sub
End If
End If
Next[/COLOR]
'Nhap Sheet thong tin KH
For i = 4 To 32
Sheet2.Cells(j, i - 2) = Sheet1.Cells(i, 4)
Next
'Nhap sheet chi tiet
If Sheet1.[D6] <> "" Then NapCT Sheet5.[A65536].End(3).Offset(1)
If Sheet1.[D7] <> "" Then NapCT Sheet4.[A65536].End(3).Offset(1)
'Don dep
Sheet1.[D4:D32].ClearContents
Sheet1.[D4].Select
End Sub

Trong đó đoạn tô màu dùng để kiểm tra dữ liệu trước khi nhập.
Giờ bạn chỉ cần kiểm tra đến dòng 14 thôi thì bạn thay số 32 màu đỏ thành số 14 là ổn rồi.
 
Upvote 0
Web KT

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

Back
Top Bottom