Cách chạy đoạn mã trong module cho toàn bộ các sheet

Liên hệ QC

vinh12tn

Thành viên mới
Tham gia
19/5/13
Bài viết
22
Được thích
0
Như tiêu đề mình có 1 đoạn mã, giờ muốn chạy 1 lần mà thực hiện trên tất cả các sheet thì phải làm sao? Mong mọi người hỗ trợ, xin chân thành cản ơn
 
Như tiêu đề mình có 1 đoạn mã, giờ muốn chạy 1 lần mà thực hiện trên tất cả các sheet thì phải làm sao? Mong mọi người hỗ trợ, xin chân thành cản ơn
Duyệt qua tất cả các sheet, ở từng sheet thì cho chạy "đoạn mã".
Không dám nhận "cản ơn"!
 
Upvote 0
Bạn thực hiện như sau :

PHP:
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
   'Nếu có Worksheet Khóa thì ràng buộc xem WS có khóa không hoặc bẫy lỗi.
   'Ví dụ: WS.Range("A1").Value = 1
   'gọi một thủ tục hoặc đoạn code 
Next
Set WS = Nothing
 
Upvote 0
Tuỳ theo đoạn mã.
- Nếu nó nêu đích danh một sheet nào đó thì bạn phải chỉnh chỗ đích danh đó. Và dùng vòng lặp để nó làm việc trên từng sheet.
- Nếu nó chỉ tính range chung chung có nghĩa là nó chỉ áp dụng cho sheet đang active. Lúc ấy vòng lặp phải activate từng sheet trước khi gọi nó.
 
Upvote 0

Bạn thực hiện như sau :

PHP:
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
   'Nếu có Worksheet Khóa thì ràng buộc xem WS có khóa không hoặc bẫy lỗi.
   'Ví dụ: WS.Range("A1").Value = 1
   'gọi một thủ tục hoặc đoạn code
Next
Set WS = Nothing
Mình làm theo mà k được, sheet của mình không có mật khẩu gì hết
 
Upvote 0
Đưa đoạn code hay file giả lập lên; Bâng quơ vậy thì sau giải quyết được.
Mfile của mình gồm có 30 sheet giống nhau, minh dùng chức năng record làm trên 1 sheet, nhưng không biết chèn thêm đoạn lệnh gì để nó tự thực hiện trên 30 sheet còn lại, mình làm tận hơn 500 file như vậy, các bác có gì giúp e, file để trên máy công ty nên giờ k úp được, bác thông cảm
 
Upvote 0
Mfile của mình gồm có 30 sheet giống nhau, minh dùng chức năng record làm trên 1 sheet, nhưng không biết chèn thêm đoạn lệnh gì để nó tự thực hiện trên 30 sheet còn lại, mình làm tận hơn 500 file như vậy, các bác có gì giúp e, file để trên máy công ty nên giờ k úp được, bác thông cảm
Vậy thì phải chờ khi bạn có file.
30 sheet chừa lại 3 sheet, dữ liệu 10000 dòng chừa lại khoảng 100 dòng.
 
Upvote 0
Đọc từ bài #1 đã nghi là code chạy trên ActiveSheet rồi mà.

Sub ChayMoiSheets()
Dim curName As String
Dim sh As WorkSheet
curName = ActiveSheet.Name ' ghi lai ten sheet hien hanh
For Each sh In WorkSheets
sh.Activate
nhét mã cần chạy hoặc call cái sub ấy ở đây
Next sh
WorkSheets(curName).Activate ' tra lai hien hanh
End Sub

Mà sao diễn đàn này quy tụ toàn dân xài hàng khủng nhỉ.
30 sheets * 500 files = 15000 bảng tính (giả sử mỗi sheet chỉ chứa 1 bảng tính)
Trình độ quản lý 15000 bảng tính là trình độ bậc thầy của tôi. :unknw::unknw::unknw:
 
Upvote 0
Đọc từ bài #1 đã nghi là code chạy trên ActiveSheet rồi mà.

Sub ChayMoiSheets()
Dim curName As String
Dim sh As WorkSheet
curName = ActiveSheet.Name ' ghi lai ten sheet hien hanh
For Each sh In WorkSheets
sh.Activate
nhét mã cần chạy hoặc call cái sub ấy ở đây
Next sh
WorkSheets(curName).Activate ' tra lai hien hanh
End Sub

Mà sao diễn đàn này quy tụ toàn dân xài hàng khủng nhỉ.
30 sheets * 500 files = 15000 bảng tính (giả sử mỗi sheet chỉ chứa 1 bảng tính)
Trình độ quản lý 15000 bảng tính là trình độ bậc thầy của tôi. :unknw::unknw::unknw:
Thank bác, chút em thử, là phần của em thôi ạ, có đến 10 người làm giống em:):)
 
Upvote 0
Đọc từ bài #1 đã nghi là code chạy trên ActiveSheet rồi mà.

Sub ChayMoiSheets()
Dim curName As String
Dim sh As WorkSheet
curName = ActiveSheet.Name ' ghi lai ten sheet hien hanh
For Each sh In WorkSheets
sh.Activate
nhét mã cần chạy hoặc call cái sub ấy ở đây
Next sh
WorkSheets(curName).Activate ' tra lai hien hanh
End Sub

Mà sao diễn đàn này quy tụ toàn dân xài hàng khủng nhỉ.
30 sheets * 500 files = 15000 bảng tính (giả sử mỗi sheet chỉ chứa 1 bảng tính)
Trình độ quản lý 15000 bảng tính là trình độ bậc thầy của tôi. :unknw::unknw::unknw:
Mình làm k đc, nó báo lỗi, mình gửi kèm file bạn kiểm tra hộ
 

File đính kèm

  • May 7.xlsm
    3 MB · Đọc: 12
Upvote 0
Mình làm k đc, nó báo lỗi, mình gửi kèm file bạn kiểm tra hộ
Thử sửa code lại thế này xem sao.
Mã:
Sub GPE()
Dim Sh As Worksheet, i As Long
For Each Sh In ThisWorkbook.Worksheets
    With Sh
        i = .Range("A1000000").End(xlUp).Row
        .Range("A1:A" & i).TextToColumns Destination:=.Range("A1"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 2), Array(8, 2), Array(13, 2), Array(21, 2), Array(27, 2), _
            Array(31, 2), Array(34, 2), Array(37, 2), Array(39, 2), Array(44, 2), Array(48, 2), Array( _
            58, 2), Array(68, 2), Array(72, 2), Array(82, 2), Array(105, 2), Array(110, 2), Array(115, 2 _
            ), Array(120, 2), Array(125, 2), Array(130, 2), Array(135, 2), Array(140, 2), Array(145, 2) _
            , Array(150, 2), Array(155, 2), Array(160, 2), Array(172, 2), Array(184, 2), Array(194, 2), _
            Array(216, 2), Array(250, 2), Array(253, 2), Array(259, 2), Array(265, 2)), _
            TrailingMinusNumbers:=True
        .Range("M1:M" & i).Delete Shift:=xlToLeft
        .Range("N1:N" & i).NumberFormat = "General"
        .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        .Rows("1:1").AutoFilter
    End With
Next Sh
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thử sửa code lại thế này xem sao.
Mã:
Sub GPE()
Dim Sh As Worksheet, i As Long
For Each Sh In ThisWorkbook.Worksheets
    With Sh
        i = .Range("A1000000").End(xlUp).Row
        .Range("A1:A" & i).TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 2), Array(8, 2), Array(13, 2), Array(21, 2), Array(27, 2), _
            Array(31, 2), Array(34, 2), Array(37, 2), Array(39, 2), Array(44, 2), Array(48, 2), Array( _
            58, 2), Array(68, 2), Array(72, 2), Array(82, 2), Array(105, 2), Array(110, 2), Array(115, 2 _
            ), Array(120, 2), Array(125, 2), Array(130, 2), Array(135, 2), Array(140, 2), Array(145, 2) _
            , Array(150, 2), Array(155, 2), Array(160, 2), Array(172, 2), Array(184, 2), Array(194, 2), _
            Array(216, 2), Array(250, 2), Array(253, 2), Array(259, 2), Array(265, 2)), _
            TrailingMinusNumbers:=True
        .Range("M1:M" & i).Delete Shift:=xlToLeft
        .Range("N1:N" & i).NumberFormat = "General"
        .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        .Rows("1:1").AutoFilter
    End With
Next Sh
End Sub
Báo lỗi rồi bạn ơi, bạn thử chạy giúp mình xem có bị báo lỗi k
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom