Почему мой код VBA завершается после выполнения метода .Copy в непредсказуемых экземплярах? - PullRequest
0 голосов
/ 03 апреля 2019

Приведенный ниже код работает без проблем уже несколько месяцев, но по какой-то причине неожиданно сработал. Когда я шагаю по коду, он сразу же завершается после запуска метода .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, код работал нормально и никаких следов проблемы не было замечено. Я запутался, почему это произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...