Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Em đang có một vấn đề nhờ các anh viết code giúp em ạ em nghĩ mãi không ra.
Em có một cột G ( là cột chênh lệch) khoảng 2K dòng . Nếu không lệch thì sẽ là 0 và nếu lệch sẽ là <> 0
Bây giờ em muốn viết một buttun để khi nhấp vào sẽ go to những ô lớn hơn hoặc nhỏ hơn 0 lần lượt từ trên xuống dưới
Ví dụ Ô G10 , G100 , G500 đang khác 0, thì khi click vào button đó sẽ lần lượt nhảy tới ô G10 , click lần 2 vào button đó sẽ tớ ô G100 , click lần 3 sẽ tới Ô G500 , Lần 4 sẽ Quay lại Ô G10. Nếu không có ô nào <> 0 sẽ hiện msgbox ( cân bằng)

Em cám ơn ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi khai báo Sub thế nào để nó chỉ chạy trong file chứa nó?
 
Upvote 0
Cho em hỏi khai báo Sub thế nào để nó chỉ chạy trong file chứa nó?
Thêm phần WorkBooks vào, ví dụ:
Thay vì viết:
PHP:
Dim lr&
    lr = Sheets(1).Range("B" & Rows.Count).End(3).Row
Thì viết:

PHP:
Dim lr&
    lr = Workbooks("abcd.xlsm").Sheets(1).Range("B" & Rows.Count).End(3).Row

Trong đó abcd là WorkBook ta cần tác động.
 
Upvote 0
Thêm phần WorkBooks vào, ví dụ:
Thay vì viết:
PHP:
Dim lr&
    lr = Sheets(1).Range("B" & Rows.Count).End(3).Row
Thì viết:

PHP:
Dim lr&
    lr = Workbooks("abcd.xlsm").Sheets(1).Range("B" & Rows.Count).End(3).Row

Trong đó abcd là WorkBook ta cần tác động.
Chỉ có cách này thôi à bạn. Vì Mình xây dựng form và gửi cho nhiều người. Họ sẽ đặt tên theo quy định của mình (Ví dụ là tên bộ phận) như vậy để mà gửi cho 10 người mình phải làm 10 cái form với code khác nhau.
 
Upvote 0
Chỉ có cách này thôi à bạn. Vì Mình xây dựng form và gửi cho nhiều người. Họ sẽ đặt tên theo quy định của mình (Ví dụ là tên bộ phận) như vậy để mà gửi cho 10 người mình phải làm 10 cái form với code khác nhau.
Vậy thì đặt tên WB bằng một biến đi,
ví dụ:

Mã:
vName = ThisWorkbook.Name
lr = Workbooks(vName).Sheets(1).Range("B" & Rows.Count).End(3).Row
 
Upvote 0
Vậy thì đặt tên WB bằng một biến đi,
ví dụ:

Mã:
vName = ThisWorkbook.Name
lr = Workbooks(vName).Sheets(1).Range("B" & Rows.Count).End(3).Row
Cảm ơn bạn! Như vậy ngoài những thủ thuật này thì không cách nào khác để cho code đó chỉ có tác dụng cho file chứa nó. Ngày xưa cứ nghĩ khai báo Private là nó chỉ chạy trên file đó còn Public là toàn bộ :D
 
Upvote 0
Cảm ơn bạn! Như vậy ngoài những thủ thuật này thì không cách nào khác để cho code đó chỉ có tác dụng cho file chứa nó. Ngày xưa cứ nghĩ khai báo Private là nó chỉ chạy trên file đó còn Public là toàn bộ :D
Cách viết tắt (Không thêm Workbooks) chỉ phù hợp khi bạn làm việc trên một WB. còn nếu bạn phải thường xuyên làm việc trên nhiều WB mình vẫn khuyên nên viết đầy đủ theo thứ tự: WB-WS-Range/Cell
 
Upvote 0
Bài #1476:
. Có phải làm (khai báo) gì đâu nhỉ? Phải hỏi lại gọi Sub bằng cách nào?
.. Biết thành viên này hay hỏi lòng vòng, sao không nêu luôn cái đang làm lên cho cụ thể vấn đề.
 
Upvote 0
Cách viết tắt (Không thêm Workbooks) chỉ phù hợp khi bạn làm việc trên một WB. còn nếu bạn phải thường xuyên làm việc trên nhiều WB mình vẫn khuyên nên viết đầy đủ theo thứ tự: WB-WS-Range/Cell
Ừm, cảm ơn bạn nhé!
Bài đã được tự động gộp:

Bài #1476:
. Có phải làm (khai báo) gì đâu nhỉ? Phải hỏi lại gọi Sub bằng cách nào?
.. Biết thành viên này hay hỏi lòng vòng, sao không nêu luôn cái đang làm lên cho cụ thể vấn đề.
Cảm ơn Befaint!
 
Upvote 0
K/G các anh chị, em có 1 file exel đính kèm cần dùng VBA để thực hiện ý tưởng gán nút thêm dòng và bớt dòng sao cho:
Khi muốn thêm 1 dòng để nhập dữ liệu thì người dùng nhấp vào biểu tượng thêm dòng, excel tự động thêm một dòng và nhảy các công thức liên quan. Tưng tự khi người dùng muốn xóa 1 dòng. Em chưa biết gì về VBA mong các anh chị viết giúp ạ, e cảm ơn rất nhiều.
 

File đính kèm

Upvote 0
K/G các anh chị, em có 1 file exel đính kèm cần dùng VBA để thực hiện ý tưởng gán nút thêm dòng và bớt dòng sao cho:
Khi muốn thêm 1 dòng để nhập dữ liệu thì người dùng nhấp vào biểu tượng thêm dòng, excel tự động thêm một dòng và nhảy các công thức liên quan. Tưng tự khi người dùng muốn xóa 1 dòng. Em chưa biết gì về VBA mong các anh chị viết giúp ạ, e cảm ơn rất nhiều.
Dùng định dạng Table là được.
Chọn vùng dữ liệu, nhấn Ctrl + T, nhấn Enter. Vậy thôi.
 
Upvote 0
Em mới mò mẫm VBA có thắc mắc như sau, nhờ các anh chị chỉ giúp ạ:

Em muốn thêm một Cell chứa công thức bằng VBA

Công thức đó phải thỏa mãn:

Chứa 1 chuối text tiếng việt + một hàm tương ứng:

Ví dụ:
Tại ô A1 sẽ hiện lên hàm ="Số thứ tự là "&counta(B1:B5)

Em xin cảm ơn
 
Upvote 0
Em mới mò mẫm VBA có thắc mắc như sau, nhờ các anh chị chỉ giúp ạ:

Em muốn thêm một Cell chứa công thức bằng VBA

Công thức đó phải thỏa mãn:

Chứa 1 chuối text tiếng việt + một hàm tương ứng:

Ví dụ:
Tại ô A1 sẽ hiện lên hàm ="Số thứ tự là "&counta(B1:B5)

Em xin cảm ơn
Cái này mình Record Macro cũng sinh ra code cho bạn mà. Khi Record Macro thì những từ mình gõ tiếng việt Unicode sẽ không ghi lại được, vì vậy nó sẽ là những dấu "?". Bạn phải thay những dấu "?" này thành hàm chuyển mã phù hợp. Bạn tham khảo đoạn code dưới.
Mã:
Sub GPE()
    Range("A1").FormulaR1C1 = "=""S" & ChrW(7889) & " th" & ChrW(7913) & " t" & ChrW(7921) & " là ""&COUNTA(RC[1]:R[4]C[1])"
End Sub
 
Upvote 0
Cái này mình Record Macro cũng sinh ra code cho bạn mà. Khi Record Macro thì những từ mình gõ tiếng việt Unicode sẽ không ghi lại được, vì vậy nó sẽ là những dấu "?". Bạn phải thay những dấu "?" này thành hàm chuyển mã phù hợp. Bạn tham khảo đoạn code dưới.
Mã:
Sub GPE()
    Range("A1").FormulaR1C1 = "=""S" & ChrW(7889) & " th" & ChrW(7913) & " t" & ChrW(7921) & " là ""&COUNTA(RC[1]:R[4]C[1])"
End Sub
Em cảm ơn:
Hiện tại em đang copy code của 1 bác trong giải pháp excel.
Trong đó em gán được cho biến Text = UniVBAT("Soos thuws tuwj laf") với ý nghĩa biến Text sẽ gắn với chữ "số thứ tự là", Vậy nếu em đưa biến text này vào code thì làm thế nào ạ
 
Upvote 0
Thì đưa theo cách... bình thương đi. Có vấn đề gì chứ?
Tại vì nhiều lúc em muốn đoạn text dài và sử dụng text đó nhiều lần ạ.
Thực sự là chuyên gia trong diễn đàn GPE đã nói vậy tức là em hết cách rồi. Em cám ơn bác rất nhiều ạ
Bài đã được tự động gộp:

Thì đưa theo cách... bình thương đi. Có vấn đề gì chứ?
Em đã giải quyết được vẫn đề, tại mới tiếp xúc với VBA nên còn chưa thuận. Cám ơn bác rất nhiều em đã đọc rất nhiều hướng dẫn của bác trên diễn đàn GPE, rất hữu ích và dễ hiểu. Chúc bác luôn khỏe và tiếp tục hướng dẫn mọi người
 
Lần chỉnh sửa cuối:
Upvote 0
Các anh/chị cho em hỏi chút: lúc em copy 1 sheet tạo thành file mới hoặc trong Vba em để code : sheet1.copy thì lại báo lỗi. Cách sửa là như thế nào ạ
 
Upvote 0
Các anh/chị cho em hỏi chút: lúc em copy 1 sheet tạo thành file mới hoặc trong Vba em để code : sheet1.copy thì lại báo lỗi. Cách sửa là như thế nào ạ
Vấn đề là trong file của bạn có cái sheet nào là sheet1 hay không? Cái chổ màu đỏ là NameCode nhé.
 
Upvote 0
Vấn đề là trong file của bạn có cái sheet nào là sheet1 hay không? Cái chổ màu đỏ là NameCode nhé.
Có bạn ạ. Code vba của mình lấy đúng sheet cần copy rồi. Và mình thực hiện bằng chuột đơn thuần cũng ko copy được sheet cần copy thành file mới
 
Upvote 0
Web KT

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

Back
Top Bottom