Trường hợp Worksheets.Add thất bại

vbano1

SMod
Thành viên BQT
Nếu muốn thêm sheet mới, thì đoạn code sau sẽ làm điều đó:
Mã:
Sub Sample1()
    Worksheets.Add
End Sub
Điều này đơn giản quá phải không nào. Khi thực thi, nó sẽ thêm một sheet mới vào bên trái sheet đang được active.
Dưới đây là các tham số liên quan:
  • Before:Sheet thêm mới nằm bên trái sheet đang được active.
  • After:Thêm sheet mới vào bên phải sheet đang được active.
  • Count:Số lượng sheet được thêm mới.
  • Type:Chủng loại sheet được thêm mới.
Nếu không chỉ định rõ là Before hay After thì mặc định sheet mới sẽ được thêm vào bên trái sheet đang active. Tham số Count nếu không được chỉ định thì mặc định chỉ có 1 sheet được thêm vào. Và trong trường hợp chúng ta chẳng chỉ định tham số nào như ở code trên thì chỉ có một sheet mới được thêm vào bên trái của sheet đang active.
Bây giờ tôi đang ở trạng thái như sau:
Bạn cần đăng nhập để thấy đính kèm

Và bây giờ tôi chạy code sau:
Mã:
Sub Sample2()
    Worksheets.Add Before:=ActiveSheet, Count:=1
End Sub
Kết quả là:
Bạn cần đăng nhập để thấy đính kèm


Quay trở lại code ở ví dụ 1. Bây giờ tôi dùng phím shift và click chọn vào hai sheet.
Bạn cần đăng nhập để thấy đính kèm

Chạy code ở ví dụ 1:
Mã:
Sub Sample1()
    Worksheets.Add
End Sub
Kết quả là:
Bạn cần đăng nhập để thấy đính kèm

Có hai sheet (sheet 6, sheet 7) được tạo ra bên trái sheet 3, sheet 2.
Như ở trên đã nói, nếu không chỉ định tham số Count thì số sheet được tạo ra là 1. Tuy nhiên ở trường hợp này, số sheet được tạo ra là 2, nó dựa vào số sheet đang active (sheet3, sheet 2).
Bây giờ tôi lại có file như sau:
Bạn cần đăng nhập để thấy đính kèm


Tôi chạy lại code trên:
Mã:
Sub Sample1()
    Worksheets.Add
End Sub
Và trường hợp này thì lỗi xảy ra:
Bạn cần đăng nhập để thấy đính kèm

Nó thông báo rằng đang có nhiều sheet được select và do đó nó không thể tạo được sheet mới.

Tuy nhiên nếu tôi chạy code sau:
Mã:
Sub Sample3()
    Worksheets.Add Count:=1
End Sub
Thì lúc này không có lỗi. Một sheet mới được tạo ra:
Bạn cần đăng nhập để thấy đính kèm


Nguồn tham khảo:
 

giaiphapvba

Administrator
Thành viên BQT
(Tiếp theo)
Tất nhiên trong trường hợp bình thường, tức là chỉ có 1 sheet active, thì sẽ chỉ có 1 sheet mới được tạo ra nếu chúng ta không chỉ thị tham số nào.
Tóm lại:
  • Nếu chỉ có 1 sheet được chọn thì theo đúng như kỳ vọng, sẽ chỉ có 1 sheet được tạo ra.
  • Nếu có nhiều sheet được chọn mà các sheet này liên tiếp đứng cạnh nhau thì số sheet tạo ra sẽ bằng số sheet được chọn.
  • Nếu số sheet được chọn nhiều hơn 1 sheet và không đứng liên tiếp nhau thì sẽ xảy ra lỗi.
Và để phán đoán xem có nhiều sheet được chọn hay không, ta có code:
Mã:
Sub Sample4()
    If ActiveWindow.SelectedSheets.Count > 1 Then
        MsgBox "Co nhieu sheet duoc chon nen khong thuc thi duoc"
    Else
        Worksheets.Add
    End If
End Sub
Nếu như cặn kẽ hơn, chúng ta muốn tìm hiểu nhiều sheet được chọn nhưng nó có liên tục hay là không, ta dùng code sau:
Mã:
Sub Sample5()
    Dim i As Long
    With ActiveWindow
        If .SelectedSheets.Count = 1 Then
            MsgBox "Chi co mot sheet duoc active"
        Else
            For i = 1 To .SelectedSheets.Count - 1
                If Not .SelectedSheets(i).Next Is .SelectedSheets(i + 1) Then
                    MsgBox "Nhieu sheet duoc chon va no khong lien tuc"
                    Exit Sub
                End If
            Next i
            MsgBox "Nhieu sheet duoc chon va no lien tuc"
        End If
    End With
End Sub
(Hết)
 
Top