Trong File có 2 ThisWorkbook khi thực hiện code xoá sheet (1 người xem)

Liên hệ QC

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

minhtungph

None
Tham gia
18/9/13
Bài viết
198
Được thích
78
Code xóa Sheet mình viết như sau:
Mã:
Sub DelSheet()
        On Error GoTo thoat
        Sheet1.Activate
        Application.DisplayAlerts = False
        Worksheets.Add
        Sheet1.Delete
        ThisWorkbook.Save
        ThisWorkbook.Close
        Application.DisplayAlerts = True
thoat:
End Sub
Sau khi thực hiện xong thì có thêm 1 thisworkbook tên sheet1.
 

File đính kèm

Code xóa Sheet mình viết như sau:
Mã:
Sub DelSheet()
        On Error GoTo thoat
        Sheet1.Activate
        Application.DisplayAlerts = False
        Worksheets.Add
        Sheet1.Delete
        ThisWorkbook.Save
        ThisWorkbook.Close
        Application.DisplayAlerts = True
thoat:
End Sub
Sau khi thực hiện xong thì có thêm 1 thisworkbook tên sheet1.
Ý của bạn là xóa sheet xong sau đó tự động add thêm 1 sheet tên là "sheet1" ah nếu vậy bạn thử code này xem
Mã:
Sub macro1()


Application.DisplayAlerts = False


Worksheets("hello").Delete 'Đổi lại tên sheet cần xóa
With ThisWorkbook
On Error Resume Next
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "sheet1"
    End With


Application.DisplayAlerts = True
End Sub
 
Upvote 0
Ý của bạn là xóa sheet xong sau đó tự động add thêm 1 sheet tên là "sheet1" ah nếu vậy bạn thử code này xem
Mã:
Sub macro1()


Application.DisplayAlerts = False


Worksheets("hello").Delete 'Đổi lại tên sheet cần xóa
With ThisWorkbook
On Error Resume Next
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "sheet1"
    End With


Application.DisplayAlerts = True
End Sub
Nếu bạn để tên sheet như thế thì người dùng có thể đổi tên nên mình muốn dùng name để xoá sheet, nhưng dùng name thì lại bị lỗi trên
 
Upvote 0
Nếu bạn để tên sheet như thế thì người dùng có thể đổi tên nên mình muốn dùng name để xoá sheet, nhưng dùng name thì lại bị lỗi trên

như vậy thì bạn đổi lại
Worksheets("hello").Delete ---> sheet2.delete "sheet2 là tên mặc định đi kèm khi tạo sheet mới
 
Upvote 0
như vậy bản chất vẫn giống code ban đầu của mình mà
?? Bạn vui lòng rõ hơn ý của bạn được ko mình thực sự ko hiểu ý bạn muốn gì?
Bạn yêu cầu xóa code xóa sheet sau khi xóa sheet xong thì sẽ tự động add thêm 1 sheet có tên là sheet 1 thì mình viết rồi còn gì ?
còn nếu bạn ko muốn tự động add thêm sheet nữa thì bỏ code nay đi
With ThisWorkbook
On Error Resume Next
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "sheet1"
End With
 
Upvote 0
Code xóa Sheet mình viết như sau:

Sau khi thực hiện xong thì có thêm 1 thisworkbook tên sheet1.

Hiện tượng này xảy ra khi có lỗi: File đang thực thi lệnh nào đó thì máy tính tắt đột ngột/ đóng file cưỡng bức...
Còn code của bạn sửa bằng cách gán Thisworkbook đầu tiên vào 1 biến nào đó, để lần sau gọi thisworkbook lúc đầu thì sẽ gọi qua biến lúc trước đã gán.
Mã:
Dim book1 As Workbook
Set book1 = ThisWorkbook
book1.close
 
Upvote 0
Hiện tượng này xảy ra khi có lỗi: File đang thực thi lệnh nào đó thì máy tính tắt đột ngột/ đóng file cưỡng bức...
Còn code của bạn sửa bằng cách gán Thisworkbook đầu tiên vào 1 biến nào đó, để lần sau gọi thisworkbook lúc đầu thì sẽ gọi qua biến lúc trước đã gán.
Mã:
Dim book1 As Workbook
Set book1 = ThisWorkbook
book1.close

Khi thực thi code mình đã activate tử nếu sheet đã bị xoá thì sẽ không thực hiện lệnh, nếu chưa xoá thì sẽ add thêm sheet mới đề phòng workbook chỉ có 1 sheet, sau đó xoá sheet1, lưu workbook và đóng lại thì đâu có lỗi gì đâu nhỉ
 
Upvote 0
Sub DelSheet()
On Error GoTo thoat
Sheet1.Activate
Application.DisplayAlerts = False
Worksheets.Add
ThisWorkbook.Worksheets(Sheet1.Name).Delete
ThisWorkbook.Save
ThisWorkbook.Close
Application.DisplayAlerts = True
thoat:
End Sub
 
Upvote 0
Sub DelSheet()
On Error GoTo thoat
Sheet1.Activate
Application.DisplayAlerts = False
Worksheets.Add
ThisWorkbook.Worksheets(Sheet1.Name).Delete
ThisWorkbook.Save
ThisWorkbook.Close
Application.DisplayAlerts = True
thoat:
End Sub
Đây là kết quả sau khi chạy code xong

Capture.JPG















Tóm lại lỗi vẫn còn đó!
Lỗi này lạ thật, đã thử rất nhiều cách mà không giải quyết được +-+-+-+
 
Upvote 0
Đây là kết quả sau khi chạy code xong

Tóm lại lỗi vẫn còn đó!
Lỗi này lạ thật, đã thử rất nhiều cách mà không giải quyết được +-+-+-+

Em tìm ra lỗi như sau:

1: Sheet1.Delete
2: ThisWorkbook.Save 'Đến dòng 3 thì Excel chưa hề cập nhật lệnh này nên sẽ xảy ra lỗi như em đã nêu ở bài #7.
3: ThisWorkbook.Close

Nếu dừng ở hết dòng 2 rồi đi làm việc khác thì Excel mới cập nhật lệnh đó => Không có lỗi.

Phương án em làm như sau:
Mã:
Sub DelSheet()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim book1 As Workbook, sh0 As Worksheet
Set sh0 = Sheet1
Set book1 = ThisWorkbook
Worksheets.Add
sh0.Delete 'Xay ra loi sau khi delete sheet1 roi close book1 ma Excel chua duoc cap nhat lenh delete sheet1
book1.Save
Application.OnTime Now + TimeValue("00:00:01"), "cls"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Sub Cls()
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
Chạy sub DelSheet cho kết quả ngon lành.
 
Upvote 0
Mời các bạn tham khảo code tạo ra lỗi này
1> Mở 1 file Excel trằng, chèn code dưới đây vào Sheet1
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox "Hello"
End Sub
Test sự kiện SelectionChange, đương nhiên không có vấn đề gì rồi
2> Tiếp theo, chèn 1 Module với code:
Mã:
Function MagicWs(wks As Worksheet)
  Set wks = Nothing
End Function
Sub Main()
  MagicWs Sheet1
End Sub
Bấm Alt + F8, chọn Sub Main để chạy rồi test lại sự kiện SelectionChange, các bạn sẽ thấy nó.. tịt
Quay trở vào cửa sổ lập trình, thấy xuất hiện thêm 1 sheet nữa
Giờ nếu đóng và lưu file thì mọi chuyện rắc rối sẽ bắt đầu. Ngay khi mở file lại lần 2 sẽ thấy biểu tượng Sheet1 bị biến đổi thành.. con ma
Vô lý quá!
 

File đính kèm

Upvote 0
Upvote 0
Em thấy khi bỏ cái ThisWorkbook.Close đi thì mọi chuyện trở lại bình thường.
 
Upvote 0
Thực ra là nó đã bị xóa. nó tồn tại dưới dạng một workbook. nếu tương tác với nó thì sẽ bị báo lỗi.
 
Upvote 0
cho em hỏi sheet đã bị xóa thì có thể khôi phục lại nó đuược không ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom