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 anh chị cho em hỏi:

Bây giờ em có 1 file excel, 1 sheet bao gồm dữ liệu gồm danh sách các mã hàng..., bây giờ em lọc một phần dữ liệu rồi em muốn khi gửi cho 1 người thì người đấy không thể sử dụng lọc để show dữ liệu khác ra được, nhưng vẫn có thể nhập được dữ liệu ( có nghĩa là khóa chức năng lọc lại, không cho sử dụng lọc).

Có cách nào hay phải dùng code, mong các anh chị giúp đỡ!
 
Upvote 0
Các bác cho e hỏi chút ạ: E thấy m.n hay khai báo:
Dim i as Long
Dim j as Long
Dim g as Long
...
Vậy bây giờ khai báo thành Dim i,j,g as Long có ảnh hưởng gì ko ạ
 
Upvote 0
Các bác cho e hỏi chút ạ: E thấy m.n hay khai báo:
Dim i as Long
Dim j as Long
Dim g as Long
...
Vậy bây giờ khai báo thành Dim i,j,g as Long có ảnh hưởng gì ko ạ

Ví dụ khi ta chỉ khai báo là Dim a ( khai báo kiểu mập mờ ) thì VBA sẽ mặc định kiểu dữ liệu của biến a là Variant

Suy ra:

Nếu bạn khai báo như ở trên thì chỉ có g được khai báo với kiểu dữ liệu là Long thôi còn i, j mặc định sẽ là Variant
 
Upvote 0
Ví dụ khi ta chỉ khai báo là Dim a ( khai báo kiểu mập mờ ) thì VBA sẽ mặc định kiểu dữ liệu của biến a là Variant

Suy ra:

Nếu bạn khai báo như ở trên thì chỉ có g được khai báo với kiểu dữ liệu là Long thôi còn i, j mặc định sẽ là Variant
E hiểu roài ạ, thank bác --=0
 
Upvote 0
Các bác cho em hỏi chút ạ, E có yêu cầu như trong File về phương thức Find. E cảm ơn ạ
 

File đính kèm

  • Find VBA.xlsm
    17.3 KB · Đọc: 9
Upvote 0
Các bác cho em hỏi chút ạ, E có yêu cầu như trong File về phương thức Find. E cảm ơn ạ

Fương thức này không thể áp dụng để tìm 1 tháng cụ thể nào trong cột dữ liệu chứa ngày tháng kiểu DD/mm/yyyy hay MM/dd/yyyy

Hơn nữa, bạn cần lưu í 1 điều rằng khi cần tìm dữ liệu kiểu ngày tháng, ta cần định dạng toàn bộ vùng cần tìn về dạng 'MM/DD/YYYY'; Xài các dạng khác như Dd/MM/yyyy hay MM/DD/yy đều tiềm ẩn nguy cơ sai lệnh khôn lường.
 
Upvote 0
Fương thức này không thể áp dụng để tìm 1 tháng cụ thể nào trong cột dữ liệu chứa ngày tháng kiểu DD/mm/yyyy hay MM/dd/yyyy

Hơn nữa, bạn cần lưu í 1 điều rằng khi cần tìm dữ liệu kiểu ngày tháng, ta cần định dạng toàn bộ vùng cần tìn về dạng 'MM/DD/YYYY'; Xài các dạng khác như Dd/MM/yyyy hay MM/DD/yy đều tiềm ẩn nguy cơ sai lệnh khôn lường.
Vậy chỉ có giải pháp thêm 1 cột phụ bên cạnh, và dùng hàm Month của Excel thôi à a ơi :(
 
Upvote 0
Code này tạo 1 dãy 4, hoặc 5 số và chuỗi ngẫu nhiên, nhưng mình chưa hiểu cách hoạt động của nó như thế nào, xin các bác chỉ giáo
Mã:
Function GetRandName() As String
  GetRandName = Mid(CreateObject("Scripting.FileSystemObject").GetTempName, 4, 5)
End Function
 
Upvote 0
Vậy chỉ có giải pháp thêm 1 cột phụ bên cạnh, và dùng hàm Month của Excel thôi à a ơi :(

Nếu vẫn muốn xài fương thức FOND() thì chịu khó tạo vòng lặp duyệt tìm tấn tần tật các ngày trong tháng đó có trong CSDL; Như kiểu:

Set Rng = Range("B2: B999")
Rng.NumFormat="MM/DD/yyyy"
For J= 1 To 31
Dat = Format(DateSerial(Nam, Thang,J),"MM/DD/yyyy")
Set sRng=Rng.Find(Dat,,XlValues,Xlwhole)

Next J
 
Upvote 0
Code này tạo 1 dãy 4, hoặc 5 số và chuỗi ngẫu nhiên, nhưng mình chưa hiểu cách hoạt động của nó như thế nào, xin các bác chỉ giáo
Mã:
Function GetRandName() As String
  GetRandName = Mid(CreateObject("Scripting.FileSystemObject").GetTempName, 4, 5)
End Function
GetTempName dùng để tạo chuỗi ký tự để đặt tên cho file tạm.
Bạn vào tools-reference đánh dấu vào Microsoft Scripting Runtime. Copy code vào module:
Mã:
Sub a()
Set f = New FileSystemObject
Do
tmp = f.GetTempName
Loop
End Sub
Bấm F8 nhiều lần, quan sát biến tmp trong cửa sổ Local. Bạn sẽ thấy tmp có dạng rad?????.tmp, trong đó ????? là 5 ký tự ngẫu nhiên. Hàm mid(tmp,4,5) lấy ra 5 ký tự ngẫu nhiên đó.
 
Upvote 0
GetTempName dùng để tạo chuỗi ký tự để đặt tên cho file tạm.
Bạn vào tools-reference đánh dấu vào Microsoft Scripting Runtime. Copy code vào module:
Mã:
Sub a()
Set f = New FileSystemObject
Do
tmp = f.GetTempName
Loop
End Sub
Bấm F8 nhiều lần, quan sát biến tmp trong cửa sổ Local. Bạn sẽ thấy tmp có dạng rad?????.tmp, trong đó ????? là 5 ký tự ngẫu nhiên. Hàm mid(tmp,4,5) lấy ra 5 ký tự ngẫu nhiên đó.
Cám ơn bạn, giờ mình đã hiểu
 
Upvote 0
Mọi người cho em xin code thay cho lệnh này excel với ạ? Em chạy lệnh như này cho nhiều ô nên file bị nặng quá :( Mấy hôm nay chập chững đọc tài liệu VBA mà càng đọc lại càng rối trong khi việc thì đang cần gấp

=IF(ISNA(INDEX(DATA,MATCH(1,(C.I<=$A$2)*(C.O>=$A$2)*(No.Room=A4)*(Don_gia>0)*(Guest=1),0),12)),"",INDEX(DATA,MATCH(1,(C.I<=$A$2)*(C.O>=$A$2)*(No.Room=A4)*(Don_gia>0)*(Guest=1),0),12))

Các dữ liệu: DATA; C.I ; C.O; No.Room ; Don_gia; Guest là vùng Define Name.

Em cám ơn mọi người nhiều ạ!
 
Upvote 0
bạn vui lòng up file lên để có cái mà hình dung chứ bạn
 
Upvote 0
Mọi người cho hỏi:
Em có file gồm nhiều sheets có liên kết với nhau bằng các công thức, tên và code trong mỗi sheets. Code trong mỗi sheets (sheets ;2;3;4;5) được viết để thay đổi khi dữ liệu ở sheet 1 thay đổi.
Khi thay đổi dữ liệu sheets 1 mà muốn code ở sheets 2;3;4;5 chạy nó bắt em phải click vào sheets đó đã. Em muốn in đồng loạt từ sheets 1 đến sheets 5 nhưng chỉ cần thay đổi dữ liệu ở sheet1 thôi và bấm in. Làm cách nào để code tự chạy ở các sheets khác mà ko cần click chọn hiển thị sheets đó.
Xin cảm ơn!!!
 
Upvote 0
Mọi người cho hỏi:
Em có file gồm nhiều sheets có liên kết với nhau bằng các công thức, tên và code trong mỗi sheets. Code trong mỗi sheets (sheets ;2;3;4;5) được viết để thay đổi khi dữ liệu ở sheet 1 thay đổi.
Khi thay đổi dữ liệu sheets 1 mà muốn code ở sheets 2;3;4;5 chạy nó bắt em phải click vào sheets đó đã. Em muốn in đồng loạt từ sheets 1 đến sheets 5 nhưng chỉ cần thay đổi dữ liệu ở sheet1 thôi và bấm in. Làm cách nào để code tự chạy ở các sheets khác mà ko cần click chọn hiển thị sheets đó.
Xin cảm ơn!!!
Úp file bạn muốn thay đổi các sheet đó lên đây
 
Upvote 0
Ko được anh ơi... nó vẫn vậy ko khác điều gì. vui nó chạy mà buồn nó ko anh ơi.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom