Hỗ trợ: Code VBA viết trong Excel 2010 Pro, khi thực thi trên Excel LTSC 2021 thì có 1 lỗi

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

trinhduyvu

Thành viên mới
Tham gia
11/10/22
Bài viết
12
Được thích
2
Tôi có viết 1 đoạn mã sau để xoá dữ liệu:

Mã:
Option Explicit
Sub XoaData()
Dim i As Integer, j As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
  For i = 2 To 16
  Sheets(i).Range("D4:AA34").ClearContents
  Next i
  For j = 17 To 19
  Sheets(j).Range("B7:K670").ClearContents
  Next j
    With Sheets("TH-TX2")
    .Unprotect ("Q")
    .Range("$A$10:$AD$10").AutoFilter 1
    .Protect ("Q"), AllowFiltering:=True, _
    AllowFormattingColumns:=True, AllowFormattingRows:=True
    .Range("AH11:AH26,AJ11:AX14,AJ16:AX20,AJ22:AX24").ClearContents
    End With
    With Sheets("TH-BQN")
    .Unprotect ("Q")
    .Range("$A$10:$N$10").AutoFilter 1
    .Protect ("Q"), AllowFiltering:=True, _
    AllowFormattingColumns:=True, AllowFormattingRows:=True
    .Range("P11:P26,R11:W26").ClearContents
    End With
Sheets("MENU").Range("O2").ClearContents
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Tôi có tạo một Button để thực thi đoạn mã này.
Đoạn mã này nếu chạy trực tiếp từ cửa sổ Alt+F8 thì không có gì khác biệt ở hai phiên bản Excel.
Tuy nhiện, nếu chạy đoạn mã này bằng Button (assign marco) trên bản LTSC 2021 thì khi kết thúc mã lại bị chuyển đến Sheets("TH-TX2").
Tôi không hiểu vị sao lại xuất hiện lỗi này khi chạy mã trên bản LTST 2021. Nhờ mọi người xem có thể giải thích giúp tôi với ạ!
 

File đính kèm

  • Book1.xlsm
    41.1 KB · Đọc: 9
nếu chạy đoạn mã này bằng Button (assign marco) trên bản LTSC 2021 thì khi kết thúc mã lại bị chuyển đến Sheets("TH-TX2").
Tôi không hiểu vị sao lại xuất hiện lỗi này khi chạy mã trên bản LTST 2021. Nhờ mọi người xem có thể giải thích giúp tôi với ạ!
Còn tôi thì không hiểu "mã lại bị chuyển đến" là cái gì bị chuyển.
 
Upvote 0
Còn tôi thì không hiểu "mã lại bị chuyển đến" là cái gì bị chuyển.
Vâng, tức là cái Button thực thi mã (Button 1) tôi đặt ở Sheet1 (Sheets "MENU").
Nếu trong bản 2010 sau khi bấm Button 1, chạy xong mã thì vẫn ở lại Sheet1. Còn trong bản LTSC 2021 thì khi chạy xong mã sẽ chuyển đến Sheets("TH-TX2") là activesheet.
 
Upvote 0
Vâng, tức là cái Button thực thi mã (Button 1) tôi đặt ở Sheet1 (Sheets "MENU").
Nếu trong bản 2010 sau khi bấm Button 1, chạy xong mã thì vẫn ở lại Sheet1. Còn trong bản LTSC 2021 thì khi chạy xong mã sẽ chuyển đến Sheets("TH-TX2") là activesheet.
Ý chính tôi hỏi là "cái gì bị chuyển". Mã là 1 đoạn code thì không thể chuyển
 
Upvote 0
Vâng, tức là cái Button thực thi mã (Button 1) tôi đặt ở Sheet1 (Sheets "MENU").
Nếu trong bản 2010 sau khi bấm Button 1, chạy xong mã thì vẫn ở lại Sheet1. Còn trong bản LTSC 2021 thì khi chạy xong mã sẽ chuyển đến Sheets("TH-TX2") là activesheet.
Tạm thời thêm dòng này trươc End sub:

Sheets("MENU").Activate
 
Upvote 0
Ý chính tôi hỏi là "cái gì bị chuyển". Mã là 1 đoạn code thì không thể chuyển
Tức là hiện tại activesheet là Sheet1 -> bấm Button 1 -> mã thực thi xong -> activesheet là Sheets("TH-TX2").
Nghĩa là chạy xong mã thì tự thay đổi activesheet, trong khi đoạn mã không có dòng nào như vậy.

Tạm thời thêm dòng này trươc End sub:

Sheets("MENU").Activate
Để đổi phó thì tôi có sửa lại dòng gần cuối thành
Sheets("MENU").Select: ActiveSheet.Range("O2").ClearContents
Chỉ không hiểu sao trong bản 2021 lại lỗi như thế. Và cho hỏi đoạn code trên có thể viết gọn lại không nhỉ.
 
Lần chỉnh sửa cuối:
Upvote 0
Cách chính thống để trở về sheet trước khi chạy code là đầu sub save nó lại, trước khi xong sub thì lấy nó ra.
Tất cả các cách khác là chữa cháy.

đầu Sub
Set ActiveSheetSaved = ActiveSheet
cuối sub
ActiveSheetSaved.Activate
Nếu cần select ô nào thì cũng làm tương tự.
 
Upvote 0
Cách chính thống để trở về sheet trước khi chạy code là đầu sub save nó lại, trước khi xong sub thì lấy nó ra.
Tất cả các cách khác là chữa cháy.

đầu Sub
Set ActiveSheetSaved = ActiveSheet
cuối sub
ActiveSheetSaved.Activate
Nếu cần select ô nào thì cũng làm tương tự.
Nhưng tôi không hiểu là tại sao sau khi chạy mã xong thì activesheet là sheets("MENU"), trong khi đoạn mã không có select hay activate sheet nào cả.
Đoạn mã khi chạy Alt+F8 -> Run thì vẫn ở activesheet hiện tại. Nhưng khi chạy bằng button/shape (assign marco) thì lại tự động active sheets("MENU").
 
Upvote 0
Protect Worksheet vậy dính chưởng là đúng rồi.
 

File đính kèm

  • protect siêu xịn_.xlsm
    42.6 KB · Đọc: 11
Upvote 0
Giải pháp
Web KT

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

Back
Top Bottom