Hỏi đáp VBA trong chủ đề "Chập chững đến VBA" (2 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
Em xem đề tài và học hỏi được một tí, với yêu cầu như vậy! Trong file excel có sheet "Form" và sheet "Thong Tin KH" bây giờ em muốn nhập vào form (từ ô D4: D32, như trong file) rồi enter thì dữ liệu được nhập vào sheet "Thong Tin KH". Mong mọi người giúp đỡ
Em mò mẫn mãi mà ko ra ( em làm được cái gì là đính kèm hết trong file đó. gồm file excel và word chứa code)
Cảm ơn trước, cho những ai giúp đỡ!
 

File đính kèm

Em không hiểu câu lệnh: "On Error Resume Next" và câu "sArray = .Value" ý nghĩa là sao vậy anh.Cảm ơn anh rất nhiều.
 
Upvote 0
Em không hiểu câu lệnh: "On Error Resume Next" và câu "sArray = .Value" ý nghĩa là sao vậy anh.Cảm ơn anh rất nhiều.
Câu lệnh On Error Resume Next nghĩa là "gặp lỗi thì bỏ qua để thực hiện lệnh kế tiếp". Còn câu lệnh sArray = .Value được nằm trong câu lệnh With Range("A1:C10000") nên có thể hiểu là "gán giá trị của vùng A1:C10000 vào cho mảng sArray"
 
Upvote 0
Thật sự gặp người giỏi thì tôn làm sư phụ cũng chẳng nhục tí nào....người khôn là người biết đưa cái dốt ra để sao này đỡ dốt hơn....ihihihihi
Cảm ơn anh Nghĩa Phúc đóng góp ý kiến dùm em....
 
Upvote 0
If sArray(lR, 1) <> "" Then
tmpVal
= CDbl(sArray(lR, 1))
là ý nghĩa gì Anh giải thích dùm em nhé, thanks
 
Upvote 0
If sArray(lR, 1) <> "" Then
tmpVal
= CDbl(sArray(lR, 1))
là ý nghĩa gì Anh giải thích dùm em nhé, thanks
Tức là nếu phần tử (lR, 1) của mảng sArray khác rỗng thì biến tmpVal = giá trị của phần tử thứ (lR, 1) có trong mảng. Hàm CDbl dùng để chuyển đổi giá trị đó sang kiểu double.
 
Upvote 0
Nếu giá trị tmpval là biến tại sao dòng gần cuối
anh Duyệt lại viết
sarry(lr,2)=tmp
là bò mất Val vậy anh,vậy tmp là lệnh gì vậy
thanks anh nhiều...
 
Upvote 0
Nếu giá trị tmpval là biến tại sao dòng gần cuối
anh Duyệt lại viết
sarry(lr,2)=tmp
là bò mất Val vậy anh,vậy tmp là lệnh gì vậy
thanks anh nhiều...
tmp cũng là biến double luôn bạn. Bạn để ý kĩ trên Dim có khai báo tmp as double mà. Bạn để ý chỗ này
PHP:
         If tmpVal < sArray(lR, 3) Then
            Do Until tmpVal * n > sArray(lR, 3)
              tmp = tmpVal * n
              n = n + 0.1
            Loop
            sArray(lR, 2) = tmp
          Else
            sArray(lR, 2) = tmpVal
          End If
Nếu điều kiện thỏa thì gán phần tử thứ (lR,2) của mảng là tmp, còn ngược lại thì gán tmpVal. Hai biến này là khác nhau chứ không phải lệnh gì đâu bạn.
 
Upvote 0
Nếu giá trị tmpval là biến tại sao dòng gần cuối
anh Duyệt lại viết
sarry(lr,2)=tmp
là bò mất Val vậy anh,vậy tmp là lệnh gì vậy
thanks anh nhiều...
Qua vài câu hỏi thì có vẽ như bạn chưa biết tí gì về VBA cả... vậy sao mà viết code được đây?
Thôi thì học từ cơ bản đi bạn à? Tắt ngang thế không ổn đâu!
----------------
Ủa mà sao bạn lại nghĩ tôi là TẢ QUÂN vậy trời? +-+-+-+
 
Upvote 0
Dạ em cũng muốn học từ cơ bản đi lên, mà không biết học ngôn ngữ gì vì lập trình quá nhiều ngôn ngữ,mong thầy Duyệt và các anh diễn đàn chỉ dùm con đường chánh đạo học từ cơ bản cái vba này với, phải bắt đầu học ngôn ngữ gì và học ở đâu để được cái cơ bản môn này.Thanks các vị tiền bối sư huynh nhiều....

Sao thầy Duyệt không mở lại lớp VbA để dạy cho đàn em học cho mở rộng kiến thức,hình như năm 2006 thầy có mở lớp mà giờ sao không mở nữa....Nếu có mở chỗ khác thầy thông báo để các thành viên diễn đàn có điều kiện học tốt hơn ....
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Sao thầy Duyệt không mở lại lớp VbA để dạy cho đàn em học cho mở rộng kiến thức,hình như năm 2006 thầy có mở lớp mà giờ sao không mở nữa....Nếu có mở chỗ khác thầy thông báo để các thành viên diễn đàn có điều kiện học tốt hơn ....
Spam một tí: Hỏi lại cho rõ nhé, bạn đang nói đến thầy Duyệt là ai vậy? Nãy giờ đâu thấy thầy Duyệt nào lên tiếng ở đây đâu nhỉ?
 
Upvote 0
Hỏi cho rõ nha, bạn đang nói đến thầy Duyệt là ai vậy? Nãy giờ đâu thấy thầy Duyệt nào lên tiếng ở đây đâu nhỉ?

/-)ó là Tả quân Lê Văn Duyệt nhà ta, như NDU đã nêu trên.

Trước đây Tả quân Ta có lên lớp 5 bài về VBA; số bài giảng này vẫn còn bút tích tại WEBKETOAN.COM hay sao í!

Dạo này Hội trưởng nhà ta Fiêu lưu đâu rồi không biết nữa?
 
Upvote 0
Tả Quân Ta thì em không hiểu thầy lấy bút tích do đâu chứ tên Lê Văn Duyệt thì trang web kế toán nào em cũng thấy....
Mấy bài thầy Duyệt dạy từ năm 2006...tại số 10 -Bàu Cát mà sao đến giờ không thấy mở nữa....Thầy Duyệt cho ý kiến để mọi người biết nhé....
 
Upvote 0
Thật sự gặp người giỏi thì tôn làm sư phụ cũng chẳng nhục tí nào....người khôn là người biết đưa cái dốt ra để sao này đỡ dốt hơn....ihihihihi
Cảm ơn anh Nghĩa Phúc đóng góp ý kiến dùm em....

ah ha, tôi thích cậu em này, "thà vát nặng 1 cây bút, còn hơn vác nặng thanh sắc" . Năm xưa tôi học lóm nhờ ăn nằm ăn vạ trong Microsoft Forum và Ozgrid forum nên võ vẽ 1 xí . Chỉ học chơi thôi, thay vì chơi games, ta chơi Excel .
 
Upvote 0
Em thử sửa lại cho đơn giản hóa code đi mà thấy nó cũng chạy được.... em không hiểu khi nào cần dim và khi nào không cần dim biến,su phụ ndu9608163 và anh em giải thích dùm em nhé...
Thanks so much

em gửi lên lại bài em tự sửa....
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em thử sửa lại cho đơn giản hóa code đi mà thấy nó cũng chạy được.... em không hiểu khi nào cần dim và khi nào không cần dim biến,su phụ ndu9608163 và anh em giải thích dùm em nhé...
Thanks so much
Bạn muốn Dim cũng được mà không Dim cũng được, đó gọi là khai báo biến, nếu bạn khai báo biến, bạn có thể khai báo được các kiểu cho phù hợp và cũng đỡ tốn tài nguyên, còn không khai báo thì mọi chuyện sẽ được quy thành Variant.
Hơn nữa, khi khai báo biến, bạn có thể sử dụng kiểu khai báo cục bộ hay toàn cục, điều mà không khai báo thì không thể làm được.
Xa hơn nữa, khi bạn sử dụng khai báo biến kết hợp với Option Explicit sẽ giúp bạn tránh được các rắc rối đến từ việc gõ sai tên biến.
 
Upvote 0
Sub Test1() 'thu sua code module1 lai cho don gian'
Dim an As Double 'an xuat hien nhieu lan trong code nen khai bao dim cho no'
With Range("A1:C100")
sArray = .Value
For lR = 1 To UBound(sArray, 1) 'cho lR la so thu tu trong mang Sarray bat dau tu dong thu nhat'
n = 1 ' den gia tri cuoi cung cot dau tien cua mang A1:C100 - " to ubound(sarray,1)'
If sArray(lR, 1) <> "" Then ' neu gia tri dong nao cua cot dau tien ko chua gia tri - rong'
an = sArray(lR, 1) 'gan an bang gia tri trong cot A khi bien lR chay tu 1 den 100 cho nhung cho do'
If an < sArray(lR, 3) Then 'neu gia tri gan cot dau tien nho hon gia tri cot thu 3 cua mang-cot C'
Do Until an * n > sArray(lR, 3) 'cau truc lap vong "do until <dieukien> ....loop, lam den khi nao tmp>gtri cot 3-cot C'
'neu xoa dong "Do Until Val * n > sArray(lR, 3)" và dòng "Loop" di'
n = n + 0.1 'thi cau truc se ko lap vong, ket qua gia tri cot 2 = gia tri cot 1'
tmp = an * n ' tai moi dong bat dau n=1, no se lay gia tri n* gia tri cot dau tien og mang(an)'
Loop ' sao cho gtri nhan lon hon gia tri cot thu 3 cua mang (sarray(lR,3)'
sArray(lR, 2) = tmp ' neu ko thi n se tang dan len 0.1 de gia tri nay lon hon gtri cot thu ba cua mang'
' loop - la lap lai cach tinh cho moi dong den dong cuoi cung cua mang '
End If ' xong xuat gia tri ket qua nhan nay cho cot thu 2 cua mang '
End If ' chu y co bao nhieu "if" thi phai co bay nhieu "end if"

Next
.Value = sArray 'with...em with la de khai bao pham vi mang tinh toan'
End With
End Sub
em ko hiểu sao trong code này..các biến khác thì không cần khai báo, nhưng biến an ko khai báo thì chương trình bị lỗi,
có phải là do số lần xuất hiện của biến "an' nhiều lần trong code không anh,
giải thích dùm e m nhé....Thanks Anh nhiều

Sorry,lâu quá không gặp sư phụ, nhờ sư phụ chỉ giúp em bài trên nhé...
Thanks sư phụ nhiều....
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Nhờ sư phụ chỉ giúp em bài trên nhé...
Thanks sư phụ nhiều...
Code của bạn thế này:
PHP:
Dim tang(100)
Dim B As Integer, trung As Boolean, A As Integer
B = 0
For Each clls In vung
trung = True
For A = 0 To 100
If tang(A) = clls Then
trung = False
Exit For
End If
Next A

If trung = True Then
tang(B) = B + 1
End If
Next clls
demtang = B
Chẳng có TÊN HÀM hay TÊN SUB gì cả, lấy đâu mà chạy
Hơn nữa, đọc code tôi cũng chẳng hiểu bạn muốn gì
Hay là bạn mô tả ý định của bạn, tôi sẽ viết theo
 
Upvote 0
Ý em là dùng biến boolean để tìm giá trị có giá trị giống nhau trong mảng trong từng ô clls
Mặc định ban đầu mảng = 0
Nếu giá trị trong mảng có thì đếm lên ( true của biến boolean)
Nếu giá trị lần lượt sau trùng với giá trị có rồi thì thoát khỏi vòng lặp không đếm cộng thêm
Ngược lại hàm nó sẽ cộng dồn lên dần và cho ra số lượng tầng ( không trùng lặp lại)
Giống như tìm dữ liệu không trùng lặp ma 2 dùng biến true, false của Boolean để tìm
Diễn giải như vậy, sư phụ giúp dùm em
Thanks sư phụ nhiều

function demtang(vung as range) as integer
Dim tang(100)
Dim B As Integer, trung As Boolean, A As Integer
B
= 0
For Each clls In vung
trung
= True
For A = 0 To 100
If tang(A) = clls Then
trung
= False
Exit For
End If
Next A

If trung = True Then
tang
(B) = B + 1
End
If
Next clls
demtang
= B
 
Upvote 0
Ý em là dùng biến boolean để tìm giá trị có giá trị giống nhau trong mảng trong từng ô clls
Mặc định ban đầu mảng = 0
Nếu giá trị trong mảng có thì đếm lên ( true của biến boolean)
Nếu giá trị lần lượt sau trùng với giá trị có rồi thì thoát khỏi vòng lặp không đếm cộng thêm
Ngược lại hàm nó sẽ cộng dồn lên dần và cho ra số lượng tầng ( không trùng lặp lại)
Giống như tìm dữ liệu không trùng lặp ma 2 dùng biến true, false của Boolean để tìm
Diễn giải như vậy, sư phụ giúp dùm em
Thanks sư phụ nhiều
Tốt nhất bạn đừng nói cái gì liên quan đên code cả (vì có nói tôi cũng không hiểu)
Giờ với dữ liệu bạn đang có, bạn chỉ cần nói muốn làm gì? Thế thôi là đủ
 
Upvote 0
Dạ em muốn tìm dữ liệu không trùng lập trong 1 cột.......
1.đếm số
2. show ra giá trị không trùng lặp

Thanks sư phụ....
 
Upvote 0
Web KT

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

Back
Top Bottom