Suceso con Evento Change en Excel

Perdón que moleste pero debo hacerte esta consulta

Estaba trazando un código (con F8) y al llegar a la siguiente línea:

Obra.Value = Sheets("Historico").Range("Q" & filx) que esta dentro del siguiente bloque:

NomCorto.Value = Sheets("Historico").Range("A" & filx)
TextBox7 = Sheets("Historico").Range("B" & filx)
Tipo.Value = Sheets("Historico").Range("C" & filx)
Deposito.Value = Sheets("Historico").Range("D" & filx)
envioventas = Sheets("Historico").Range("E" & filx)
Desde = Sheets("Historico").Range("F" & filx)
Hasta = Sheets("Historico").Range("G" & filx)
Alquiler = Sheets("Historico").Range("H" & filx)
Venta = Sheets("Historico").Range("I" & filx)
Vendedor.Value = Sheets("Historico").Range("J" & filx)
Usuario.Value = Sheets("Historico").Range("L" & filx)
Obra.Value = Sheets("Historico").Range("Q" & filx)
Empresa.Value = Sheets("Historico").Range("R" & filx)

El código salto automáticamente al Change del ComboBox "Obra" leyendo el siguiente bloque:

NomCorto.Value = Sheets("Historico").Range("A" & Obra.ListIndex + 2)
    TextBox7.Value = Sheets("Historico").Range("B" & Obra.ListIndex + 2)
    Tipo.Value = Sheets("Historico").Range("C" & Obra.ListIndex + 2)
    Deposito.Value = Sheets("Historico").Range("D" & Obra.ListIndex + 2)
    envioventas.Text = Sheets("Historico").Range("E" & Obra.ListIndex + 2)
    Desde.Text = Sheets("Historico").Range("F" & Obra.ListIndex + 2)
    Hasta.Text = Sheets("Historico").Range("G" & Obra.ListIndex + 2)
    Alquiler.Text = Sheets("Historico").Range("H" & Obra.ListIndex + 2)
    Venta.Text = Sheets("Historico").Range("I" & Obra.ListIndex + 2)
    Empresa.Value = Sheets("Historico").Range("R" & Obra.ListIndex + 2)

Luego, lee las mismas líneas pero con distinta variable y luego, me trae al Form valores que no coinciden

La pregunta es: ¿Cómo puedo quedarme dentro del evento que estoy analizando sin que el código me saque al Change, en este caso?

1 Respuesta

Respuesta
2

Como ya te diste cuenta, cuando actualizas el combo obra con esta línea:

obra.Value = Sheets("Historico").Range("Q" & filx)

Automáticamente va al código del evento:

Private Sub obra_Change()

Lo que hago en esos casos es poner una variable global como bandera, por ejemplo:

Declaras la variable "bandera" al principio de todo el código, en la sección (General):

Dim bandera

Cuando activas el userform, pones la bandera como apagada:

Private Sub UserForm_Activate()
    bandera = False
    'tú código
End Sub

Cuando ejecutas la modificación del combo, prendes la bandera y luego la apagas:

Private Sub CommandButton1_Click()
    'Tú código
    bandera = True
    obra.Value = Sheets("Historico").Range("Q" & filx)
    bandera = False
    'tú código
End Sub

Y por último en el evento change del combo preguntas por la bandera, si está prendida, entonces te sales:

Private Sub obra_Change()
    If bandera = True Then Exit Sub
    'tú código
End Sub

Se vería así:


sal u dos

La pregunta no admite más respuestas

Más respuestas relacionadas