Macro no funciona todas las computadoras

Otra vez acudo a tu gran ayuda y conocimiento, no se si recuerdas mi primera macro la cual era la distribución de Estados partiendo de una BD y extendiéndose en todas las hojas dependiendo del nombre de la misma.

Algo curioso y que aun no eh podido resolver es lo siguiente también te lo mencione en esa pregunta pero finalice el tema, tratando de resolverlo por mi parte pero hasta ahora nada.

Te anexo la problematica que te plante y la solución que me hiciste llegar:

Porque la macro no me corre bien en todas las computadoras, solo en una, las tengo en las misma ruta en escritorio es el mismo archivo y se me hace muy raro, ¿alguna vez te ah asado esto? Todas las maquinas tienen office 2007 y el archivo esta en modo de compatibilidad 97-2003, lo que no me corre bien es que se salta me pone un dato si otro no, uno si otro no.

A lo cual me respondiste:

Si me ha pasado, una vez se solucionó cambiando la palabra sheets por Worksheets. Pruébalo.
La ruta de escritorio en cada máquina es diferente, generalmente tiene una carpeta con el nombre del usuario, te sugiero que cambies el archivo a una carpeta fija, por ejemplo: "C:\estados" y que en todas las máquinas tenga esta ruta.

Realize lo que me comentaste y resulto que: Ya cambie el archivo a una ruta fija, hice de nuevo el archivo solo le incluí la macro y cambie los nombres de sheets por Worsheets, y nada, no funciona. Lo raro que es en donde si me corre perfecto el archivo es mi
Lap, y precisamente no realize ahi el archivo, no se si tenga algo que ver, en la maquina donde lo realize es donde no me corre, hice pruebas en otras maquinas y tampoco.

Anexo archivo.

Gracias!

https://www.dropbox.com/s/ablv5f6k291dnll/Distribuir%20por%20estado_PRUEBAS%282%29.xlsm

1 Respuesta

Respuesta
1

Hice una nueva macro, en esta te va a generar una hoja por cada sucursal, la macro está en el módulo11 y se llama "promotor"

Pruébala en las diferentes macros, si funciona habría que arreglarle los formatos, pero ya llevo un avance.

https://www.dropbox.com/s/mqgh1igzqgloubd/Distribuir%20por%20estado_PRUEBAS%20dam.xlsm

Saludos. Dam

Dam, buen dia!
Aun no logro entender como logras resolver mis dudas tan rapido y claro; eres tan bueno en esto de las macros. Pues te comento probe la macro y funciona perfecto, eh estado jugando con el codigo, pero para serte sincera entiendo partes y logica pero no se ni por donde comenzar para que me tome el formato ajustado como estaba en la anterior macro. Tampoco quiero que pienses que quiero que me resuelvas todo mi trabajo pero en esta ocacion esta macro se me ah complicado mucho, necesitare completamente de tu ayuda, creo que no soy tan buena para resolverla si me pudieras seguir ayudando apreciaria mucho esto.
Gracias.
Anexo Macro con el formato final de cada hoja.
Saludos.
https://www.dropbox.com/s/8xn234onb80jzfx/Distribuir%20por%20estado_PRUEBAS.xlsm

Te mando la versión 4

https://www.dropbox.com/s/vhibm6dpqmaet6a/Distribuir%20por%20estado_PRUEBAS4.xlsm

Prueba y me comentas qué le faltaría

Saludos. Dam

El código esta mas que perfecto, quedo totalmente modificado, vaya que existen diferentes maneras de hacer una misma macro pero con diferentes instrucciones: Solo como final, por ejemplo si yo quiero que tome mas columnas es decir que en la hoja extraiga la columna B en la columna C de la hoja formato, como seria?? Introduje estas lineas para hacer pruebas y en efecto si me extraer la información pero a partir del segundo dato que encuentre...

For i = ini To h1.Range("A" & Rows.Count).End(xlUp).Row
Application.StatusBar = "Procesando registro: " & i & " de " & ufila
promnvo = Cells(i, "E")
If promant = promnvo Then
'h2.Select
h2.Rows(j + 1).Insert Shift:=xlDown
h2.Cells(j, "B").Value = h1.Cells(i, "A").Value
h2.Cells(j, "C").Value = h1.Cells(i, "B").Value ' parte que agregue
h2.Cells(j, "D").Value = h1.Cells(i, "C").Value ' parte que agregue
h2.Cells(j, "E").Value = h1.Cells(i, "D").Value ' parte que agregue
j = j + 1
'h1.Select
Else

Tenia pensando hacer también un buscarv pero no se si sea conveniente de esta forma, o extraer los datos directamente, puesto que existe una condición a partir de la columna F, el cual tiene una formula asi:

=SI($C16>=$J$34,"",BUSCARV($B16,ACUMULADO!$A:$MA,265,FALSO))

Y con la grabadora de macro:

 ActiveCell.FormulaR1C1 = ""
 Range("F15").Select
 ActiveCell.FormulaR1C1 = _
 "=IF(RC3>=R34C10,"""",VLOOKUP(RC2,ACUMULADO!C1:C339,265,FALSE))"
 Range("F16").Select

No se que seria mas correcto, ya que conforme avanzan las columnas se tiene el buscarv mas un IF referenciandose a celdas ocultas donde se tienen los datos para poder hacer la comparacion.

SAludos y nuevamente gracias por tu gran atención.

Para agrega más columnas tienes que poner la instrucción en dos lados de la macro

If promant = promnvo Then
'h2.Select
h2.Rows(j + 1).Insert Shift:=xlDown
h2.Cells(j, "B") = h1.Cells(i, "A")
h2.Cells(j, "C") = h1.Cells(i, "B") 'ESTA ES UNA PARTE
j = j + 1
'h1.Select
Else
h2.Select
Rows(j + 1 & ":" & j + 2).Copy
Rows(j - 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
h2.Rows(j & ":" & j + 1).Delete Shift:=xlUp
Sheets("formato").Copy After:=Sheets(Sheets.Count)
Set h2 = ActiveSheet
h2.Name = Left(promnvo, 30)
j = 15
h1.Select
h2.Rows(j + 1).Insert Shift:=xlDown
h2.Cells(j, "B") = h1.Cells(i, "A")
H2.Cells(j, "C") = h1. Cells(i, "B") 'ESTA ES LA OTRA PARTE

Para las fórmulas Pon las fórmulas en el formato y cuando se copie el formato se lleverá las fórmulas
Prueba y me comentas
Saludos. Dam

Uff Dam no sabes lo agradecida que estoy contigo, la verdad me haz resuelto todas mis dudas, ya hice las pruebas y me funciona de maravillas, solo un pequeño detalle, en la hoja formato puse las formulas, pero lo único que hace es replicarlas en las siguientes hojas, solo en la fila 15, pero no se ejecuta, no se a que se deba esto, si le tengo que poner dentro del código o como seria?

Muchas gracias.

Saludos.

Dam eh detectado el problema, del porque no se ejecuta, te comento en mi hoja formato al final de la forma impresión, tengo una fecha la cual se compara con la celda C15, pero no siempre esta formula es la misma ya que por ejemplo en la hoja ACAMBARO la linea de impresión termina en la fila 33, en ACAPULCO en la 37, y asi sucesivamente es decir que en mi hoja formato tengo que:

=SI($C16>=$J$32,"",BUSCARV($B16,ACUMULADO!$A:$MA,265,FALSO))' donde J32 es donde
 tengo el valor a comparar

Si te fijas mi hoja formato tiene la linea de impresión hasta el 31 y mi valor a comparar esta en J32, como se podría hacer para que esta formula cambie dependiendo de donde termine la linea o no se... por ahora no se me ocurre nada...

Perdon por no fijarme bien en lo que hago y escribir precipitadamente pero los tiempos de trabajo me traen loca, bueno al final pude resolver que me funcione el buscarv, solo que se ejecute unicamente en la fila 15 de todas las hojas. No encuentro la forma de hacer que se ejecute en todas las filas que tienen infomacion de cada hoja. Si logro resolverlo por mi cuenta (que seria lo ideal) te estaria comunicando, sino pediria nuevamente de tu gran ayuda!
Saludos.

Perdón que te moleste tanto, tal vez esta ya es otra pregunta ya que mi problema quedo resuelto, pero no logro que funcione correcto, te explico cada celda tiene un formato condicional que si se cumple pues se pone en amarillo o rosa según el caso, el problema es que ya puse ese formato condicional, pero al correr la macro solo me la pone en toda la B15 al igual que el BUSCARV, pero el siguiente dato me lo trae sin el formato de la hoja principal, no se que este haciendo mal, que no logro que quede al 100% te envíe a tu correo la macro, ya que tengo problemas con mi dropbox espero me puedas seguir ayudando como lo has hecho hasta ahora.

Saludos cordiales y muchas gracias por tu tiempo y dedicación hacia mi persona.

Envío archivo corregido ya solucione lo del formato, pro en cuanto al formato condicional y buscarv solo se ejecuta en la fila 15 pero no se ejecuta en los demás.

https://www.dropbox.com/s/87cdvu143vup3kv/Distribuir%20por%20estado.xlsm

Te anexo una nueva macro, para copiar las fórmulas.

La fórmula que me enviaste tiene un error en mi versión 2003, porque solamente en 2003 hay 256 columnas y tú tienes más.

Con la nueva macro ya se copian las fórmulas prueba en tu excel y me comentas.

https://www.dropbox.com/s/1iit3veshmu0ucj/Distribuir%20por%20estado%20dam.xlsm

Saludos. Dam

Hola Dam! Gracias por probar mi macro y seguir brindandome ese apoyo ya que esta macro me ha dado mucho trabajo, en efecto las formulas ya las ejecuta en todas las filas, pero ahora el problema es que si solo existe un solo renglon en la hoja, marca error en el else... "Se ha producido el error '1004' en tiempo de ejecucion." Este error es porque no esta pegando nada, ya que no existe informacion que extraer, de que forma lo podria solucionar, ya que eh estado haciendo pruebas y hace otras cosas que no le indico.
Error en el metodo PasteSpecial de la clase Range.
For i = ini + 1 To h1.Range("A" & Rows.Count).End(xlUp).Row
Application.StatusBar = "Procesando registro: " & i & " de " & ufila
promnvo = Cells(i, "F")
If promant = promnvo Then
h2.Select
h2.Rows(j).Copy
h2.Rows(j + 1).Insert Shift:=xlDown
j = j + 1
Call muevedatos(i, j)
h1.Select
Else
h2.Select
Rows(j + 1 & ":" & j + 2).Copy
Cells(j - 1, "A").Select
+++++++++++ AQUI MARCA EL ERROR++++++++++++++++++++++++++++++++++++++++
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
---------------------------------------------------------------------
h2.Rows(j + 1 & ":" & j + 2).Delete Shift:=xlUp
Sheets("formato").Copy After:=Sheets(Sheets.Count)
Set h2 = ActiveSheet
h2.Name = Left(promnvo, 30)
j = 15
h1.Select
Call muevedatos(i, j)
End If
promant = promnvo
Next
Saludos y muchas gracias por tomarte el tiempo de seguir ayudandome..

Dam!

Si por ejemplo quito el j = j + 1 que esta en el ciclo for, y lo pongo al final de sub muevedatos(i,j) cuando solo tengo un dato de un estado me hace las cosas correctas, pero la formula solo me la corre en toda la fila 15, si dejo el contador en el ciclo for y también en la parte del sub muevedatos, me deja un espacio en blanco entre cada dato.

Saludos.

Siguiendo con la macro se me ocurrió hacer algo asi, para poder correr la formula al terminar de hacer la busqueda de los datos, obvio siguiendo el concepto de quitar del ciclo for el acumulador y ponerlo dentro del sub muevadatos para que me muestre el dato cuando solo tenga uno. Pero no se que paso este haciendo mal, je je...

Sub formula()
Dim Celdas As Range, x As Integer
 x = 15
For i = 3 To Sheets.Count
 Sheets(i).Select
 If ActiveSheet.Name <> "ACUMULADOresp1" And ActiveSheet.Name <> "formato" And ActiveSheet.Name <> "ACUMULADOresp" Then
 For Each Celdas In ActiveSheet
 Celda = ActiveCell
 ActiveCell.FormulaR1C1 = _
 "=IF(RC3>=R33C10,"""",VLOOKUP(RC2,ACUMULADOresp!C1:C389,x,FALSE))"
 x = x + 1
 Next Celda
 Else
 'no hagas nada
 End If
 Next
End Sub

Te anexo un archivo para cuando hay un solo renglón en la hoja.

https://www.dropbox.com/s/rqq790c764vwb4j/Distribuir%20por%20estado%20dam2.xlsm

Saludos. Dam

Mas que darte las gracias es felicitarte por tu gran trabajo y tu paciencia para ayudar a las personas como yo, que no saben tanto de macros pero le hacen la lucha.
Mil gracias DAM! quedo mas que complacida con tu respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas