Anh chị diễn đàn giúp em duyệt qua Sheet theo CodeName

hoctapphotoshop

Thành viên mới
Tham gia ngày
4 Tháng tư 2018
Bài viết
23
Được thích
3
Điểm
165
Tuổi
33
Sub test1()
Dim i As Long
Dim Ws As Worksheet
For i = 1 To 4
Set Ws = Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)
Next i
End Sub
Sub test2()
Dim i As Long
Dim Ws As Worksheet
For i = 1 To 4
Set Ws = Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)
Sh1.Copy
Next i
End Sub
- Khi em dùng lệnh gán Sheet theo CodeName như Sub test1() thì vẫn chạy bình thường
- Nhưng thêm lệnh copy một Sheet sang book mới thì bị lỗi như Sub tets2()
- Anh chị chỉnh sửa cho em lỗi này với, có cách nào duyệt Sheet theo CodeName không ạ? giải thích lệnh lỗi cho em hiểu với.
Em cám ơn!
 

File đính kèm

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,942
Được thích
3,045
Điểm
360
1. Nếu tôi hiểu ý thì là Ws.Copy chứ không phải Sh1.Copy

2. Sheets(...) thực ra là truy cập tới book đang hoạt động. Viết tường minh thì là ActiveWorkbook.Sheets(...)

Sau vòng lặp đầu tiên với i = 1 thì có một book được tạo với 1 sheet duy nhất là Sh1 (GH). Và book này trở thành ActiveWorkbook.

Khi thực hiện vòng lặp thứ 2 thì có
Mã:
Set Ws = Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)

-> Set Ws = ActiveWorkbook.Sheets(ThisWorkbook.VBProject.VBComponents("Sh2").Properties("Name").Value)

-> Set Ws = ActiveWorkbook.Sheets("GY")
Lỗi là do ActiveWorkbook là book được tạo ở vòng 1, mà nó chỉ có1 sheet duy nhất là "GH", vậy truy cập tới sheet "GY" thì có lỗi là đương nhiên.

Sửa thành như sau thì hết lỗi
Mã:
Sub test2()
    Dim i As Long
    Dim Ws As Worksheet
    For i = 1 To 4
        Set Ws = ThisWorkbook.Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)
        Ws.Copy
    Next i
End Sub
3. Để làm việc ở điểm 2 thì chỉ cần
Mã:
Sub test2()
Dim i As Long
Dim Ws As Worksheet
    With ThisWorkbook
        For i = 1 To .Sheets.Count
            Set Ws = .Sheets(i)
            Ws.Copy
        Next i
    End With
End Sub

hoặc

Sub test2()
Dim i As Long
    With ThisWorkbook
        For i = 1 To .Sheets.Count
            .Sheets(i).Copy
        Next i
    End With
End Sub
 

hoctapphotoshop

Thành viên mới
Tham gia ngày
4 Tháng tư 2018
Bài viết
23
Được thích
3
Điểm
165
Tuổi
33
1. Nếu tôi hiểu ý thì là Ws.Copy chứ không phải Sh1.Copy

2. Sheets(...) thực ra là truy cập tới book đang hoạt động. Viết tường minh thì là ActiveWorkbook.Sheets(...)

Sau vòng lặp đầu tiên với i = 1 thì có một book được tạo với 1 sheet duy nhất là Sh1 (GH). Và book này trở thành ActiveWorkbook.

Khi thực hiện vòng lặp thứ 2 thì có
Mã:
Set Ws = Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)

-> Set Ws = ActiveWorkbook.Sheets(ThisWorkbook.VBProject.VBComponents("Sh2").Properties("Name").Value)

-> Set Ws = ActiveWorkbook.Sheets("GY")
Lỗi là do ActiveWorkbook là book được tạo ở vòng 1, mà nó chỉ có1 sheet duy nhất là "GH", vậy truy cập tới sheet "GY" thì có lỗi là đương nhiên.

Sửa thành như sau thì hết lỗi
Mã:
Sub test2()
    Dim i As Long
    Dim Ws As Worksheet
    For i = 1 To 4
        Set Ws = ThisWorkbook.Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)
        Ws.Copy
    Next i
End Sub
3. Để làm việc ở điểm 2 thì chỉ cần
Mã:
Sub test2()
Dim i As Long
Dim Ws As Worksheet
    With ThisWorkbook
        For i = 1 To .Sheets.Count
            Set Ws = .Sheets(i)
            Ws.Copy
        Next i
    End With
End Sub

hoặc

Sub test2()
Dim i As Long
    With ThisWorkbook
        For i = 1 To .Sheets.Count
            .Sheets(i).Copy
        Next i
    End With
End Sub
1. Nếu tôi hiểu ý thì là Ws.Copy chứ không phải Sh1.Copy

2. Sheets(...) thực ra là truy cập tới book đang hoạt động. Viết tường minh thì là ActiveWorkbook.Sheets(...)

Sau vòng lặp đầu tiên với i = 1 thì có một book được tạo với 1 sheet duy nhất là Sh1 (GH). Và book này trở thành ActiveWorkbook.

Khi thực hiện vòng lặp thứ 2 thì có
Mã:
Set Ws = Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)

-> Set Ws = ActiveWorkbook.Sheets(ThisWorkbook.VBProject.VBComponents("Sh2").Properties("Name").Value)

-> Set Ws = ActiveWorkbook.Sheets("GY")
Lỗi là do ActiveWorkbook là book được tạo ở vòng 1, mà nó chỉ có1 sheet duy nhất là "GH", vậy truy cập tới sheet "GY" thì có lỗi là đương nhiên.

Sửa thành như sau thì hết lỗi
Mã:
Sub test2()
    Dim i As Long
    Dim Ws As Worksheet
    For i = 1 To 4
        Set Ws = ThisWorkbook.Sheets(ThisWorkbook.VBProject.VBComponents("Sh" & i).Properties("Name").Value)
        Ws.Copy
    Next i
End Sub
3. Để làm việc ở điểm 2 thì chỉ cần
Mã:
Sub test2()
Dim i As Long
Dim Ws As Worksheet
    With ThisWorkbook
        For i = 1 To .Sheets.Count
            Set Ws = .Sheets(i)
            Ws.Copy
        Next i
    End With
End Sub

hoặc

Sub test2()
Dim i As Long
    With ThisWorkbook
        For i = 1 To .Sheets.Count
            .Sheets(i).Copy
        Next i
    End With
End Sub
cám ơn Anh đã giúp và giải thích câu lệnh trên, đúng ý em muốn thực hiện rồi
 
Top Bottom