Когда я удаляю строку, VBA переходит от модулей к коду объектов Excel

#excel #vba #excel-formula #delete-row

Вопрос:

У меня есть этот код, в котором я выполняю некоторую проверку, чтобы удалить элементы в таблице в соответствии с их нумерацией. При отладке кода всякий раз, когда он достигает критической строки (показано ниже), он переходит к соответствующему коду объектов Excel этого листа (показано еще ниже). Я уже протестировал его размещение в разных местах кода и использование Application.Enableevents = false , но это не сработало.

Есть какие-нибудь предложения?

Первый Код:

 Sub deleta_linhas()    
    Dim linha As Integer, coluna As Integer
    Dim n_item As Integer, n_prod As Integer
    Dim soma As Integer, linha_selecionada As Integer
    linha_selecionada = ActiveCell.Row
    Dim linha_atual(1 To 2) As Integer, next_line(1 To 2) As Integer, line_before(1 To 2) As Integer
    Dim i As Integer
    i = 0
    Dim novos_numeros As String

    ' Condição 1 em que há apenas 1.1 e mais nada
    If IsEmpty(Cells(36, 1)) = True Then
        ActiveCell.EntireRow.Delete
        Range("B5").Value = 1
        Range("B6").Value = 1
        Range("B7").Value = 0
        Range("B8").Value = 35
    Else
        ' Condição 2 em que há 1.1, 1.2 e mais ou 1.1, 2.1 e mais
        linha_atual(1) = Mid(Cells(linha_selecionada, 1), 1, 1)
        linha_atual(2) = Mid(Cells(linha_selecionada, 1), 5, 1)
        next_line(1) = Mid(Cells(linha_selecionada   1, 1), 1, 1)
        next_line(2) = Mid(Cells(linha_selecionada   1, 1), 5, 1)
        line_before(1) = Mid(Cells(linha_selecionada - 1, 1), 1, 1)
        line_before(2) = Mid(Cells(linha_selecionada - 1, 1), 5, 1)
    
        If linha_atual(1) = next_line(1) = False And linha_atual(2) = next_line(2) Then
            Selection.EntireRow.Delete                   '(THIS IS WHERE IT JUMPS TO EXCEL OBJECTS)
            Range("B8").Value = Range("B8").Value - 1
            Range("B5").Value = Range("B5").Value - 1

            While IsEmpty(Cells(linha_selecionada   i, 1)) = False
                n_item = Mid(Cells(linha_selecionada   1, 1), 1, 1) - 1
                novos_numeros = n_item amp; " . 1"
                Cells(linha_selecionada   1, 1).Value = novos_numeros
                i = i   1
            Wend
        End If
    End If
    
    linha = 36
    coluna = 9
    soma = 0
    Selection.EntireRow.Delete  
 
    While IsEmpty(Cells(linha, coluna)) = False
        soma = soma   Cells(linha, coluna).Value
        linha = linha   1
    Wend

    linha = linha   1
    Cells(linha, coluna).Value = soma   
End Sub
 

Код в объектах Excel (в основном из кнопок со списком)

 Private Sub ComboBox1_Change()    
    If ComboBox1.Value = "Fabricação" Then
        Rows("41:52").Select
        Selection.EntireRow.Hidden = True
        Range("B28").Select
        Range("B11").Value = "Fabricação"
    End If

    If ComboBox1.Value = "Nacionalização" Then
        Rows("41:52").Select
        Selection.EntireRow.Hidden = False
        Range("B28").Select
        Range("B11").Value = "Nacionalização"
    End If

    If ComboBox1.Value = "Projeto" Then
        Rows("41:52").Select
        Selection.EntireRow.Hidden = False
        Range("B28").Select
        Range("B11").Value = "Projeto"
    End If

    If ComboBox1.Value = "Manutenção" Then
        Rows("41:52").Select
        Selection.EntireRow.Hidden = False
        Range("B28").Select
        Range("B11").Value = "Manutenção"
    End If

    If ComboBox1.Value = "Industrialização" Then
        Rows("41:52").Select
        Selection.EntireRow.Hidden = False
        Range("B28").Select
        Range("B11").Value = "Industrialização"
    End If
End Sub
 
 ' Lógicas dos tratamentos
Private Sub OptionButton2_Click()
    If OptionButton2.Value = True Then
        Range("B10").Value = "Tempera"
    End If
End Sub

Private Sub OptionButton1_Click()
    If OptionButton1.Value = True Then
        Range("B10").Value = "Nitretação"
    End If
End Sub

Private Sub OptionButton3_Click()
    If OptionButton3.Value = True Then
        Range("B10").Value = "Cementação"
    End If
End Sub

Private Sub OptionButton4_Click()
    If OptionButton4.Value = True Then
        Range("B10").Value = "---"
    End If
End Sub
' FIM
 

Комментарии:

1. При отладке какое событие запускается?

2. Вы установили RowSource для выпадающего списка диапазон Excel?

3. @SamuelEverson когда он запускает строку «удалить строку», она переходит от кода модуля к коду, который находится в объектах Excel, коду, который прикреплен к выпадающему списку.

4. @Siddharthout да источник строк определен в ячейках над строкой, которую я хочу удалить. Его источником являются 5 ячеек в прямой колонке.

5. Я не вижу, чтобы это определялось в коде? Вы установили его во время разработки?