Adaptara macro a código fuente ya generado

Dante Amor buenas tardes, un gran favor, puedes ayudarme para adaptar la macro "If Not Intersect(Target, Range("A:A")) Is Nothing Then..." al código que ya tengo desarrollado.

Adjunto lo que he realizado pero no me funciona.

Te agradezco de antemano por la ayuda.

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
    Set h = Sheets("Report")
    Set r = h.Columns("A")
    Set b = r.Find(pedido, lookat:=xlWhole)
f = 2
Do Until h.Cells(f, 1) = ""
If h.Cells(f, 2) = "" Then GoTo siguiente
h.Cells(f, "H") = TextBox4
h.Cells(f, "I") = ComboBox1
siguiente:
f = f + 1
Loop
 If Not Intersect(Target, Range("A:A")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Target.value = "" Then Exit Sub
        num = WorksheetFunction.Max(Columns("B")) + 1
        Target.Offset(0, 1) = num
    End If
Unload Me
UserForm4.Show
Application.ScreenUpdating = True
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False
End Sub

1 Respuesta

Respuesta
1

Pero no entiendo qué quieres hacer.

Podrías explicar esto o explícame qué quieres hacer y te actualizo tu macro

Do Until h.Cells(f, 1) = ""
If h.Cells(f, 2) = "" Then GoTo siguiente
h.Cells(f, "H") = TextBox4
h.Cells(f, "I") = ComboBox1
siguiente:
f = f + 1
Loop

Adjunto explicación.

Cualquier consulta adicional, favor de hacérmela llegar.

Te agradezco por la ayuda.

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
    Set h = Sheets("Report")
    Set r = h.Columns("A")
    Set b = r.Find(pedido, lookat:=xlWhole)
'Ingreso datos a TextBox4 y ComboBox1 y los ingreso a las columnas H e I
'se ingresan siempre y cuando hayan valores en la columna B
f = 2
Do Until h.Cells(f, 1) = ""
If h.Cells(f, 2) = "" Then GoTo siguiente
h.Cells(f, "H") = TextBox4
h.Cells(f, "I") = ComboBox1
siguiente:
f = f + 1
Loop
'Luego tengo que ingresar automaticamente en la columna J, siempre y cuando hayan valores en la columna B
'primer momento: 1 si la celda está vacia
'segundo momento: sumar 1 al valor MAX de la columna J
If Not Intersect(Target, Range("A:A")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Target.value = "" Then Exit Sub
        num = WorksheetFunction.Max(Columns("J")) + 1
        Target.Offset(0, 1) = num
    End If
'oculto el formulario y abro el Formulario 4
Unload Me
UserForm4.Show
Application.ScreenUpdating = True
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False
End Sub

La verdad sigo sin entender tu macro

No sé para qué tienes esto si no ocupas el resultado de la búsqueda

    Set h = Sheets("Report")
    Set r = h.Columns("A")
    Set b = r.Find(pedido, lookat:=xlWhole)

Tampoco entiendo esto:

f = 2
Do Until h.Cells(f, 1) = ""
If h.Cells(f, 2) = "" Then GoTo siguiente
h.Cells(f, "H") = TextBox4
h.Cells(f, "I") = ComboBox1
siguiente:
f = f + 1
Loop

Pero si te funciona y lo que quieres es poner en esa fila en la columna J un número, entonces sería así:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
    Set h = Sheets("Report")
    Set r = h.Columns("A")
    Set b = r.Find(pedido, lookat:=xlWhole)
'Ingreso datos a TextBox4 y ComboBox1 y los ingreso a las columnas H e I
'se ingresan siempre y cuando hayan valores en la columna B
f = 2
Do Until h.Cells(f, 1) = ""
    If h.Cells(f, 2) = "" Then GoTo siguiente
    h.Cells(f, "H") = TextBox4
    h.Cells(f, "I") = ComboBox1
    '
    num = WorksheetFunction.Max(h.Columns("J")) + 1
    h.Cells(f, "J") = num
    '
siguiente:
    f = f + 1
Loop
'
Unload Me
UserForm4.Show
Application.ScreenUpdating = True
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False
End Sub

Si no es lo que necesitas, entonces olvida la macro y explícame con imágenes qué tienes y qué esperas de resultado, pero no me expliques con la macro, explica con tus propias palabras lo que necesitas, pero necesito ver una imagen para entender cómo tienes tus datos y qué quieres de resultado.


Si te funcionó el cambio, no olvides valorar.

Dante Amor, ante todo agradecerte la oportunidad que me brindas para ayudarme en este desarrollo. Adjunto la estructura de los UserForm y el Excel. La ultima macro que desarrollaste esta bien, porque ya ingresan los datos, sin embargo ingresa la numeración correlativa (1,2,3,4, etc.) y no es lo que necesito. Te explico lo que necesito:

1. Ingreso datos en el UserForm3 "Imprimir Etiqueta". Cuando presione el CommandButton1 "Generar etiqueta para caja", los datos que registro en el TextBox4 "Peso" y ComboBox1 "Tipo de caja" se tienen colocar en la columna H e I y colocar 1 en la columna J de la hoja "Report", todo esto siempre y cuando hayan datos en la columna B. Considerar que el peso, tipo de caja y el 1 son todos valores únicos. Por ejemplo; tengo diferentes pedidos con datos en la columna B y a todos ellos les pondré el mismo peso, tipo de caja y 1 en las columnas H, I y J respectivamente.

2. Luego me sale el UserForm4 "Despacho" y si presiono SI me sale el UserForm5 "Imprimir Guía de Remisión" corto las filas que tienen valores en la columna B de la hoja "Report" y lo pego en la hoja "Despacho", e imprimo y finalizo el proceso.(Con esto no hay problema).

3. Luego me sale el UserForm4 "Despacho" y si presiono NO debe de ocultar el UserForm4 y activar el UserForm2, para continuar con el ingreso de los pedidos. Cuando termine de ingresar más pedidos, presiono CommandButton4 "Cerrar caja" y me abre el UserForm3 y continuo con el proceso indicado en el punto 1. Considerando que ahora en la columna J ya no pondrá 1 sino 2.

4. De terminar el proceso y si vuelvo a presionar NO debería de salir 3 y así sucesivamente.

5. Finalmente, si presiono SI continuo con el proceso del punto 2 y empezaría con el 1 en la columna J de nuevo, para los siguientes pedidos.

No estoy entendiendo nada.

Vamos por partes:

Ingreso datos en el UserForm3 "Imprimir Etiqueta". Cuando presione el CommandButton1 "Generar etiqueta para caja", los datos que registro en el TextBox4 "Peso" y ComboBox1 "Tipo de caja" se tienen colocar en la columna H e I y colocar 1 en la columna J de la hoja "Report"

Quieres poner el textbox4 y el combo en las columnas H e I, ¿Pero de cuál fila?

En tu ejemplo la hoja está en blanco, solamente tienes datos en la columna A.

Para entender lo que quieres y es lo que ya te había pedido:

Pero necesito ver una imagen para entender cómo tienes tus datos y qué quieres de resultado.

Falta la imagen con el resultado esperado.


Entiendo que tienes muchos pasos y quieres resolverlos, pero si no te entiendo el primer paso, jamás podremos llegar al último paso.

Absuelvo: 

P: Quieres poner el textbox4 y el combo en las columnas H e I, ¿Pero de cuál fila?

R: De las filas que tengan datos en la columna B

Adjunto hoja con los datos esperados.

Agradezco nuevamente la paciencia.

Entonces, al presionar el botón,:

- La macro debe recorrer toda la columna A

- Si en la columna B es diferente de blanco, poner el textbox4 en la columna H y el combo en la columna I

- Lo que sigo sin entender es cómo llenar la columna J, cuándo poner 1, cuándo poner 2, cuándo poner 3.


Realiza la explicación con una secuencia de imágenes.

Paso 1. Hoja vacía

Paso 2. Cómo se llena la columna B

Paso 3. Qué datos pones en tu userform,

Paso 4. Qué datos quieres en la hoja

Paso 5. Cómo se llena la columna B

Paso 6. Qué datos pones en tu userform,

Paso 7. Qué datos quieres en la hoja

Paso 8. Cómo se llena la columna B

Paso 9. Qué datos pones en tu userform,

Paso 10. Qué datos quieres en la hoja

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas