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:
Các bạn giúp mình với.
Mình muốn copy sheet1 từ một workbook khác vào workbook đang mở. Nhưng trước khi copy, kiểm tra workbook đang mở xem đã có sheet1 đó chưa. Nếu đã có, chỉ copy dữ liệu đè vào thôi (không xoá sheet1 đã có). Còn nếu sheet1 đó chưa có, thì copy nguyên cả sheet1 vào.
Các bạn xem và chỉ giúp mình với. Mình cảm ơn nhiều!!!
 
Upvote 0
Các bạn giúp mình với.
Mình muốn copy sheet1 từ một workbook khác vào workbook đang mở. Nhưng trước khi copy, kiểm tra workbook đang mở xem đã có sheet1 đó chưa. Nếu đã có, chỉ copy dữ liệu đè vào thôi (không xoá sheet1 đã có). Còn nếu sheet1 đó chưa có, thì copy nguyên cả sheet1 vào.
Các bạn xem và chỉ giúp mình với. Mình cảm ơn nhiều!!!
Bạn thử nghiên cứu ADO xem. Có thể giúp bạn đó.
Hoặc nghiên cứu Macro 4 xem sao.
 
Upvote 0
Các bác giúp cháu với ạ! File cháu đính kèm rồi.
Sheet dữ liệu là dữ liệu đầu vào.
Sheet thang điểm là căn cứ để tính điểm.
Làm thế nào để tạo ra sheet kết quả từ dữ liệu căn cứ vào thang điểm chuẩn ạ.

Các bác cho cháu phương hướng giải quyết vấn đề như thế nào để tối ưu nhất ạ?
Cháu định lặp từng dòng 1 nhưng cháu thấy nó không ổn vì tốc độ có thể rất chậm và có khi phải lặp mấy lần mới được.
 

File đính kèm

  • H Vba.xls
    31.5 KB · Đọc: 8
Upvote 0
Cho em hỏi? em mở file cell lên bị báo lỗi như này làm thế nào ạ:
lỗi mở excel Error desciption: open method of workbooks class faied
- Thông báo lỗi đã nêu khá trực quan: Chi tiết lỗi là Phương thức Open của Workbooks bị lỗi, bạn xem lại Tên file bạn mở, đường dẫn trong tham số Open.
 
Upvote 0
Các bạn giúp mình với.
Mình muốn copy sheet1 từ một workbook khác vào workbook đang mở. Nhưng trước khi copy, kiểm tra workbook đang mở xem đã có sheet1 đó chưa. Nếu đã có, chỉ copy dữ liệu đè vào thôi (không xoá sheet1 đã có). Còn nếu sheet1 đó chưa có, thì copy nguyên cả sheet1 vào.
Các bạn xem và chỉ giúp mình với. Mình cảm ơn nhiều!!!
- Mình có ý này, bạn tham khảo nhé. Đầu tiên bạn kiểm tra workbook đang mở có sheet1 như bạn mong muốn hay không. Có thể dùng vòng lặp for each để duyệt qua các sheet, và kiểm tra tên của Sheet có hay không.
- Nếu Có sheet1 thì chỉ copy vùng.
- Nếu không có thì tiến hành Move sheet bên kia qua luôn hoặc Copy toàn bộ dữ liệu.
 
Upvote 0
Chào mọi người, mọi người cho mình hỏi vấn đề này với
ví dụ mình có công thức tại cell như thế này
=ROUND(SUMIFS(M$38:$M41;$I38:$I$41;">10";I38:I41;"<=18")/1000;3)*1
giờ mình muốn code điền lại vào cell thành công thức thế này thì viết code thế nào ạ
=ROUND(SUMIFS($M$38:$M$41;$I$38:$I$41;">10";$I$38:$I$41;"<=18")/1000;3)*1
tức là thêm $ vào tất cả tham chiếu để cố định vùng lại í.
 
Upvote 0
Theo em hiểu ý bạn của trên: Làm sao xác định được ô M38 (vùng bất kỳ) mà chuyển thành dạng địa chỉ cố định.

Tức là, có một cell có chứa công thức: cell.Formula trả về 1 chuỗi.

(1): "=ROUND(SUMIFS(M$38:$M41;$I38:$I$41;">10";I38:I41;"<=18")/1000;3)*1"

Giờ cần tìm trong chuỗi trên, cứ chỗ nào là range thì chuyển về dạng địa chỉ cố định:

(2): "=ROUND(SUMIFS($M$38:$M$41;$I$38:$I$41;">10";$I$38:$I$41;"<=18")/1000;3)*1"
 
Upvote 0
Theo em hiểu ý bạn của trên: Làm sao xác định được ô M38 (vùng bất kỳ) mà chuyển thành dạng địa chỉ cố định.
Bạn ấy khong phải là thành viên mới. Đã từng hỏi ở đây trên chục bài rồi. Néu muốn nói chuyện rõ ràng thì ít nhất cũng phải cho biết cái chuỗi kia lấy ở đâu ra. Ai hơi đâu mà đoán mò giùm.

Vì bạn ấy không nói chuyện rõ ràng cho nên tôi cũng trả lời tổng quát. Ý của tôi là giải thích chung cho các bạn cần biết sự khác biệt giữa tham chiếu tương đối và tuyệt đối.
 
Upvote 0
Chào mọi người, mọi người cho mình hỏi vấn đề này với
ví dụ mình có công thức tại cell như thế này
=ROUND(SUMIFS(M$38:$M41;$I38:$I$41;">10";I38:I41;"<=18")/1000;3)*1
giờ mình muốn code điền lại vào cell thành công thức thế này thì viết code thế nào ạ
=ROUND(SUMIFS($M$38:$M$41;$I$38:$I$41;">10";$I$38:$I$41;"<=18")/1000;3)*1
tức là thêm $ vào tất cả tham chiếu để cố định vùng lại í.
Tôi viết thành add-in nên mở topic mới cho mọi người dễ tìm. Bạn vào link bên dưới xem nhé.
http://www.giaiphapexcel.com/diendan/threads/add-in-thay-đổi-kiểu-tham-chiếu-trong-công-thức.129258/
 
Upvote 0
Làm thế nào để phân biệt những chỗ mà mình muốn thay đổi kiểu? Thường thường công thức sẽ được nới dài thêm, và chúng có thể gồm cả tuyệt đối lẫn tương đối.
 
Upvote 0
Đây làm một hàm để so sánh số lớn nhất trong một vùng dữ liệu (Range) nào đó.

Nó căn cứ từ ô đầu tiên của vùng [ Ran.Cells(1, 1) ] làm chuẩn để so sánh với các ô trong vùng đó.

Với câu lệnh này:

If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)

Với d đại diện cho hàng và c đại diện cho cột, khi vòng lặp chạy lần lượt đến mỗi ô trong Vùng tham chiếu, nếu gặp ô có giá trị lớn hơn giá trị ban đầu max = Ran.Cells(1, 1) thì max sẽ nhận giá trị tại ô đó rồi tiếp tục so sánh sang ô khác, còn không thì nó vẫn giữ giá trị lớn nhất.

=============================
Cái mà tôi không hiểu gì trong hàm đó là cái này:

v = Tim(max, Ran)

Chả biết nó dùng để làm gì nữa!
nhờ anh Hoàng Trọng Nghĩa giúp đỡ bài này ! Em có 1 file quản lí thông tin khách hàng và 1 form nhập liệu chưa viết code.
Muốn nhờ anh viết hộ code để khi nhập dữ liệu vào combobox khách hàng thì dữ liệu sẽ tự tham chiếu đến Sheet khách hàng. Nếu có trường hợp thỏa mãn thì sẽ hiện hết thông tin lên list box, click vào chọn 1 hàng trong list thì dữ liệu từ list box sẽ add vào các text box bên dưới theo các mục tương ứng, có thể cập nhật và thay đổi được.
 

File đính kèm

  • Book1.xlsm
    18.4 KB · Đọc: 4
Upvote 0
Theo mình, bạn còn thiếu 2 bảng;
1 bảng liệt kê danh sách hàng hóa, gồm [Mã hàng], [Tên hàng], . . . .
2 Bảng danh sách khách hàng; gồm [Mã KH], [Tên KH], [Ngày sinh], [SĐT], [Địa chỉ], [Ghi chú],. . . .
Một khi bạn có 2 bảng này thì trang dữ liệu hiện tại sẽ bỏ bớt các trường, nhất là dữ liệu đã có ở bảng 'DSKH' như [SĐT], [NgàySinh], . . .
Bạn nên có [Mã KH], nếu không có cái này, thì sau này bạn sẽ fải nuốt tiếc muôn tả.

Nghĩa là trước khi tạo Form hay gì, gì khác, ta fải bỏ nhiều thời gian để có 1 cấu trúc CSDL thiệc hoàn chỉnh cái đã; Theo mình chuyện này là xương sống của hoạt động 1 CSDL bình thường & chu chỉnh.

Vui nếu được trao đổi thêm cùng bạn.
 
Upvote 0
Theo mình, bạn còn thiếu 2 bảng;
1 bảng liệt kê danh sách hàng hóa, gồm [Mã hàng], [Tên hàng], . . . .
2 Bảng danh sách khách hàng; gồm [Mã KH], [Tên KH], [Ngày sinh], [SĐT], [Địa chỉ], [Ghi chú],. . . .
Một khi bạn có 2 bảng này thì trang dữ liệu hiện tại sẽ bỏ bớt các trường, nhất là dữ liệu đã có ở bảng 'DSKH' như [SĐT], [NgàySinh], . . .
Bạn nên có [Mã KH], nếu không có cái này, thì sau này bạn sẽ fải nuốt tiếc muôn tả.

Nghĩa là trước khi tạo Form hay gì, gì khác, ta fải bỏ nhiều thời gian để có 1 cấu trúc CSDL thiệc hoàn chỉnh cái đã; Theo mình chuyện này là xương sống của hoạt động 1 CSDL bình thường & chu chỉnh.

Vui nếu được trao đổi thêm cùng bạn.
Cảm ơn bạn đã tư vấn. Nhưng nếu mình tách dữ liệu ra làm 2 bảng như bạn nói thì khi find dữ liệu không biết listbox có hiển thị đầy đủ được các trường mình cần k nhỉ. Ví dụ mình nhập Mã hàng(MH) là N1A thì list sẽ hiển thị tất cả các KH, địa chỉ, sđt, ghi chú của những khách hàng đã đặt sản phẩm N1A mình chỉ việc cập nhật thêm thông tin nếu có thay đổi. Nếu tách ra mà vẫn cập nhật được như vậy thì tốt quá, nếu có thời gian bạn hãy chỉ giáo giúp, xin chân thành cảm ơn.
 
Upvote 0
Trong ListBox lúc đó chỉ có các trường [Mã Hàng], [Tên hàng], [Mã KH] & [Tên KH]
& bạn có thể thay 2 trong 4 loại dữ liệu này mà thôi.

Nếu bạn cần đổi/thay hay sửa dữ liệu của khách hàng như [Ngày Sinh], [SĐT], hay {Địa chỉ], không fải là vô lý lắm sao?
Trong quá trình vận hành, các dữ liệu này cũng cần thay đổi hay cập nhật; Nhưng lúc đó ta thực hiện bằng cách khác hơn (trực tiếp hay bằng Form khác chứ!)
 
Upvote 0
Trong ListBox lúc đó chỉ có các trường [Mã Hàng], [Tên hàng], [Mã KH] & [Tên KH]
& bạn có thể thay 2 trong 4 loại dữ liệu này mà thôi.

Nếu bạn cần đổi/thay hay sửa dữ liệu của khách hàng như [Ngày Sinh], [SĐT], hay {Địa chỉ], không fải là vô lý lắm sao?
Trong quá trình vận hành, các dữ liệu này cũng cần thay đổi hay cập nhật; Nhưng lúc đó ta thực hiện bằng cách khác hơn (trực tiếp hay bằng Form khác chứ!)
Bạn nói đúng quá, mình hiểu rồi. Mình đã sửa lại và sắp xếp lại CSDL, tiện đây bạn có thể giúp mình xem có code nào để khi mình nhập dữ liệu vào combobox thì listbox sẽ hiển thị tất cả các mã hàng có tên giống nhau không,
Vd: combobox nhập N1A thì listbox sẽ hiển thị toàn bộ sản phẩm N1A và các thông tin liên quan đến KH,SDT, địa chỉ, ghi chú.(chỉ cần hiển thị không chỉnh sửa ) Mục ghi chú và số lượng đặt thì mình có thể chọn 1 trong những KH nhất định để cập nhật ghi chú, số lượng, sau khi đã giao hàng được không .
 

File đính kèm

  • Book1.xlsm
    19.1 KB · Đọc: 6
Upvote 0
Bạn nói đúng quá, mình hiểu rồi. Mình đã sửa lại và sắp xếp lại CSDL, tiện đây bạn có thể giúp mình xem có code nào để khi mình nhập dữ liệu vào combobox thì listbox sẽ hiển thị tất cả các mã hàng có tên giống nhau không,
Vd: combobox nhập N1A thì listbox sẽ hiển thị toàn bộ sản phẩm N1A và các thông tin liên quan đến KH,SDT, địa chỉ, ghi chú.(chỉ cần hiển thị không chỉnh sửa ) Mục ghi chú và số lượng đặt thì mình có thể chọn 1 trong những KH nhất định để cập nhật ghi chú, số lượng, sau khi đã giao hàng được không .
Mã hàng có liên quan gì đến khách hàng không bạn?
 
Upvote 0
Bạn xem file & fản hồi; Mai ta sẽ tiếp tục sớm

Vấn đề bổ sung khách hàng (KH) ngay trên form này là không nên;
Nếu thường xuyên bổ sung hay thay đổi danh sách KH thì nên thực hiện trên 1 form khác; nếu ít hay thỉnh thoảng thì nên thay trực tiếp trên trang 'DS'
Mã hàng có liên quan gì đến khách hàng không bạn?
KH đặt hàng thông qua mã hàng mà.

(Xin các bạn xem file ở bài kế tiếp của mình, xin cảm ơn nhiều)
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nói đúng quá, mình hiểu rồi. Mình đã sửa lại và sắp xếp lại CSDL, tiện đây bạn có thể giúp mình xem có code nào để khi mình nhập dữ liệu vào combobox thì listbox sẽ hiển thị tất cả các mã hàng có tên giống nhau không,
Vd: combobox nhập N1A thì listbox sẽ hiển thị toàn bộ sản phẩm N1A và các thông tin liên quan đến KH,SDT, địa chỉ, ghi chú.(chỉ cần hiển thị không chỉnh sửa ) Mục ghi chú và số lượng đặt thì mình có thể chọn 1 trong những KH nhất định để cập nhật ghi chú, số lượng, sau khi đã giao hàng được không .
Tóm lại là mình cần nhất vẫn là hiển thị được tất cả các KH đã đặt mua trong 1 sản phẩm, khi click vào 1
Bạn xem file & fản hồi; Mai ta sẽ tiếp tục sớm

Vấn đề bổ sung khách hàng (KH) ngay trên form này là không nên;
Nếu thường xuyên bổ sung hay thay đổi danh sách KH thì nên thực hiện trên 1 form khác; nếu ít hay thỉnh thoảng thì nên thay trực tiếp trên trang 'DS'

KH đặt hàng thông qua mã hàng mà.
cảmcảm ơn hoang2013, DS mình k thể làm trên sheet đc vì mỗi ngày mình phải nhập hơn 100,150 người. Dữ liệu của mình lên tới hàng nghìn dòng nên chỉ có làm trên form thôi. Hiện mình đang đi làm, chiều về mình sẽ xem file bạn gửi
 
Upvote 0
Web KT
Back
Top Bottom