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:
Chào mọi người ạ,

Em đang làm 1 file excel có thể tự nhập những thông tin vào sheet "Hàng xuất" từ sheet "Phiếu xuất hàng" khi nhấn nút "Lưu"
Nhưng khi em chạy thử thì nó bị lỗi này ạ "Compile error: Variable not defined"

Mong mọi người hướng dẫn em với ạ! Em xin cảm ơn!!

Code em làm theo hướng dẫn trên mạng ạ! EM CÓ ĐÍNH KÈM FILE MẪU VÀ HÌNH ẢNH
Dòng này của bạn bị sai nè:
Mã:
Dongcuoi = Sheet1.Cells(Rows.Count, 1).End(x1Up).Row + 1  'Dong cuoi cot A
Sửa lại thành:
Mã:
Dongcuoi = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1  'Dong cuoi cot A
 
Upvote 0
Dòng này của bạn bị sai nè:
Mã:
Dongcuoi = Sheet1.Cells(Rows.Count, 1).End(x1Up).Row + 1  'Dong cuoi cot A
Sửa lại thành:
Mã:
Dongcuoi = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1  'Dong cuoi cot A

Dạ em cảm ơn rất nhiều ạ! Mà anh cho em hỏi lại cái là sao e nhìn thì thấy nó ko khác gì cái dòng của e hết. Mà thay vào thì nó chạy được!
Với lại khi nó chạy thì thay vì nhập vô sheet "Xuất Kho" thì nó lại thêm vô đúng sheet "Phiếu xuất" và chen vô lưng chừng ạ

Đây là hình trước và sau khi chạy ạ
 

File đính kèm

  • lỗi 2.1.png
    lỗi 2.1.png
    149.2 KB · Đọc: 4
  • lỗi 2.2.png
    lỗi 2.2.png
    154.2 KB · Đọc: 5
Upvote 0
Dạ em cảm ơn rất nhiều ạ! Mà anh cho em hỏi lại cái là sao e nhìn thì thấy nó ko khác gì cái dòng của e hết. Mà thay vào thì nó chạy được!
Với lại khi nó chạy thì thay vì nhập vô sheet "Xuất Kho" thì nó lại thêm vô đúng sheet "Phiếu xuất" và chen vô lưng chừng ạ

Đây là hình trước và sau khi chạy ạ
Quên mất là phải nói với bạn. Sai ở cái chỗ xlup chứ không phải x1up.
Bạn nói rõ hơn 1 xíu được không. Tại thấy có sheets nào tên "Xuất Kho" và Phiếu xuất đâu
 
Lần chỉnh sửa cuối:
Upvote 0
Quên mất là phải nói với bạn. Sai ở cái chỗ xlup chứ không phải x1up.
Bạn nói rõ hơn 1 xíu được không. Tại thấy có sheets nào tên "Xuất Kho" và Phiếu xuất đâu
Hic, xin lỗi bác! Em quên mất là em đặt tên sheet viết tắt
Nó là Sheet "QLXK" (quản lý xuất kho) với Sheet "PXK" (phiếu xuất kho) đó bác
 

File đính kèm

  • lỗi 2.2.png
    lỗi 2.2.png
    154.9 KB · Đọc: 3
Upvote 0
Xin chào các bạn,
Nhờ các bạn giúp đỡ OT trường hợp sau với ạ:

Trong cửa sổ Name của Excel OT đặt 1 name có tên MyName và gán công thức:
Mã:
MyName ="(s.FDATE >= N'"&TEXT(PRODUCTION!$B$2,"yyymmdd")&"1') and (s.FDATE <= N'"&TEXT(PRODUCTION!$B$3,"yyymmdd")&"1')"& IF(PRODUCTION!$F$3<>""," and (s.BUMO Like N'%"&PRODUCTION!$F$3&"%')","")&IF(PRODUCTION!$D$3<>""," and (s.LOTNAME Like N'%" &PRODUCTION!$D$3& "%')","")& IF(PRODUCTION!$D$2<>""," and (s.CODE Like N'%"&PRODUCTION!$D$2& "%')","")&IF(PRODUCTION!$F$2<>""," and (s.PORDER Like N'%"&PRODUCTION!$F$2&"%')","")

Khi nhập
=MyName xuống bảng tính sẽ được giá trị (kết quả)

Nhưng trong Vba OT viết:
ThisWorkbook.Names("MyName")
Thì code không ra giá trị như nhập xuống bảng tính mà ra công thức OT đã gán vào Name

Vậy phải viết như thế nào trong vba để OT có thể lấy được kết quả giống như nhập =MyName trên bảng tính.
 
Upvote 0
Upvote 0
Vậy phải xem giá trị của bạn trả về là gì? dùng msgbox thì convert giá trị về string trước.

Dạ giá trị trả về kiểu String ạ,OT cũng đã khai báo một biến txt as string, sau đó gán
txt = Application.Evaluate(ThisWorkbook.Names("MyName").Value)
MsgBox txt
Nhưng vẫn báo lỗi Type mismatch ạ.
 
Upvote 0
Muốn thử thì dùng Debug.Print chứ đừng dùng MsgBox
Sub Thu()
Dim GiaTri
GiaTri = Application.Evaluate(ThisWorkbook.Names("MyName").Value)
Debug.Print GiaTri
End Sub

Chạy code xem thử trong cửa sổ Immediate nó nói gì
 
Upvote 0
Muốn thử thì dùng Debug.Print chứ đừng dùng MsgBox
Sub Thu()
Dim GiaTri
GiaTri = Application.Evaluate(ThisWorkbook.Names("MyName").Value)
Debug.Print GiaTri
End Sub

Chạy code xem thử trong cửa sổ Immediate nó nói gì
Cảm ơn bạn đã quan tâm ạ, code lỗi ngay tại dòng gán này rồi ạ:
GiaTri = Application.Evaluate(ThisWorkbook.Names("MyName").Value)
 
Upvote 0
Debug thì phải thử từ trong ra ngoài chứ.
nếu lỗi ở:
vw = cái gì đó & cái gì đó thứ 2
abc = def( xyz( vw ) )
thì đầu tiên hết phải debug vw, nếu thoả mãn thì tiếp theo là xyz( vw )...
 
Upvote 0
Thử xem:

Debug.print Join(Application.Evaluate(ThisWorkbook.Names("MyName").Value) ) ' Áp dụng khi kết quả trả về dạng array

Hoặc, add watch :

1577507255102.png
 
Lần chỉnh sửa cuối:
Upvote 0
Debug thì phải thử từ trong ra ngoài chứ.
nếu lỗi ở:
vw = cái gì đó & cái gì đó thứ 2
abc = def( xyz( vw ) )
thì đầu tiên hết phải debug vw, nếu thoả mãn thì tiếp theo là xyz( vw )...

Cảm ơn Bác đã quan tâm và chỉ dẫn cho con.

Thử xem:

Debug.print Join(Application.Evaluate(ThisWorkbook.Names("MyName").Value) ) ' Áp dụng khi kết quả trả về dạng array
Dạ code vẫn bị lỗi như cũ Bạn ạ

Name này chỉ trả về một giá trị, ví dụ:
(s.FDATE >= N'201912211') and (s.FDATE <= N'201912241') and (s.BUMO Like N'%BUR-%')

OT làm thử như sau:
Dim txt as string
Range("A1").Value = "=MyName"
txt = Range("A1").Value
Debug.Print txt

Giá trị trả về đúng ý OT ạ:
(s.FDATE >= N'201912211') and (s.FDATE <= N'201912241') and (s.BUMO Like N'%BUR-%')
 
Upvote 0
Dạ giá trị trả về kiểu String ạ,OT cũng đã khai báo một biến txt as string, sau đó gán
txt = Application.Evaluate(ThisWorkbook.Names("MyName").Value)
MsgBox txt
Nhưng vẫn báo lỗi Type mismatch ạ.
Name trong Excel sử dụng Macro4.0 lỗi thời:
Application.ExecuteExcel4Macro(ThisWorkbook.Names("MyName").Value)
 
Upvote 0
Cảm ơn HeSanbi, OT viết:
txt = Application.ExecuteExcel4Macro(ThisWorkbook.Names("MyName").Value)
Debug.Print txt
Code thông báo lỗi tại txt=...
1. ExecuteExcel4Macro chưa được kích hoạt
2. Phương thức Macro4.0 chưa chắc đã gọi được trong VBA.
3. Vì sao không chuyển Name kia thành hẳn VBA?

s.FDate OT hiểu nó như thế nào?

Vì sao phải dùng đến phương thức Execute
 
Upvote 0
1. ExecuteExcel4Macro chưa được kích hoạt
2. Phương thức Macro4.0 chưa chắc đã gọi được trong VBA.
3. Vì sao không chuyển Name kia thành hẳn VBA?

s.FDate OT hiểu nó như thế nào?

Vì sao phải dùng đến phương thức Execute

Dạ "s.FDate" s được gán cho một Bảng trong môi trường SQL còn FDATE là trường của bảng đó ạ.
chuyển Name kia thành hẳn VBA thì viết sao vậy HeSanbi, nhờ bạn giúp đỡ ạ.
 
Upvote 0
Web KT
Back
Top Bottom