Problema con Macros Excel

Chaveliado

New Member
Joined
Nov 5, 2009
Messages
6
Tengo un problema con esta macro, no se ejecuta bien, unicamente hace lo que quiero si la separo en 2 partes quisiera que me ayudaran, aqui les envio los codigos;

Aqui estan las 2 macros, estan separadas porque solo asi funcionan bien lo que quiero es que al unirlas ejecuten lo mismo. Gracias


Sub pasouno()
'
' pasouno Macro
' Macro recorded 17/04/2008 by CSF
'
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Range("A1").Select
Wend
Application.MoveAfterReturn = False

ActiveCell.Offset(0, 0).Select
Application.SendKeys ("%=~")
'
End Sub



Sub paso2()
'
' pruebaaaaaaaaaaaaa Macro
' Macro recorded 17/04/2008 by CSF


ActiveCell.Offset(0, 0).Select
ActiveCell.Copy
ActiveCell.Offset(-1, 1).Select

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveCell.Offset(0, -1).Select
ActiveCell.Offset(1, 0).Select
Selection.ClearContents
ActiveCell.Offset(1, 0).Select
Application.MoveAfterReturn = True
'
End Sub
 

Excel Facts

Who is Mr Spreadsheet?
Author John Walkenbach was Mr Spreadsheet until his retirement in June 2019.
Bienvenido a MrExcel, Chaveliado,

Usted necesita una sola linea para hacer lo que usted está tratando de hacer. Favor sepa que funciona exactamente como lo que usted puso, o sea si no haya una celda con un valor debajo de la celda activa el macro brincará hasta la última fila de la hoja.
Code:
Sub foo()
    ActiveCell.End(xlDown).Offset(, 1).Value = Application.WorksheetFunction.Sum(Range(ActiveCell, ActiveCell.End(xlDown)))
End Sub
 
Last edited:
Upvote 0
:) Hola, me sirvio de mucho gracias, solo que ahora le he agregado lo siguiente para que la macro siga sumando en una lista de precios, lo que quiero es que si la celda activa en que queda la macro esta vacia ya no se siga ejecutando.



ActiveCell.End(xlDown).Offset(0, 1).Value = Application.WorksheetFunction.Sum(Range(ActiveCell, ActiveCell.End(xlDown)))
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Range("A1").Select
WendWhile ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
ActiveCell.Offset(1, 0).Select
 
Upvote 0
Perdone por haber tardado tanto en responder. Ha sido un mes de trabajar de 80 a 96 horas semanalmente.

El código arriba no es un bucle. Mejor proveer una muestra de sus datos y trater de mostrar o explicar qué es lo que quiere hacer.
 
Upvote 0
Hola, aqui esta una muestra

Producto Precio

Producto x $5.10 *** La macro debe estar en el primer valor de 5.10 sumar el
producto x $5.15 *** bloque de producto x, y el resultado colocarlo a la derecha
producto x $25.5 (suma)<-----------exactamente aqui

producto y $20.2 ***<--------y luego colocarse en $20.2 y que realize el mismo
producto y $85.2 ****proceso anterior, y asi sucesivamente y que se
producto y $35.20 ***detenga cuando no encuentre nada más que sumar.
producto y $35.25
producto y $3.10

producto z $8.10
producto z $50.20
producto z $8.10
producto z $25.3

Esta lista es mucho mas grande y con mas productos....
 
Last edited:
Upvote 0
Todavía no es necesario usar un bucle. Parece probable que usted podría usar Subtotales.

Code:
Sub UsandoSubtotal()
    '// si producto no está en la primera columna habrá que cambiar
    '// ese 1 en GroupBy al número de la columna de productos.  Y si los
    '// precios no están en la segunda, habrá que cambiar la matrix para
    '// TotalList
    ActiveSheet.UsedRange.Subtotal GroupBy:=1, _
                                   Function:=xlSum, _
                                   TotalList:=Array(2), _
                                   Replace:=True, _
                                   PageBreaks:=False, _
                                   SummaryBelowData:=True
End Sub
 
Upvote 0
Ya lo e intentado con subtotales, pero el problema es que en el nombre del producto van medidas u otras especificaciones, entonces se tiene que hacer manual la separacion por bloques de un producto especifico, que lo único que cambia son medidas o cosas asi, por ejemplo:

producto y CAL.80 30"X40"
producto y CAL 0.030 T.30 X 40"
producto y C-18 T.30 X 40"

En subtotales dividiria estos materiales, pero sigue siendo un producto Y solo que con otras especificaciones.
 
Upvote 0
Para que sepa, no soy el tipo de MVP que da de comer con cuchara al menos que usted pone una foto de usted en pañal con sonajero. Enseño más que regalo. Si usted está dispuesto hacer el trabajo, estoy dispuesto servir de guía.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>
Bueno, ya me convenció usar un bucle. Primer paso es identificar el rango donde el bucle debe de trabajar. Un truco que empecé usar a penas estaba aprendiendo VBA es pintar la celdas para asegurar que había identificado el rango correcto.
<o:p></o:p>
Paso uno: pinte tal rango. Algo como

Rich (BB code):
Sub PasoUno()
 
 
   Const c_strColDePrecios As String = "XFD"    '// cambie esta constante a la letra
                                                '// de la columna con los precios
 
   Dim rngColDePrecios As Excel.Range, lngUltimaFila As Long
 
 
 
   '// ponga el código necesario para identificar el rango buscado
   '// (estoy dejando esta tarea para usted.)
 
 
 
   '// ahora pintamos el rango amarillo para estar seguro que
   '// podemos escoger el rango correcto.
 
   rngColDePrecios.Interior.Color = vbYellow
 
End Sub
 
Last edited:
Upvote 0
Sub PasoUno()


Const c_strColDePrecios As String = "XFD" '// cambie esta constante a la letra
'// de la columna con los precios

Dim rngColDePrecios As Excel.Range, lngUltimaFila As Long



'// ponga el código necesario para identificar el rango buscado
'// (estoy dejando esta tarea para usted.)

Range("C11:D31").Select 'no estoy seguro si esta bien este rango, la macro intente ejecutarla y no se que hace.

'// ahora pintamos el rango amarillo para estar seguro que
'// podemos escoger el rango correcto.

rngColDePrecios.Interior.Color = vbYellow
End Sub
Gracias por la ayuda, solo aclaro que he leido un poco acerca de macros y me parece muy interesante y de mucha utilidad, pero desconozco mucho sobre las macros.
 
Upvote 0
Bueno, tomamos un paso atrás para algo más básico y empezamos allí.

¿Usted sabe que para asignar un valor a una variable se escribe algo como?
Code:
x = 5
lngLastRow = 65536
y = Range("A19").Value
Para asignar un valor a una variable de objeto hay que usar la palabra SET o sea:
Code:
SET wsPrimeraHoja = Sheets("Hoja1")
SET rngLastCell = Range("A5:15")
Usted puede "caminar" código con la tecla F8. Asi que arregle su pantalla donde se puede ver ambos Excel y el editor VBE. Ahora camine el siguiente (con una hoja nueva (desechable) siendo la activa):
Code:
Sub PinteVarios()
 
    Dim rngPinteme As Excel.Range
 
    Set rngPinteme = Range("A1:A5")
    rngPinteme.Interior.Color = vbBlue
 
    Set rngPinteme = Range("B7:C12")
    rngPinteme.Interior.Color = vbRed
 
    Set rngPinteme = Range("E2:G14")
    rngPinteme.Interior.Color = vbYellow
 
    Set rngPinteme = Range("A3:H11")
    rngPinteme.Interior.Color = vbGreen
 
    Cells.ClearFormats
End Sub
¿Ve cómo funciona? Ahora trate de escribir el código para rutina "PasoUno" pero usando las direcciones directas de las celdas donde quiere poner la fórmula y píntelas amarilla. Si son muchos, haga nada más las primeras cinco celdas.
 
Upvote 0

Forum statistics

Threads
1,223,958
Messages
6,175,636
Members
452,662
Latest member
Aman1997

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top