Chuyên mục xử lý, gỡ rối code VBA

Liên hệ QC
Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
K/g các Anh,
Mình có 1 file excel sử dụng Record Macro để tạo chương trình, chạy thông qua nút lệnh Combobox Form Controls (Assign macro) --> Macro chạy bình thường.
Nhưng khi tạo nút lệnh Combobox ActiveX Controls (View code -> Call Macro_A) --> Chương trình báo lỗi trong câu lệnh của macro.
Mình không hiểu tại sao cùng một macro chạy bằng hai nút lệnh trên, cái thì báo lỗi, cái thì chạy bình thường.
Kính nhờ các Anh & Chủ Thớt kiểm tra và xử lý dùm mình với!! (file gửi kèm).
Cell link của Combobox Form Controls sẽ trả về chỉ số (index) của combobox còn LinkedCell của Combobox ActiveX Controls trả về giá trị của combobox. Hai đối tượng này trả về hai dạng giá trị khác nhau nên nếu bạn dùng chung 1 thủ tục (sub) thì chắc chắn kết quả sẽ khác nhau (trường hợp cụ thể của bạn là 1 cái được và 1 cái lỗi).
 
Upvote 0
K/g các Anh,
Mình có 1 file excel sử dụng Record Macro để tạo chương trình, chạy thông qua nút lệnh Combobox Form Controls (Assign macro) --> Macro chạy bình thường.
Nhưng khi tạo nút lệnh Combobox ActiveX Controls (View code -> Call Macro_A) --> Chương trình báo lỗi trong câu lệnh của macro.
Mình không hiểu tại sao cùng một macro chạy bằng hai nút lệnh trên, cái thì báo lỗi, cái thì chạy bình thường.
Kính nhờ các Anh & Chủ Thớt kiểm tra và xử lý dùm mình với!! (file gửi kèm).
Riêng máy tôi cả 2 chạy đều báo lỗi hết, Chổ Combobox1 của bạn bỏ đi chổ LinkedCell (của bạn để là K1, bây giờ xóa nó đi), vào code trong sheet bạn thêm vào dòng lệnh như sau:
Mã:
Private Sub ComboBox1_Change()
    [K1].Value = ComboBox1.ListIndex + 1
    Call crane
End Sub
 
Upvote 0
Cho em hỏi câu lệnh On Error Resume Next nếu nằm trong vùg If thì chỉ có tác dụng trong vùng có If đó đúng không ạ?

Ví dụ

msgbox "Nhan Ok de thu, neu thay error la khong ap dung ben ngoai if"
if 1 = 1 then
on error resume next
end if
a = 1/0
msgbox "co ap dung ben ngoai if"

Nhưng cái này là chuyện khác, tôi đã từng giải thích rồi
On error resume next
s = "bo qua ca if lan else "
if a=1/0 then
s = "vao if xong "
else
s = "vao else xong "
end if
msgbox s & "moi ve den day"


On error resume next
s = "bo qua if "
if a=1/0 then s = "vao if xong "
msgbox s & "moi ve den day"
 
Lần chỉnh sửa cuối:
Upvote 0
Cell link của Combobox Form Controls sẽ trả về chỉ số (index) của combobox còn LinkedCell của Combobox ActiveX Controls trả về giá trị của combobox. Hai đối tượng này trả về hai dạng giá trị khác nhau nên nếu bạn dùng chung 1 thủ tục (sub) thì chắc chắn kết quả sẽ khác nhau (trường hợp cụ thể của bạn là 1 cái được và 1 cái lỗi).
Anh Thắng ơi, giúp em chỉnh code ở #835 với. (Em có gửi Mail cho anh mà không thấy hồi âm). Rất mong sự giúp đỡ của anh ạ.
 
Upvote 0
Anh Thắng ơi, giúp em chỉnh code ở #835 với. (Em có gửi Mail cho anh mà không thấy hồi âm). Rất mong sự giúp đỡ của anh ạ.
Bạn đã yêu cầu xóa đề tài thì tôi nghĩ chắc tất cả đã xong rồi. Sao bạn còn hỏi về cái file đó nữa?
Xin Mod đi qua xóa giúp Đề tài này ạ! Xin phép dừng tại đây! Cảm ơn tất cả mọi người đã giúp đỡ trong thời gian qua.
Topic này có nhiều thông tin hữu ích. Tôi không muốn chỉ vì tôi giúp bạn mà topic này bị xóa :D
 
Upvote 0
Bạn đã yêu cầu xóa đề tài thì tôi nghĩ chắc tất cả đã xong rồi. Sao bạn còn hỏi về cái file đó nữa?

Topic này có nhiều thông tin hữu ích. Tôi không muốn chỉ vì tôi giúp bạn mà topic này bị xóa :D
Hixx.. Dạ vâng, có gì không đúng mong anh và mọi người đừng chấp và thông cảm. Cảm ơn ạ.
 
Upvote 0
GPE giúp e đoạn code này với. Trước giờ chạy bình thường tự nhiên hôm nay báo lỗi.
Mã:
Sheets("INPUT").Select
   Selection.AutoFilter Field:=4
    Call timdulieu
    Sheets("INPUT").Select
   Selection.AutoFilter Field:=3
   Selection.AutoFilter Field:=4
   Call noiluc
   Call luccat
   Call lucxoan
   Sheets("INPUT").Select
Selection.AutoFilter Field:=3
Selection.AutoFilter Field:=4
 Sheets("NOILUC").Select
   ActiveSheet.Range(Cells(1, 1), Cells(5000, 14)).Select
   Selection.Copy
   Sheets("THUYET MINH").Select
    Range("K9").Select
    ActiveSheet.Paste
End Sub
báo lỗi ở dòng: Sheets("THUYET MINH").Select ạ
 
Upvote 0
GPE giúp e đoạn code này với. Trước giờ chạy bình thường tự nhiên hôm nay báo lỗi.
Mã:
Sheets("INPUT").Select
   Selection.AutoFilter Field:=4
    Call timdulieu
    Sheets("INPUT").Select
   Selection.AutoFilter Field:=3
   Selection.AutoFilter Field:=4
   Call noiluc
   Call luccat
   Call lucxoan
   Sheets("INPUT").Select
Selection.AutoFilter Field:=3
Selection.AutoFilter Field:=4
 Sheets("NOILUC").Select
   ActiveSheet.Range(Cells(1, 1), Cells(5000, 14)).Select
   Selection.Copy
   Sheets("THUYET MINH").Select
    Range("K9").Select
    ActiveSheet.Paste
End Sub
báo lỗi ở dòng: Sheets("THUYET MINH").Select ạ
Anh thử xem lại xem sheet THUYET MINH đó có dấu cách hay không.
 
Upvote 0
GPE giúp e đoạn code này với. Trước giờ chạy bình thường tự nhiên hôm nay báo lỗi.
Mã:
Sheets("INPUT").Select
   Selection.AutoFilter Field:=4
..
End Sub
báo lỗi ở dòng: Sheets("THUYET MINH").Select ạ
Chẳng biết có đúng không nhưng rút gọn lại như dưới, nếu không nó sẽ giật giật như đèn nháy...
PHP:
    Sheets("INPUT").AutoFilter Field:=4
    Call timdulieu
    Sheets("INPUT").AutoFilter Field:=3
    Sheets("INPUT").AutoFilter Field:=4
    Call noiluc
    Call luccat
    Call lucxoan
    Sheets("INPUT").AutoFilter Field:=3
    Sheets("INPUT").AutoFilter Field:=4
    Sheets("NOILUC").Range(Cells(1, 1), Cells(5000, 14)).Copy Sheets("THUYET MINH").Range("K9").Paste
 
Upvote 0
@thangteo: ý a là dấu cách ở tên của sheets? Nếu là tên sheets thì nó có cách.
@befaint: Đúng là nó nháy như đèn thật bác ạ, mà sửa lại thì vẫn báo lỗi
 
Upvote 0
Chào các bác,
Em cần đưa ảnh ở trong cùng thư mục vào file excel theo từng dòng tương ứng với tên ảnh, trước đã hoạt động tốt nhưng nay mang ra chạy thì nó đứng yên. Các bác giúp em với. Xin cảm ơn:

Add: Các marco khác em chạy vô tư, khi chạy code dưới thì nó báo: Can't execute this code in break mode.


Mã:
Public Sub inputimages()

Dim curFile As String
Dim rHeight As Double

If ActiveSheet.Name <> "Sheet1" Then Exit Sub

If ActiveSheet.Cells(1, 1).Value = "" Then
    curFile = Dir(ActiveWorkbook.Path & "\", vbNormal)
    While curFile <> ""
        For i = 2 To 1000
            If ActiveSheet.Cells(i, 1).Value = curFile Then
                ActiveSheet.Pictures.Insert(ActiveWorkbook.Path & "\" & curFile).Select
                With Selection
                    .Left = ActiveSheet.Cells(i, 2).Left
                    .Top = ActiveSheet.Cells(i, 2).Top
                    .Height = WorksheetFunction.Min(100, .Height)
                    rHeight = .Height
                End With
                ActiveSheet.Rows(i).Select
                Selection.rowHeight = rHeight
            End If
        Next
        curFile = Dir
    Wend
End If

End Sub
Bạn dùng cái này xem có được không
httpss://www.youtube.com/watch?v=tMAR57PjCdg
 
Upvote 0
Thầy và các bạn cho em hỏi. Em có vẽ một textbox trên worksheet bằng ActiveX Control.
Em muốn khi nhấn ESC thì sẽ xóa giá trị của textbox và con trỏ chuột cũng nằm trên textbox.
Code em viết vậy thì chỉ xóa được giá trị của textbox nhưng con trỏ chuột lại không nằm trên textbox nữa.
em thử setfocus rồi nhưng cũng không được.

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
TextBox1.Value = ""
TextBox1.Activate
End If
End Sub

Xin cam on
 
Upvote 0
Thầy và các bạn cho em hỏi. Em có vẽ một textbox trên worksheet bằng ActiveX Control.
Em muốn khi nhấn ESC thì sẽ xóa giá trị của textbox và con trỏ chuột cũng nằm trên textbox.
Code em viết vậy thì chỉ xóa được giá trị của textbox nhưng con trỏ chuột lại không nằm trên textbox nữa.
em thử setfocus rồi nhưng cũng không được.

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
TextBox1.Value = ""
TextBox1.Activate
End If
End Sub

Xin cam on
Làm gì có vụ TextBox1.Activate hả bạn? Có chăng là TextBox1.SetFocus thì được
 
Upvote 0
khi nhấn ESC thì sẽ xóa giá trị của textbox và con trỏ chuột cũng nằm trên textbox.
PHP:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
    KeyCode = 0
    TextBox1.Value = ""
    TextBox1.Activate
End If
End Sub
 
Upvote 0
Mình thấy trong VBA Bác Bill có Static Sub như sau nó có tác dụng Gì ???!!!

1/ Tại sao phải khai báo Static trước sub
2/ Sử dụng Nó trong trường hợp nào là phù hợp ??!!!
3/ Nó khác với sub bình thường cái gì hay chỉ đơn giản thêm từ Static
4/ Nếu không có ích gì thì tại sao Bác Bill lại cho nó như vậy
5/ Nó khác gì với khai báo biến kiểu Static
6/ Ai biết xin mách dùm ................. Tại sao nhỉ

PHP:
Public Static Sub Abcxyz()
MsgBox "OK"
End Sub
 
Upvote 0
Mình thấy trong VBA Bác Bill có Static Sub như sau nó có tác dụng Gì ???!!!

1/ Tại sao phải khai báo Static trước sub
2/ Sử dụng Nó trong trường hợp nào là phù hợp ??!!!
3/ Nó khác với sub bình thường cái gì hay chỉ đơn giản thêm từ Static
4/ Nếu không có ích gì thì tại sao Bác Bill lại cho nó như vậy
5/ Nó khác gì với khai báo biến kiểu Static
6/ Ai biết xin mách dùm ................. Tại sao nhỉ

PHP:
Public Static Sub Abcxyz()
MsgBox "OK"
End Sub
Cái ni chắc lại réo anh VetMini lên thôi :D

http://www.giaiphapexcel.com/dienda...te-public-static-function.108740/#post-679757
 
Upvote 0
Mình thấy trong VBA Bác Bill có Static Sub như sau nó có tác dụng Gì ???!!!

1/ Tại sao phải khai báo Static trước sub
2/ Sử dụng Nó trong trường hợp nào là phù hợp ??!!!
3/ Nó khác với sub bình thường cái gì hay chỉ đơn giản thêm từ Static
4/ Nếu không có ích gì thì tại sao Bác Bill lại cho nó như vậy
5/ Nó khác gì với khai báo biến kiểu Static
6/ Ai biết xin mách dùm ................. Tại sao nhỉ

PHP:
Public Static Sub Abcxyz()
MsgBox "OK"
End Sub
Quá đơn giản, nó cho biết rằng tất cả các biến cục bộ trong sub đều là static ( được giữ lại giá trị sau các lần gọi). nếu thủ tục cần có 10 biến static, nếu gõ 10 cái static cũng lâu, thay vào đó gõ một cái là được.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom