Приведенный ниже код работает без проблем уже несколько месяцев, но по какой-то причине неожиданно сработал. Когда я шагаю по коду, он сразу же завершается после запуска метода .Copy
для копирования данных с одного листа на другой. Я не вижу никаких причин, почему это должно происходить. Кроме того, целевой лист на самом деле является рабочим листом Very Hidden
, и когда я пытаюсь установить его на Visible
, он выдает что-то вроде: Cannot set to the Visible property
. Но если я изменил его с Very Hidden
на Hidden
, а затем на Visible
, я смог изменить лист на видимый. Я не знаю, имеет ли он какое-либо отношение к тому, почему код внезапно заканчивается, но я предполагаю, что это может иметь значение.
Option Explicit
Sub Delete_Voucher()
Dim Total_rows_Entries As Long
Dim Delete_row As Variant
Dim Total_rows_Deleted As Long
Dim i As Long
ThisWorkbook.Worksheets("Entries").Unprotect Password:="test"
With ThisWorkbook.Worksheets("Entries").ListObjects("Entries").ListColumns(3).Range
Total_rows_Entries = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
InputDelete:
Delete_row = InputBox("Input the voucher number you want to delete.")
If StrPtr(Delete_row) = 0 Then
GoTo CancelInputDelete
ElseIf Delete_row = "" Then
MsgBox " Cannot be blank. Please enter a voucher number to delete."
GoTo InputDelete
ElseIf IsError(Application.Match(Val(Delete_row), ThisWorkbook.Worksheets("Entries").Range("A2:A" & Total_rows_Entries), 0)) = True Then
MsgBox "No such voucher number. Please Input the correct voucher number."
GoTo InputDelete
End If
EntriesStart:
With ThisWorkbook.Worksheets("Entries").ListObjects("Entries").ListColumns(3).Range
Total_rows_Entries = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
Total_rows_Deleted = ThisWorkbook.Worksheets("Deleted Vouchers").Range("C" & Rows.Count).End(xlUp).Row
For i = 2 To Total_rows_Entries
If ThisWorkbook.Worksheets("Entries").Cells(i, 1) = Val(Delete_row) Then
'The code between this line is executed successfully, but then immediately ends running the program afterwards
ThisWorkbook.Worksheets("Entries").Rows(i).EntireRow.Copy _
Destination:=ThisWorkbook.Worksheets("Deleted Vouchers").Cells(Total_rows_Deleted + 1, 1)
'The code between this line is executed successfully, but then immediately ends running the program afterwards
ThisWorkbook.Worksheets("Deleted Vouchers").Cells(Total_rows_Deleted + 1, 9) = Now()
ThisWorkbook.Worksheets("Entries").Rows(i).EntireRow.Delete Shift:=xlUp
GoTo EntriesStart
End If
Next i
MsgBox ("Voucher number: " & Delete_row & " has been successfully deleted.")
CancelInputDelete:
ThisWorkbook.Worksheets("Entries").Protect _
DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, Password:="test"
End Sub
Почему коды Excel всплывают, несмотря на то, что код не меняется? Я заметил, что у сотрудника было открыто около 10 рабочих книг, но я считаю, что код должен быть надежным, так как я использовал ThisWorkbook
при объявлении объектов. Я закрыл книгу и снова открыл ее, но возникает та же проблема. Однако на другом компьютере код работает без изменений в коде.
После того, как она закрыла все книги Excel, я хотел проверить, будет ли она работать, если будет сброшен весь экземпляр Excel, код работал нормально и никаких следов проблемы не было замечено. Я запутался, почему это произошло.