Diferencia al ejecutar macro paso a paso y de un botón

Desarrolle una macro para un actividad que tenemos en mi empresa. Resulta ser que cuando la ejecuto paso a paso si se desarrolla como debería, y cuando la ejecuto desde el botón que tengo asignada para dicha macro, no la ejecuta bien.

En específico lo que que no hace es cambiar el alto de un grupo de celdas:

Primero pongo todos los altos a una medida con:

Sheets("IMPRESION").Cells.RowHeight = 9.75

lo cual no tiene ningún problema, luego en otra parte del código pongo: 

Selection.RowHeight = 11.5

Esto porque necesito que ese grupo de celdas, tengan una altura diferente

¿Me podrían orientar?

1 Respuesta

Respuesta
1

[Ho la y bienvenido a TodoExpertos!

Pon aquí tu macro completa.

Utiliza el icono para inserta código.

Ejemplo:

sub prueba()
Sheets("IMPRESION").Cells.RowHeight = 9.75
end sub

Muchas gracias Dante, claro, te anexo el código completo:

Sub BGE()
Dim CMaterial As Integer
Dim Batches As Integer
Dim i As Integer
Dim w As Integer
w = 17
h = 7
ContadorBatches = 1
ContadorInterno = 0
Bolsa = 1
num_reng = 0
borrador = 0
Sheets("IMPRESION").Cells.RowHeight = 9.75
Fl = 0
Application.DisplayAlerts = False
Datosm = Worksheets("MAESTRA").Range("A1").CurrentRegion.Rows.Count - 2
For CMaterial = 1 To Datosm
num_etiquetas = 0
num_y = 0
Material = Worksheets("MAESTRA").Cells(CMaterial + 2, 3).Value
Peso = Worksheets("MAESTRA").Cells(CMaterial + 2, 4).Value
Batches = Worksheets("MAESTRA").Cells(CMaterial + 2, 6).Value
Cargas = Worksheets("MAESTRA").Cells(CMaterial + 2, 7).Value
Bat_eti = Worksheets("MAESTRA").Cells(CMaterial + 2, 6).Value
Batches = Batches * Cargas
renglones = Application.WorksheetFunction.Round(Batches / 2, 0)
Worksheets("ETIQUETA").Range("C11").Value = Material
Worksheets("ETIQUETA").Range("C13").Value = Peso
Worksheets("ETIQUETA").Range("G5").Value = Bat_eti
Worksheets("ETIQUETA").Range("B2:G14").Copy
For x = 0 To renglones - 1
For y = 0 To 1
If num_etiquetas < Bat_eti * Cargas Then
Select Case Cargas
Case 1
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).PasteSpecial Paste:=xlPasteAll
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).PasteSpecial Paste:=xlPasteColumnWidths
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).PasteSpecial Paste:=xlPasteFormats
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset((x * w) + 3, (y * h) + 3).Value = ContadorBatches
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset((x * w) + 10, (y * h) + 3).Value = Bolsa
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset((x * w) + 11, (y * h) + 3).Value = Cargas
ContadorBatches = ContadorBatches + 1
Case Is > 1
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).PasteSpecial Paste:=xlPasteAll
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).PasteSpecial Paste:=xlPasteColumnWidths
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).PasteSpecial Paste:=xlPasteFormats
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset((x * w) + 3, (y * h) + 3).Value = ContadorBatches
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset((x * w) + 10, (y * h) + 3).Value = Bolsa
Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset((x * w) + 11, (y * h) + 3).Value = Cargas
ContadorInterno = ContadorInterno + 1
If ContadorInterno = Cargas Then
ContadorBatches = ContadorBatches + 1
ContadorInterno = 0
Bolsa = 1
Else
Bolsa = Bolsa + 1
End If
End Select
num_etiquetas = num_etiquetas + 1
End If
Next y
Selection.Rows.RowHeight = 11.5
num_y = num_y + 1
Next x
Fl = Fl + num_y
Bolsa = 1
ContadorBatches = 1
ContadorInterno = 0
Next CMaterial
End Sub

Salio sin las sangrias pero bueno, creo ques es comprensible el código. Lo que hace es tomar datos de una tabla, generar un etiqueta, copiar la misma y pegarla varias veces para ir incrementando e imprimiendo los contadores. Por como está definido el tamaño de la etiqueta en el archivo que queremos usar, es necesario cambiar el alto de las filas en donde están las etiquetas. Gracias de antemano!

Después de esta línea:

Case 1

Agrega esta línea:

Set rng = Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).Resize(13, 6)

Después de esta línea:

Case Is > 1

Agrega esta línea:

Set rng = Worksheets("IMPRESION").Cells((Fl * w) + 2, 2).Offset(x * w, y * h).Resize(13, 6)

Cambia esta línea:

Selection.Rows.RowHeight = 11.5

Por esta:

rng.Rows.RowHeight = 11.5

Prueba y me comentas. Si es lo que necesitas, al final de mi respuesta hay un botón para valorar (es como darle like a mi respuesta) https://ecp.yusercontent.com/mail?url=https:%2F%2Fs.yimg.com%2Fnq%2Fyemoji_assets%2Flatest%2Fyemoji_assets%2F1f60e.png&t=1654037190&ymreqid=18f73179-9353-8498-1cfb-62001e01d600&sig=zOf.OdJs6iXhjgdciAAlFQ--~D.

Muchas gracias Dante, funcionó a la perfección.

Saludos

Te invito a SUSCRIBIRTE a mi canal de YouTube:

Excel y Macros

Ahí encontrarás más sobre Excel y Macros:

https://www.youtube.com/channel/UCs644-v3ti4SF7zE_bt_YXA 

Comparte los enlaces en tus redes sociales.

Gra cias y Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas