Comportamiento irregular de una macro dentro de un formulario
Mi consulta trata de encontrar una macro que actualice los nombres de los clientes en la hoja Pedidos, cuando se modifican en la hoja Clientes.
En la pregunta realizada anteriormente “Actualizar datos de una hoja a otra”, la rutina propuesta funciona perfectamente cuando se ejecuta sola, pero si la ejecuto después de introducir los datos desde un formulario, en todas las celdas pone: "ID no encontrado", cuando realmente sí está el ID. Sólo cuando se reinicia la PC o cuando se reinicia el libro sí funciona a veces, aunque no siempre ¿A qué se puede deber?. Les dejo las rutinas del formulario y la macro que copia los datos
Muchas gracias de antemano
Sub CopiarId()
'Por.Dante Amor
Set h1 = Sheets("Pedidos")
Set h2 = Sheets("Clientes")
For i = 2 To h1.Range("AB" & Rows.Count).End(xlUp).Row
If Not IsError(h1.Cells(i, "AB")) Then
Set B = h2.Columns("A").Find(h1.Cells(i, "AB"))
If Not B Is Nothing Then
h1.Cells(i, "B") = h2.Cells(B.Row, "B")
Else
h1.Cells(i, "B") = "Id no encontrado"
End If
Else
h1.Cells(i, "B") = "Celda con error"
End If
Next
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub CommandButton1_Click(): On Error Resume Next
If Not ListBox1.ListIndex = -1 Then
Range("B" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox1.Value
Range("C" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox2.Value
Range("D" & ListBox1.List(ListBox1.ListIndex, 18)) = ComboBox1.Value
Range("E" & ListBox1.List(ListBox1.ListIndex, 18)) = ComboBox2.Value
Range("F" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox3.Value
Range("G" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox7.Value
Range("H" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox4.Value
Range("I" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox5.Value
Range("J" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox6.Value
Range("K" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox8.Value
Range("L" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox9.Value
Range("M" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox13.Value
Range("N" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox10.Value
Range("O" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox11.Value
Range("P" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox12.Value
Range("Q" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox14.Value
Range("T" & ListBox1.List(ListBox1.ListIndex, 18)) = TextBox15.Value
Call CopiarId
End If
End Sub
Private Sub CommandButton5_Click()
Unload Me
Call introducir_DatosCl
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub
Private Sub ListBox1_Click()
Label1.Caption = ""
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""
TextBox7.Value = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""
TextBox10.Value = ""
TextBox11.Value = ""
TextBox12.Value = ""
TextBox13.Value = ""
TextBox14.Value = ""
TextBox15.Value = ""
If Not ListBox1.ListIndex = -1 Then
Label1.Caption = " " & ListBox1.List(ListBox1.ListIndex, 1)
TextBox1.Text = ListBox1.List(ListBox1.ListIndex, 1)
TextBox2.Text = ListBox1.List(ListBox1.ListIndex, 2)
ComboBox1.Text = ListBox1.List(ListBox1.ListIndex, 3)
ComboBox2.Text = ListBox1.List(ListBox1.ListIndex, 4)
TextBox3.Text = ListBox1.List(ListBox1.ListIndex, 5)
TextBox4.Text = ListBox1.List(ListBox1.ListIndex, 7)
TextBox5.Text = ListBox1.List(ListBox1.ListIndex, 8)
TextBox6.Text = ListBox1.List(ListBox1.ListIndex, 9)
TextBox7.Text = ListBox1.List(ListBox1.ListIndex, 6)
TextBox8.Text = ListBox1.List(ListBox1.ListIndex, 10)
TextBox9.Text = ListBox1.List(ListBox1.ListIndex, 11)
TextBox13.Text = ListBox1.List(ListBox1.ListIndex, 12)
TextBox10.Text = ListBox1.List(ListBox1.ListIndex, 13)
TextBox11.Text = ListBox1.List(ListBox1.ListIndex, 14)
TextBox12.Text = ListBox1.List(ListBox1.ListIndex, 15)
TextBox14.Text = ListBox1.List(ListBox1.ListIndex, 16)
TextBox15.Text = ListBox1.List(ListBox1.ListIndex, 19)
Rows(ListBox1.List(ListBox1.ListIndex, 18)).Select
Set rango = Worksheets("inicio").Range("Tabla4[Paises]")
For Each Celda In rango
ComboBox1.AddItem Celda.Value
Next Celda
Set rango = Worksheets("inicio").Range("Tabla5[Tipo de cliente]")
For Each Celda In rango
ComboBox2.AddItem Celda.Value
Next Celda
End If
End Sub
Private Sub UserForm_Activate()
ListBox1.List = Range("Tabla1").Value
For x = 0 To ListBox1.ListCount - 1: ListBox1.List(x, 18) = x + 2: Next
ListBox1.ListIndex = 0
ListBox1.SetFocus
End Sub