Foros del Web » Soporte técnico » Ofimática »

tengo problema con esta macro

Estas en el tema de tengo problema con esta macro en el foro de Ofimática en Foros del Web. Tengo un excel con muchas hojas, en cada hoja me interesa una tabla que aparece y que tiene diferente cantidad de columnas y filas, pero ...
  #1 (permalink)  
Antiguo 07/10/2011, 07:39
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
tengo problema con esta macro

Tengo un excel con muchas hojas, en cada hoja me interesa una tabla que aparece y que tiene diferente cantidad de columnas y filas, pero todas comienzan en la "D9" de cada hoja.

Me interesa hacer un listado de el contenido de la tabla y el nombre de la hoja, lo hise de la siguiente manera.

Código vb:
Ver original
  1. hojas = Application.Sheets.Count - 4
  2.     b = 1
  3.     a = 0
  4.        
  5.     For i = 1 To hojas
  6.        
  7.         Sheets(i).Select
  8.         Range("D9").Select
  9.         Range(Selection, Selection.End(xlDown)).Select
  10.         Range(Selection, Selection.End(xlToRight)).Select
  11.         Selection.Copy
  12.        
  13.         Rw = Selection.Rows.Count
  14.        
  15.         Sheets("Hoja4").Select
  16.         Cells(b, 1).Select
  17.         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  18.             :=False, Transpose:=False
  19.        
  20.         b = b + a
  21.                
  22.         For a = 0 To Rw
  23.             Worksheets("Hoja4").Cells(b, 0).Value = Sheets(i).Name
  24.         Next a
  25.  
  26.     Next i

me da error 1004 en la Parte donde dice Cells(b,1).select en la linea 16

Alguna idea??, al programar solo pegar sin el resto del código no tengo problemas.
  #2 (permalink)  
Antiguo 07/10/2011, 08:02
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 16 años, 5 meses
Puntos: 69
Respuesta: tengo problema con esta macro

Prueba con poner Sheets("Hoja4").cells(b,1).select
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #3 (permalink)  
Antiguo 07/10/2011, 08:20
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: tengo problema con esta macro

si probe y con Worksheets("Hoja4") pero mismo error
  #4 (permalink)  
Antiguo 07/10/2011, 08:37
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: tengo problema con esta macro

Hise una modificacion, arreglando unos errores de logica y me cambio el error ahora es en la linea 24

Sheets("Hoja4").Cells(b, 1).Select

El error es por subindice fuera del intervalo (tipo 9)

La verdad que no veo nada de eso, de hecho aumente los valores



Código vb:
Ver original
  1. hojas = Application.Sheets.Count - 4
  2.     b = 1
  3.     a = 0
  4.     Dim Ficha As Integer
  5.        
  6.     For i = 1 To hojas
  7.        
  8.         Ficha = Sheets(i).Name
  9.         Sheets(i).Select
  10.         Range("D9").Select
  11.         Range(Selection, Selection.End(xlDown)).Select
  12.         Range(Selection, Selection.End(xlToRight)).Select
  13.         Selection.Copy
  14.        
  15.         Rw = Selection.Rows.Count
  16.        
  17.         Sheets("Hoja4").Select
  18.         Cells(b, 2).Select
  19.         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  20.             :=False, Transpose:=False
  21.                
  22.         For a = 1 To Rw
  23.             b = b + a
  24.             Sheets("Hoja4").Cells(b, 1).Select
  25.         Next a
  26.  
  27.     Next i
  #5 (permalink)  
Antiguo 07/10/2011, 09:16
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
De acuerdo Respuesta: tengo problema con esta macro

Hola! exorton.
El primer código mostrado -probablemente- lo tuvieses en el módulo de una hoja que NO era Hoja4, y de allí el error.

De todas formas ibas a tener problemas con:

Worksheets("Hoja4").Cells(b, 0)

pues no existe la fila "0".
_______________

El segundo código también es problemático en varias partes. Por ejemplo:

Dim Ficha As Integer (defines Ficha como un número entero)
Ficha = Sheets(i).Name (pero lo usas como un String)

Además no escribes en la columna A el nombre de la hoja de extracción.
_______________

Analiza esos detalles y analiza -también- una alternativa como:

Código PHP:
Sub ListadoDeTablas()
Dim i As IntegeractRow As Long

Application
.ScreenUpdating False

For 1 To Sheets.Count 4
  With Sheets
(i)
    
With .Range(.[d9], .Cells(.[d9].End(xlDown).Row, .[d9].End(xlToRight).Column))
      
actRow Sheets("Hoja4").Cells(Rows.Count"B").End(xlUp).Row
      
.Copy Sheets("Hoja4").Cells(actRow"B")
      
Sheets("Hoja4").Cells(actRow"A").Resize(.Rows.Count) = Sheets(i).Name
    End With
  End With
Next

Application
.ScreenUpdating True
End Sub 
Este código -lo ubiques donde lo ubiques- debería funcionar adecuadamente.

¿Comentas, por favor?
Saludos, Cacho R.
  #6 (permalink)  
Antiguo 07/10/2011, 11:46
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: tengo problema con esta macro

@mrocf Sos grande!!! Me funciono, pero necesito dos cosas mas.

1- Que tome desde la columna D asta la I, el .[d9].End(xlToRight).Column funciona con algunas hojas no con todas y solo necesito esas columanas, en las filas esta OK.

2.- que copie solo valores

usaste una programación que yo no conosia sabes de que tipo es?? donde puedo obtener mas info sobre esa manera de programar los macros??. Pero funciona muy bien.
  #7 (permalink)  
Antiguo 07/10/2011, 12:17
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: tengo problema con esta macro

ya lo hice a mi manera.

Código vb:
Ver original
  1. Application.ScreenUpdating = False
  2. hojas = Application.Sheets.Count - 5
  3.  
  4. Sheets("Hoja4").Range("B2").Select
  5.  
  6. For i = 1 To hojas
  7.     Sheets(i).Select
  8.     Range("D9").Select
  9.     Range(Selection, Selection.End(xlDown)).Select
  10.     Range(Selection, Selection.Cells(1, 7)).Select
  11.     Selection.Copy
  12.    
  13.     Rw = Selection.Rows.Count
  14.    
  15.     Sheets("Hoja4").Select
  16.     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  17.         :=False, Transpose:=False
  18.    
  19.    
  20.     For a = 1 To Rw
  21.         Selection.End(xlDown).Offset(a - Rw, -1).Value = Sheets(i).Name
  22.     Next a
  23.    
  24.     Selection.End(xlDown).Offset(1, 0).Select
  25. Next i
  26.  
  27. Application.ScreenUpdating = True
}

Tiene un tiempo de ejecución mucho mas rápido (son 216 hojas), en como 5 segundos entrega el resultado y creo que esta todo bien.

Gracias por el apoyo y @mrocf favor explícame tu código entiendo parte pero no todo y me gustaría aprender.

Etiquetas: macro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:09.