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
Sao cột Nữ bạn lại muốn lấy dữ liệu của cột HTCTTH?
Nếu vẫn muốn thế thì bạn đem dòng đó dưới vòng lặp For J ...
Sửa mấy cái sArr(K, ..) thành sArr(I, ...)
Cảm ơn Thầy đã giúp.
Em làm thế vì yêu cầu trong file thống kê lấy dữ liệu ở 2 cột nếu cột này dữ liệu trống thì sẽ lấy dữ liệu tại cột khác.
 
Upvote 0
Em chào các anh.
Em sưu tầm được cái này để làm nút tắt di chuyển qua lại 2 sheet.
Nhưng khi em dán vào Personal VBA thì nó báo lỗi dòng
Application.OnKey “%`”, “ToggleBack”
Các anh có thể giúp em không ạ. Em cám ơn
Mã:
Dim TabTracker As New TabBack_Class
Sub TabBack_Run()
'PURPOSE: Initiate Tab tracking and shortcut key trigger
‘SOURCE: www.TheSpreadsheetGuru.com
'Enable TabTracker class
Set TabTracker.AppEvent = Application
'Call ToggleBack macro when user keys alt + `
Application.OnKey “%`”, “ToggleBack”
End Sub
Sub ToggleBack()
'PURPOSE: Go Back to Previous Worksheet
‘SOURCE: www.TheSpreadsheetGuru.com
With TabTracker
On Error Resume Next
Workbooks(.WorkbookReference).Worksheets(.SheetReference).Activate
On Error GoTo 0
End With
End Sub
 
Upvote 0
Em chào các anh.
Em sưu tầm được cái này để làm nút tắt di chuyển qua lại 2 sheet.
Nhưng khi em dán vào Personal VBA thì nó báo lỗi dòng
Application.OnKey “%`”, “ToggleBack”
Các anh có thể giúp em không ạ. Em cám ơn
[CODE_1]Dim TabTracker As New TabBack_Class
Sub TabBack_Run()
...
End Sub
[/CODE_1]
Lúc thấy "nó báo lỗi dòng" thì chịu khó lấy giấy bút ra chép lại rằng "nó" báo lỗi gì (hoặc clip lại cũng được)?
Ai biết cái TabBack_Class của bạn ra sao mà đoán được gì thêm?
 
Upvote 0
Application.OnKey “%`”, “ToggleBack” ==> nó màu đỏ, ko chạy được.
Khi em bật file excel nào lên nó cũng nhảy vào phần Visual Basic Editor và bắt sửa Application.OnKey “%`”, “ToggleBack” ( màu đỏ )
Code TabBack_Class đây ạ.
Mã:
Public WithEvents AppEvent As Application
Public SheetReference As String
Public WorkbookReference As String
Private Sub AppEvent_SheetDeactivate(ByVal Sh As Object)
'PURPOSE: Store active worksheet information before leaving it
'SOURCE: www.TheSpreadsheetGuru.comWorkbookReference = Sh.Parent.Name
SheetReference = Sh.Name
End Sub
Private Sub AppEvent_WorkbookDeactivate(ByVal Wb As Workbook)
'PURPOSE: Store active worksheet information before closing workbook
'SOURCE: www.TheSpreadsheetGuru.com
WorkbookReference = Wb.Name
SheetReference = Wb.ActiveSheet.Name
End Sub
Lúc thấy "nó báo lỗi dòng" thì chịu khó lấy giấy bút ra chép lại rằng "nó" báo lỗi gì (hoặc clip lại cũng được)?
Ai biết cái TabBack_Class của bạn ra sao mà đoán được gì thêm?
 
Upvote 0
Em chào các anh.
Em sưu tầm được cái này để làm nút tắt di chuyển qua lại 2 sheet.
Nhưng khi em dán vào Personal VBA thì nó báo lỗi dòng
Application.OnKey “%`”, “ToggleBack”
Các anh có thể giúp em không ạ. Em cám ơn
Mã:
Dim TabTracker As New TabBack_Class
Sub TabBack_Run()
'PURPOSE: Initiate Tab tracking and shortcut key trigger
‘SOURCE: www.TheSpreadsheetGuru.com
'Enable TabTracker class
Set TabTracker.AppEvent = Application
'Call ToggleBack macro when user keys alt + `
Application.OnKey “%`”, “ToggleBack”
End Sub
Sub ToggleBack()
'PURPOSE: Go Back to Previous Worksheet
‘SOURCE: www.TheSpreadsheetGuru.com
With TabTracker
On Error Resume Next
Workbooks(.WorkbookReference).Worksheets(.SheetReference).Activate
On Error GoTo 0
End With
End Sub
1. Nhìn ký tự trước PURPOSE và trước SOURCE (ở mọi nơi) thì mắt thường thấy khác nhau. Nếu trước PURPOSE là dấu nháy đơn thì trước SOURCE không thể là dấu nháy đơn mà chỉ "nhìn giống" dấu nháy đơn. Sửa lại.
2. Những dấu nháy kép trong dòng Application.OnKey chỉ nhìn giống dấu nháy kép. Hãy tự gõ lại. Dấu gì sau ký tự % vậy?
 
Upvote 0
Cho xin 500 bức hình để được thỏa con mắt về cái lỗi lầm kia.

Bạn thông cảm, mình đưa bài dùm người khác (và đã gửi đường dẫn cho họ), nếu họ thực sự quan tâm tới vấn đề của mình thì sẽ vào đây trả lời bạn.
Cám ơn bạn.
 
Upvote 0
1. Nhìn ký tự trước PURPOSE và trước SOURCE (ở mọi nơi) thì mắt thường thấy khác nhau. Nếu trước PURPOSE là dấu nháy đơn thì trước SOURCE không thể là dấu nháy đơn mà chỉ "nhìn giống" dấu nháy đơn. Sửa lại.
2. Những dấu nháy kép trong dòng Application.OnKey chỉ nhìn giống dấu nháy kép. Hãy tự gõ lại. Dấu gì sau ký tự % vậy?
1. Em không hiểu ý này lắm nên em không biết trả lời thế nào.
2. Là dấu " ` " ==> trên nút tab, ý là dùng alt + ` để thay đổi qua lại các sheet ( giống alt tab trong window ).
https://blog.hocexcel.online/tao-ho...n-qua-lai-giua-cac-worksheet-trong-excel.html Đây là link hướng dẫn. Em không biết có được post link web khác vào đây không, nếu không được mong các anh chị bỏ qua.
 
Upvote 0
1. Em không hiểu ý này lắm nên em không biết trả lời thế nào.
2. Là dấu " ` " ==> trên nút tab, ý là dùng alt + ` để thay đổi qua lại các sheet ( giống alt tab trong window ).
https://blog.hocexcel.online/tao-ho...n-qua-lai-giua-cac-worksheet-trong-excel.html Đây là link hướng dẫn. Em không biết có được post link web khác vào đây không, nếu không được mong các anh chị bỏ qua.
Có gì mà không hiểu?
'PURPOSE: Initiate Tab tracking and shortcut key trigger
‘SOURCE: www.TheSpreadsheetGuru.com

Trước PURPOSE là dấu nháy đơn còn trước SOURCE là ký tự khác. Nhìn code không thấy tô xanh - chú thích thì biết giật mình chứ? Mà thôi, copy và dán vào notepad -> chọn phông chữ 72 -> nhìn 2 ký tự có khác nhau không? Nếu khác mà một thằng đeo huy hiệu "dấu nháy đơn" thì thằng kia chắc chắn đeo huy hiệu khác. Thế thôi.

Tôi đã viết rồi: gõ lại Application.OnKey “%`”, “ToggleBack” vì các ký tự chỉ nhìn giống dấu nháy kép chứ không phải dấu nháy kép. Kiểu copy paste từ nguồn khác thì nhiều khi phải sửa.
 
Upvote 0
Chào các bác.
Em có file excel này bị lỗi code mà không phát hiện ra tại sao. Mong các bác giúp đỡ.
Em có một bảng thống kê gồm các dòng là các mã vật tư, các cột là các thông số của vật tư, có một số cột là thiết bị sử dụng vật tư đó.
Em viết code để tạo user form nhằm tra cứu các thông số theo mã vật tư thể hiện trong listbox thứ nhất, việc này em đã làm ok, tiếp theo là tạo listbox thứ hai để tra cứu xem mã vật tư đó sử dụng trong thiết bị nào với số lượng bao nhiêu, khi chọn mã vật tư trong listbox 1 thì thông tin hiện trong listbox 2, và đang bị lỗi code ở đây. Điều lạ là khi em thử test code đó trong một file khác thì lại ok.
Vì trình vba em rất gà nên nhờ các bác xem hộ. Thanks!
 

File đính kèm

  • VBA.xlsm
    40.8 KB · Đọc: 12
Upvote 0
Chào các bác.
Em có file excel này bị lỗi code mà không phát hiện ra tại sao. Mong các bác giúp đỡ.
Em có một bảng thống kê gồm các dòng là các mã vật tư, các cột là các thông số của vật tư, có một số cột là thiết bị sử dụng vật tư đó.
Em viết code để tạo user form nhằm tra cứu các thông số theo mã vật tư thể hiện trong listbox thứ nhất, việc này em đã làm ok, tiếp theo là tạo listbox thứ hai để tra cứu xem mã vật tư đó sử dụng trong thiết bị nào với số lượng bao nhiêu, khi chọn mã vật tư trong listbox 1 thì thông tin hiện trong listbox 2, và đang bị lỗi code ở đây. Điều lạ là khi em thử test code đó trong một file khác thì lại ok.
Vì trình vba em rất gà nên nhờ các bác xem hộ. Cảm ơn!
Sub ShowSearch, thêm dòng sau vào sau dòng AssemblyArr = ...
Mã:
ReDim Preserve AssemblyArr(1 To UBound(AssemblyArr, 1), 1 To 2)
 
Upvote 0
Sub ShowSearch, thêm dòng sau vào sau dòng AssemblyArr = ...
Mã:
ReDim Preserve AssemblyArr(1 To UBound(AssemblyArr, 1), 1 To 2)
Thanks bác, mất một ngày tìm ko ra mà bác chỉ mất 30s đã ok.
Tiện thể cho em hỏi: theo em hiểu thì code này để khai báo lại AssemblyArr thành mảng 2 chiều, nhưng ko biết tại sao phải làm thế, vì bt vẫn đưa vào listbox được, đồng thời trong sub ShowSearch cũng không động gì đến AssemblyArr cả?!
 
Upvote 0
Cảm ơn bác, mất một ngày tìm ko ra mà bác chỉ mất 30s đã ok.
Tiện thể cho em hỏi: theo em hiểu thì code này để khai báo lại AssemblyArr thành mảng 2 chiều, nhưng ko biết tại sao phải làm thế, vì bt vẫn đưa vào listbox được, đồng thời trong sub ShowSearch cũng không động gì đến AssemblyArr cả?!
Vì gán như cũ thì listbox kết quả chỉ có 1 cột, mà sau đó bạn muốn dùng 2 cột
 
Upvote 0
Cảm ơn bác, mất một ngày tìm ko ra mà bác chỉ mất 30s đã ok.
Tiện thể cho em hỏi: theo em hiểu thì code này để khai báo lại AssemblyArr thành mảng 2 chiều, nhưng ko biết tại sao phải làm thế, vì bt vẫn đưa vào listbox được, đồng thời trong sub ShowSearch cũng không động gì đến AssemblyArr cả?!
Không phải khai báo lại thành mảng hai chiều mà là mở rộng mảng hai chiều. Mảng ban đầu của bạn cũng là mảng hai chiều nhưng kích thước chiều thứ hai là 1. Câu lệnh trên là mở rộng kích thước chiều thứ hai thành 2.

Bạn gán mảng có kích thước chiều thứ hai bằng 1 vào thuộc tính list của listbox thì nó chỉ có 1 cột (mặc dù thuộc tính columnscount là 2), gán dữ liệu vào cột thứ hai thì nó lỗi là đúng rồi.
 
Upvote 0
Tại e tưởng sau khi clear listbox rồi thì muốn gán mấy chiều vào cũng được, listbox sẽ nhận số chiều theo lệnh .list(...) :D
như vậy là listbox sẽ nhận kích thước của mảng gán lúc đầu, không thay đổi được à các bác?
 
Upvote 0
Tại e tưởng sau khi clear listbox rồi thì muốn gán mấy chiều vào cũng được, listbox sẽ nhận số chiều theo lệnh .list(...) :D
như vậy là listbox sẽ nhận số chiều của mảng gán lúc đầu, không thay đổi được à các bác?
Thay đổi được, nếu bạn gán lại list() với mảng mới
 
Upvote 0
Tại e tưởng sau khi clear listbox rồi thì muốn gán mấy chiều vào cũng được, listbox sẽ nhận số chiều theo lệnh .list(...) :D
như vậy là listbox sẽ nhận kích thước của mảng gán lúc đầu, không thay đổi được à các bác?
Nếu bạn gán một mảng cho thuộc tính .List thì số cột là kích thước chiều thứ hai của mảng được gán. Nếu bạn dùng phương thức .Additem ngay từ đầu thì số cột là giá trị thuộc tính .ColumnCount.
 
Upvote 0
Định đố hay sao ấy chứ
Mã:
Sheets(Array("1", "2", "3", "4")).FillAcrossSheets Sheets("1").Range("B2")
(Nếu tôi nhớ không lầm thì tôi đã từng đố câu gần tương tự trong mục đối vui về VBA)
Hay quá bác ndu96081631 ơi, không cần phải vòng lặp nào cả, Bác làm như nào vậy hả bác?
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom