Hỏi cách áp dụng code cho từng sheet (1 người xem)

  • Thread starter Thread starter pinklove
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

pinklove

Thành viên thường trực
Tham gia
21/1/08
Bài viết
336
Được thích
42
Các bác cho em hỏi nếu em có 2 hay nhiều hơn các đoạn code, mà em muốn mỗi code chỉ áp dụng cho một số sheet nhất định trong workbook thì có cách gì để em vẫn dùng ThisWorkbook chứ không phải gán code cho từng sheet không ạ. (Ví dụ như nếu sheet bắt đầu bằng chữ A thì áp dụng code 1, bắt đầu bằng chữ B thì áp dụng code 2...)
 
Các bác cho em hỏi nếu em có 2 hay nhiều hơn các đoạn code, mà em muốn mỗi code chỉ áp dụng cho một số sheet nhất định trong workbook thì có cách gì để em vẫn dùng ThisWorkbook chứ không phải gán code cho từng sheet không ạ. (Ví dụ như nếu sheet bắt đầu bằng chữ A thì áp dụng code 1, bắt đầu bằng chữ B thì áp dụng code 2...)
Bạn Insert Một Module xong viết code vô đó khi ở sheet nào thích thì keo nó chạy ko thì thôi vậy nha
 
Upvote 0
Các bác cho em hỏi nếu em có 2 hay nhiều hơn các đoạn code, mà em muốn mỗi code chỉ áp dụng cho một số sheet nhất định trong workbook thì có cách gì để em vẫn dùng ThisWorkbook chứ không phải gán code cho từng sheet không ạ. (Ví dụ như nếu sheet bắt đầu bằng chữ A thì áp dụng code 1, bắt đầu bằng chữ B thì áp dụng code 2...)

Bạn gửi file giả định lên sẽ cụ thể hơn
 
Upvote 0
Các bác cho em hỏi nếu em có 2 hay nhiều hơn các đoạn code, mà em muốn mỗi code chỉ áp dụng cho một số sheet nhất định trong workbook thì có cách gì để em vẫn dùng ThisWorkbook chứ không phải gán code cho từng sheet không ạ. (Ví dụ như nếu sheet bắt đầu bằng chữ A thì áp dụng code 1, bắt đầu bằng chữ B thì áp dụng code 2...)

bạn tải file đính kèm xem mình bố trí code như vậy có đúng ko nhé:
code được đặt tại Module1 và module của thisworkbook

Mã:
Sub tong()
Dim ws As String

    ws = ThisWorkbook.ActiveSheet.Name
    
    Select Case ws
        Case "Sheet1"
            Call A
        Case "Sheet2"
            Call B
    End Select
    
End Sub
Sub A()
    MsgBox "Run Sub co' ten la` A"
End Sub

Sub B()
    MsgBox "Run Sub co' ten la` B"
End Sub

Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Call tong
End Sub
'--------------------------
@#6:
file của bạn đang khóa code, mình ko thể xem được.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Các bác cho em hỏi nếu em có 2 hay nhiều hơn các đoạn code, mà em muốn mỗi code chỉ áp dụng cho một số sheet nhất định trong workbook thì có cách gì để em vẫn dùng ThisWorkbook chứ không phải gán code cho từng sheet không ạ. (Ví dụ như nếu sheet bắt đầu bằng chữ A thì áp dụng code 1, bắt đầu bằng chữ B thì áp dụng code 2...)

Có rất nhiều cách. Muốn làm ra sao thì phải cụ thể hơn.
 
Upvote 0
File đính kèm của em đây ạ. Em có xóa bớt một số sheet vì dung lượng lớn quá. Em có các sheet có tên bắt đầu bằng chữ F và một số bắt đầu bằng chữ D. Trong mỗi sheet giờ em đang cho code riêng vì code sheet F khác code sheet D. Bây giờ em muốn hỏi cách làm sao mà để cả 2 code đó chạy được đúng theo từng sheet mà không cần phải gán code cho từng sheet nữa.
Ngoài ra em muốn nhờ các bác giải quyết thêm cho em hai vấn đề trong file này:
1. Em hay dùng auto Filter để tìm trạng thái cho nhanh, nhưng đôi lúc quên chọn all trở lại nên khi dùng "Find and replace" để tìm số liệu đã bị ẩn đi đó thì không tìm được. Nhờ các bác viết hộ em đoạn code làm sao quy định trong một khoảng thời gian nhất định thì toàn bộ các cột được Filter trở về trạng thái chọn all.
2. Em muốn hide các sheet khi làm việc vì nhiều sheet quá, chỉ để lại sheet báo cáo chung, sau đó muốn làm việc ở sheet nào thì ấn vào link đến sheet đó, em đã làm được điều này nhưng vẫn bị vướng khi dùng "Find and replace" thì không tìm được số liệu các sheet bị ẩn. Có cách nào để khi em đang ở một sheet bất kỳ thì vẫn tìm kiếm được số liệu các sheet bị ẩn không ạ.

Rất mong được các bác giúp đỡ.
 
Upvote 0
XIn lỗi em đính kèm bị lỗi, em gửi lại file đây ạ. Pass vba là : cnl
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
bạn tải file đính kèm xem mình bố trí code như vậy có đúng ko nhé:
code được đặt tại Module1 và module của thisworkbook

Mã:
Sub tong()
Dim ws As String

    ws = ThisWorkbook.ActiveSheet.Name
    
    Select Case ws
        Case "Sheet1"
            Call A
        Case "Sheet2"
            Call B
    End Select
    
End Sub
Sub A()
    MsgBox "Run Sub co' ten la` A"
End Sub

Sub B()
    MsgBox "Run Sub co' ten la` B"
End Sub

Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Call tong
End Sub
Em muốn là nó gọi tên sheet theo một quy định chung nào đó ấy ạ. chứ nếu gọi từng sheet thế này thì khác gì paste code cho từng sheet đâu
 
Lần chỉnh sửa cuối:
Upvote 0
Có bác nào giúp em với đi ạ. Em đang cần lắm ạ.
 
Upvote 0
File đính kèm của em đây ạ. Em có xóa bớt một số sheet vì dung lượng lớn quá. Em có các sheet có tên bắt đầu bằng chữ F và một số bắt đầu bằng chữ D. Trong mỗi sheet giờ em đang cho code riêng vì code sheet F khác code sheet D. Bây giờ em muốn hỏi cách làm sao mà để cả 2 code đó chạy được đúng theo từng sheet mà không cần phải gán code cho từng sheet nữa.
....

- bạn tải lại file đính kèm xem có đúng kết quả ko nhé !
- mình mới cài thử cho sheet D-Thịnh: tách code của sheet ra thành 1 module riêng + thêm biến cho Sub hotro_WSChange_sheetD
'-----
file mới tại #12
 
Lần chỉnh sửa cuối:
Upvote 0
- bạn tải lại file đính kèm xem có đúng kết quả ko nhé !
- mình mới cài thử cho sheet D-Thịnh: tách code của sheet ra thành 1 module riêng + thêm biến cho Sub hotro_WSChange_sheetD
Được rồi, cảm ơn bạn, mình đã làm được cho cả các sheet F nữa rồi. Còn 2 vấn đề nêu ở bài #6 có cách nào giải quyết giùm mình không vậy????
 
Upvote 0
Được rồi, cảm ơn bạn, mình đã làm được cho cả các sheet F nữa rồi. Còn 2 vấn đề nêu ở bài #6 có cách nào giải quyết giùm mình không vậy????

các vấn đề còn lại:
vđ1. đã xong --=0.
Mã:
Sub [B]nhaloc_toanboSheet[/B]()
Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Bao cao chung" Then
        'MsgBox ws.Name 'kiem tra ten tung` sheet
        Call Unprotect_1sheet(ws)
        Call Nhaloc_1Sheet(ws, ws.Range("A1:A1000"))
        Call Protect_1sheet(ws)
    End If
    Next
    
    MsgBox "Da~ nha loc toan bo sheet", vbInformation
End Sub

Sub [B]Nhaloc_1Sheet[/B](iSheet As Worksheet, vung As Range) '"Clear Filter/ Unhide Rows"
   
        On Error GoTo Next_ 'xay ra loi~ neu ko co' bo loc.
        
        If iSheet.FilterMode Then iSheet.ShowAllData 'phai mo? khoa' truoc' '|| dang dung` Filter
        
Next_:
        '----------
        'Cells.EntireRow.Hidden = False                              '|| Hide Row
        vung.EntireRow.Hidden = False
        
        'MsgBox "da~ nha loc"

End Sub

Sub [B]Unprotect_1sheet[/B](iSheet As Worksheet) 'any Sheet
    iSheet.Unprotect Password:=1
End Sub

Sub [B]Protect_1sheet[/B](iSheet As Worksheet) 'any Sheet
    With iSheet
        .Protect Password:=1, AllowFiltering:=True 'cho phep' loc
    End With
End Sub

link: http://www.mediafire.com/download/ml79lhsqkoa9sdh/NGHỊCH+(WSchange)+2.xlsm

2. do bố cục của sheet báo cáo chung của bạn chưa có (shape ...) nên mình cũng ko cài code như thế nào cả, bạn tham khảo file về cách link sheet bên dưới (của 1 bạn trên diễn đàn shared)
 
Lần chỉnh sửa cuối:
Upvote 0
các vấn đề còn lại:
1. liên quan đến code Unprotect sheet nhưng hiện tại file của bạn đang khóa (file của bạn tại #10), tiếc là mình ko thể can thiệp vào được --=0.
2. do bố cục của sheet báo cáo chung của bạn chưa có (shape ...) nên mình cũng ko cài code như thế nào cả, bạn tham khảo file về cách link sheet bên dưới (của 1 bạn trên diễn đàn shared)
Xin lỗi bạn, mình quên mất để pass Protectsheet. Pass Unprotect là 1. Mình đã tham khảo cái bài viết về file Link2Sh đó rồi, mình đã làm theo thì ẩn được sheet nhưng mình muốn hỏi ở đây là khi ẩn sheet thì có cách nào để Find dữ liệu (cụ thể là số thuê bao) đang nằm trong các sheet bị ẩn không?? Nhờ bạn giúp đỡ mình.
 
Upvote 0
Xin lỗi bạn, mình quên mất để pass Protectsheet. Pass Unprotect là 1. Mình đã tham khảo cái bài viết về file Link2Sh đó rồi, mình đã làm theo thì ẩn được sheet nhưng mình muốn hỏi ở đây là khi ẩn sheet thì có cách nào để Find dữ liệu (cụ thể là số thuê bao) đang nằm trong các sheet bị ẩn không?? Nhờ bạn giúp đỡ mình.

Khi tìm kiếm thì cho sheet ẩn đó hiện lên. Sau khi tìm xong thì cho sheet ẩn lại. Ví dụ: Trước khi tim kiếm: Sheet1.Visible=1. Tìm kiếm xong: Sheet1.Visible=2 hoặc 0 tùy bạn. Đang onl bằng điện thoại nên không viết cụ thể được.
 
Upvote 0
Khi tìm kiếm thì cho sheet ẩn đó hiện lên. Sau khi tìm xong thì cho sheet ẩn lại. Ví dụ: Trước khi tim kiếm: Sheet1.Visible=1. Tìm kiếm xong: Sheet1.Visible=2 hoặc 0 tùy bạn. Đang onl bằng điện thoại nên không viết cụ thể được.
Như thế này thì thà mình làm cái nút Hide all/Unhide All như trong ví dụ Link2Sh kia, vì số liệu nhiều lúc chẳng biết nó nằm sheet nào, nên mới phải dùng find để tìm. Mình đang hỏi giải pháp ở đây là nhằm không phải unhide cơ.
 
Upvote 0
Xin lỗi bạn, mình quên mất để pass Protectsheet. Pass Unprotect là 1. Mình đã tham khảo cái bài viết về file Link2Sh đó rồi, mình đã làm theo thì ẩn được sheet nhưng mình muốn hỏi ở đây là khi ẩn sheet thì có cách nào để Find dữ liệu (cụ thể là số thuê bao) đang nằm trong các sheet bị ẩn không?? Nhờ bạn giúp đỡ mình.
vđ1: việc ấn định 1 khoảng thời gian để nhả lọc 1 sheet mình chưa thể giúp bạn được, mình chỉ có thể cài nhả lọc toàn bộ các sheet (ngoài sheet bao cao chung) khi workbook đó Open lần đầu tiên. Bạn tải lại file đính kèm tại #12 nhé
vđ2: mình vẫn chưa hiểu hết ý (hoặc bạn có thể lập topic mới liên quan đến vấn đề tìm kiếm khi sheet đang ẩn ...)
 
Lần chỉnh sửa cuối:
Upvote 0
vđ2: mình vẫn chưa hiểu hết ý (hoặc bạn có thể lập topic mới liên quan đến vấn đề tìm kiếm khi sheet đang ẩn ...)
Bạn chưa hiểu ý nào để mình giải thích. Lập topic lung tung loãng ra mình sợ ko được help lại còn bị ban quản trị oánh cho --=0**~**. Và cảm ơn bạn vì đã nhiệt tình giúp đỡ mình, nhưng vì yêu cầu công việc luôn dùng filter nên mình vẫn cần nó được quy định theo thời gian. Nhờ bạn nghiên cứu hộ với. Mình mù tịt VBA, vì công việc cần quá nên nhờ vả bạn chút --=0
 
Lần chỉnh sửa cuối:
Upvote 0
Cả nhà giúp em với ạ. Chờ trả lời lâu quá !$@!!(@$%@(@$%@(@$%@
 
Upvote 0
Các bác cho em hỏi nếu em có 2 hay nhiều hơn các đoạn code, mà em muốn mỗi code chỉ áp dụng cho một số sheet nhất định trong workbook thì có cách gì để em vẫn dùng ThisWorkbook chứ không phải gán code cho từng sheet không ạ. (Ví dụ như nếu sheet bắt đầu bằng chữ A thì áp dụng code 1, bắt đầu bằng chữ B thì áp dụng code 2...)
Code ThisWorkbook
Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Long, Cll As Range
Set Sh = ThisWorkbook.ActiveSheet
If Left(Sh.Name, 1) = "D" Then
   'Code 1
ElseIf Left(Sh.Name, 1) = "F" Then
    'Code 2
End If
End Sub
 

File đính kèm

Upvote 0
Code ThisWorkbook
Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Long, Cll As Range
Set Sh = ThisWorkbook.ActiveSheet
If Left(Sh.Name, 1) = "D" Then
   'Code 1
ElseIf Left(Sh.Name, 1) = "F" Then
    'Code 2
End If
End Sub
Tuyệt vời, cảm ơn bạn nhiều. Còn vấn đề clear filter theo thời gian (nêu ở bài #6) đó giúp mình với ạ.
 
Upvote 0
Tuyệt vời, cảm ơn bạn nhiều. Còn vấn đề clear filter theo thời gian (nêu ở bài #6) đó giúp mình với ạ.

Up lại file với các code đã hoàn thành đến đâu, Nêu lại và rõ ràng vấn đề còn tồn tại muốn giải quyết (cần hỏi)
Thì may ra mới nhanh được, còn không lại chờ và kêu dài.... tại sao

Khi muốn người khác giúp, thì phải tạo điều kiện thuận lợi nhất cho họ chứ không phải thuận cho mình ?
 
Lần chỉnh sửa cuối:
Upvote 0
Up lại file với các code đã hoàn thành đến đâu, Nêu lại và rõ ràng vấn đề còn tồn tại muốn giải quyết (cần hỏi)
Thì may ra mới nhanh được, còn không lại chờ và kêu dài.... tại sao

Khi muốn người khác giúp, thì phải tạo điều kiện thuận lợi nhất cho họ chứ không phải thuận cho mình ?
Cảm ơn bạn đã nhắc nhở, mình sẽ ghi nhớ và khắc phục. Vì những vấn đề của file giờ không còn đúng với cái tên của bài này nữa nên mình xin phép mở một bài mới (tại đây) để hỏi. Mong bạn và mọi người giúp đỡ mình .
Xin chân thành cảm ơn.
 
Lần chỉnh sửa cuối:
Upvote 0

Bài viết mới nhất

Back
Top Bottom