VBA sửa vòng lặp for i từ 1 sheet chỉ định

Liên hệ QC

lethanh03

Thành viên mới
Tham gia
28/12/18
Bài viết
15
Được thích
0
Giới tính
Nam
Em có 1 đoạn code tổng hợp tại sheets "TH" (sheet thứ 3 trong bảng tính), có cách nào để cố định code chạy bắt đầu từ sheet "TH" không, khi em chèn thêm 1 số sheet khác trước sheet "TH" thì code bị lỗi ?
Nhờ anh chị trong group xem giúp em ạ !!! Tiện thể kiểm tra giúp em vòng lặp như vậy có nặng không ạ!

Sub Macro1_SUM()
Set wk = ThisWorkbook
Set ws = wk.Sheets("TH")

For i = 3 + 1 To Sheets.Count
Sheets(i).Select
fr = Application.Match("MUC 1", Range("A:A"), 0)
lr = Application.Match("MUC 2", Range("A:A"), 0)
Range(("A" & fr) & ":" & ("C" & lr - 1)).Copy

ws.Select
lrdata = ws.Cells(Rows.Count, 1).End(xlUp).Row
Range("A" & lrdata + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues
Next i
 

File đính kèm

  • abc.xlsm
    31.6 KB · Đọc: 12
Em có 1 đoạn code tổng hợp tại sheets "TH" (sheet thứ 3 trong bảng tính), có cách nào để cố định code chạy bắt đầu từ sheet "TH" không, khi em chèn thêm 1 số sheet khác trước sheet "TH" thì code bị lỗi ?

Bạn có thể kiểm tra tên sheet trước khi copy, như:

Mã:
For i = 3 + 1 To Sheets.Count
    If Left(Sheet(i).Name, 3) = "Tab" Then
        Sheets(i).Select
        fr = Application.Match("MUC 1", Range("A:A"), 0)
        lr = Application.Match("MUC 2", Range("A:A"), 0)
        Range(("A" & fr) & ":" & ("C" & lr - 1)).Copy
           
        ws.Select
        lrdata = ws.Cells(Rows.Count, 1).End(xlUp).Row
        Range("A" & lrdata + 1).Select
        Selection.PasteSpecial Paste:=xlPasteValues
    End If
    Next i
 
Upvote 0
Bạn có thể kiểm tra tên sheet trước khi copy, như:

Mã:
For i = 3 + 1 To Sheets.Count
    If Left(Sheet(i).Name, 3) = "Tab" Then
        Sheets(i).Select
        fr = Application.Match("MUC 1", Range("A:A"), 0)
        lr = Application.Match("MUC 2", Range("A:A"), 0)
        Range(("A" & fr) & ":" & ("C" & lr - 1)).Copy
        
        ws.Select
        lrdata = ws.Cells(Rows.Count, 1).End(xlUp).Row
        Range("A" & lrdata + 1).Select
        Selection.PasteSpecial Paste:=xlPasteValues
    End If
    Next i
Em cảm ơn ạ, code chạy ok rồi mà hình như đang đang tổng hợp từ tất cả các sheet trong bảng tính, em đang cần là chỉ lấy dữ liệu của các sheet bắt đầu từ sheet tổng hợp thôi
 
Lần chỉnh sửa cuối:
Upvote 0
Code chạy bắt đầu từ sheet "TH"

chay = False
For each Sh In Worksheets
If Sh.Name = "TH" Then chay = True
If chay Then
' code cần chạy ở đây
End If
Next Sh
Em chưa rõ lắm, có thể thêm đoạn code đầy đủ với code file trên dùm em được không ạ, có thể tìm số thứ tự của sheet "TH" trong workbook và gán i bằng nó được không ạ.
For i = (số thứ tự của sheet "TH") + 1 To Sheets.Count
 
Lần chỉnh sửa cuối:
Upvote 0
Em có 1 đoạn code tổng hợp tại sheets "TH" (sheet thứ 3 trong bảng tính), có cách nào để cố định code chạy bắt đầu từ sheet "TH" không, khi em chèn thêm 1 số sheet khác trước sheet "TH" thì code bị lỗi ?
. . . . . .
Vấn đề của bạn có lẽ sẽ là cách thức bạn gán tên cho các trang tính như thế nào để phân biệt giữa các loại trang tính
Ví dụ bạn có các tên trang tính là 'TH01', 'TH02', 'TH03' & 'T01', 'T02', 'T03',
Khi thêm trang tính, nếu thuộc về loại 'TH' thì sẽ phải ấn định nó cái tên 'TH04',. . .
Mỗi trang tính có tên cúng cơm & tên bạn tự gán cho nó;
Tùy trường hợp mà VBA tác động lên loại tên nào trong 2 thứ tên nêu trên;
(Chú ý cách gán tên sẽ suông sẻ nhiều vấn đề đó bạn)

Cụm từ "Sheet thứ 3 trong bảng tính" có vẻ như vô nghĩa . . . .
 
Upvote 0
"Thứ" của sheet là vị trí của nó trong collection Worksheets

1659202902014.png

Trong hình trên, sheet thứ 3 là "RotRet". Sheet "TH" nằm vị trí thứ tư.
Code ở bài #4 sẽ tác dụng cho các sheets "TH", "CaLoc", "CaTre"

Nếu tôi dời "TH"
1659203212357.png

Code ở bài #4 sẽ tác dụng cho các sheets "TH", "TeTiTo", "RotRet", "CaLoc", "CaTre"
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom