#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. Я не вижу, чтобы это определялось в коде? Вы установили его во время разработки?