Error en una macro
Tengo un libro de excel con varias hojas desde la 1 hasta la 300, donde cada hoja de ese libro es un cliente, mi idea es reunir algunos datos de ese cliente y consolidarlos en una hoja, para ello me ayudaron a hacer esta macro, pero hasta ahora nadie sabe donde esta el error, me dice que falta definir sub oo function, yo uso excel 2002, podra ser algo con la version de excel?. Muchas gracias a quien me pueda ayudar, saludos, Maria Ines:
La macro es esta:
Private iClienteIndex As Integer
Const sHomeSheet = "Sheet1"
Sub ConsolidandoDatos()
Dim iSheetITem As Integer
Dim iActiveSheet As Integer
iActiveSheet = Worksheets(sHomeSheet).Index
iClienteIndex = 0
For iSheetITem = 1 To ActiveWorkbook.Sheets.Count
If iActiveSheet <> iSheetITem Then
iClienteIndex = iClienteIndex + 1
sNombre = ActiveWorkbook.Sheets.Item(iSheetITem).Range("A1").Value
sZona = ActiveWorkbook.Sheets.Item(iSheetITem).Range("B1").Value
sCompania = ActiveWorkbook.Sheets.Item(iSheetITem).Range("C1").Value
sProducto = ActiveWorkbook.Sheets.Item(iSheetITem).Range("D1").Value
Call DatosPorCliente(iSheetITem, sNombre, sZona, sCompania, sProducto)
End If
Next
MsgBox "Datos consolidados!!!
End Sub
Sub DatosPorCliente(ByVal iActiveSheet As Integer, ByVal sNombre As String,
ByVal sZona As String, ByVal sCompania As String, ByVal sProducto As String)
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
0).Value = sNombre
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
1).Value = sZona
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
2).Value = sCompania
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
3).Value = sProducto
End Sub
La macro es esta:
Private iClienteIndex As Integer
Const sHomeSheet = "Sheet1"
Sub ConsolidandoDatos()
Dim iSheetITem As Integer
Dim iActiveSheet As Integer
iActiveSheet = Worksheets(sHomeSheet).Index
iClienteIndex = 0
For iSheetITem = 1 To ActiveWorkbook.Sheets.Count
If iActiveSheet <> iSheetITem Then
iClienteIndex = iClienteIndex + 1
sNombre = ActiveWorkbook.Sheets.Item(iSheetITem).Range("A1").Value
sZona = ActiveWorkbook.Sheets.Item(iSheetITem).Range("B1").Value
sCompania = ActiveWorkbook.Sheets.Item(iSheetITem).Range("C1").Value
sProducto = ActiveWorkbook.Sheets.Item(iSheetITem).Range("D1").Value
Call DatosPorCliente(iSheetITem, sNombre, sZona, sCompania, sProducto)
End If
Next
MsgBox "Datos consolidados!!!
End Sub
Sub DatosPorCliente(ByVal iActiveSheet As Integer, ByVal sNombre As String,
ByVal sZona As String, ByVal sCompania As String, ByVal sProducto As String)
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
0).Value = sNombre
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
1).Value = sZona
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
2).Value = sCompania
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex,
3).Value = sProducto
End Sub
Hola Maria Ines....... Una pregunta antes que nada , eres de Marcos Paz (Buenos Aires Argentina) porque aca hay una familia mac luglin, que es medico de niños creo!!! ¿?
Bueno no importa..... aca esta la formula aparentemente resuelta..--- me parece que te va a escribir los datos de las 3000 hojas en la hoja uno y todos en el mismo rango, sis es asi escribi diciendolo
donde dice Const sHomeSheet As String = "HOJA1"
asegurate que seha la hoja (nombre ) de tu hoja 1
Suertte
Jose Oscar
Private iClienteIndex As Integer
Const sHomeSheet As String = "HOJA1"
Sub ConsolidandoDatos()
Dim iSheetITem As Integer
Dim iActiveSheet As Integer
iActiveSheet = Worksheets(sHomeSheet).Index
iClienteIndex = 0
For iSheetITem = 1 To ActiveWorkbook.Sheets.Count
If iActiveSheet <> iSheetITem Then
iClienteIndex = iClienteIndex + 1
sNombre = ActiveWorkbook.Sheets.Item(iSheetITem).Range("A1").Value
sZona = ActiveWorkbook.Sheets.Item(iSheetITem).Range("B1").Value
sCompania = ActiveWorkbook.Sheets.Item(iSheetITem).Range("C1").Value
sProducto = ActiveWorkbook.Sheets.Item(iSheetITem).Range("D1").Value
Call DatosPorCliente(iSheetITem, sNombre, sZona, sCompania, sProducto)
End If
Next
MsgBox "Datos consolidados!!!"
End Sub
Sub DatosPorCliente(ByVal iActiveSheet As Integer, ByVal sNombre As String, _
ByVal sZona As String, ByVal sCompania As String, ByVal sProducto As String)
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
0).Value = sNombre
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
1).Value = sZona
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
2).Value = sCompania
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
3).Value = sProducto
End Sub
Bueno no importa..... aca esta la formula aparentemente resuelta..--- me parece que te va a escribir los datos de las 3000 hojas en la hoja uno y todos en el mismo rango, sis es asi escribi diciendolo
donde dice Const sHomeSheet As String = "HOJA1"
asegurate que seha la hoja (nombre ) de tu hoja 1
Suertte
Jose Oscar
Private iClienteIndex As Integer
Const sHomeSheet As String = "HOJA1"
Sub ConsolidandoDatos()
Dim iSheetITem As Integer
Dim iActiveSheet As Integer
iActiveSheet = Worksheets(sHomeSheet).Index
iClienteIndex = 0
For iSheetITem = 1 To ActiveWorkbook.Sheets.Count
If iActiveSheet <> iSheetITem Then
iClienteIndex = iClienteIndex + 1
sNombre = ActiveWorkbook.Sheets.Item(iSheetITem).Range("A1").Value
sZona = ActiveWorkbook.Sheets.Item(iSheetITem).Range("B1").Value
sCompania = ActiveWorkbook.Sheets.Item(iSheetITem).Range("C1").Value
sProducto = ActiveWorkbook.Sheets.Item(iSheetITem).Range("D1").Value
Call DatosPorCliente(iSheetITem, sNombre, sZona, sCompania, sProducto)
End If
Next
MsgBox "Datos consolidados!!!"
End Sub
Sub DatosPorCliente(ByVal iActiveSheet As Integer, ByVal sNombre As String, _
ByVal sZona As String, ByVal sCompania As String, ByVal sProducto As String)
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
0).Value = sNombre
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
1).Value = sZona
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
2).Value = sCompania
ActiveWorkbook.Sheets.Item(sHomeSheet).Range("A5").Offset(iClienteIndex, _
3).Value = sProducto
End Sub
Hola, si el nombre de mi hoja esta correcta, no se donde esta el problema....
Salu2
Maria ines
Salu2
Maria ines
Hola maria Ines......
La macro anda de mil, el problema que tenia era que al copiarla y pegarla en la pagina web secortaban las linas ejemplo....
Sub commbiar(blabla as integer,
sisis as long,
parametro as variant,
y debia cortarse asi...
Sub commbiar(blabla as integer, _
sisis as long, _
parametro as variant, _
ese guin faltante _ te rompio el codigo....... de todas formas te voy a enviar la hoja excel donde la prove, sino llega sera porque tu correo esta mal scrito.
De todas formas en la pagina esta corregida , copiala y pegala. Si llega mi correo la vas a ver funcionar
Un saludo y espera que lo estoy mandando....
haaa!!! ya hay algo escrito en las hojas que te va traer a la primera hoja...
Jose Oscar
La macro anda de mil, el problema que tenia era que al copiarla y pegarla en la pagina web secortaban las linas ejemplo....
Sub commbiar(blabla as integer,
sisis as long,
parametro as variant,
y debia cortarse asi...
Sub commbiar(blabla as integer, _
sisis as long, _
parametro as variant, _
ese guin faltante _ te rompio el codigo....... de todas formas te voy a enviar la hoja excel donde la prove, sino llega sera porque tu correo esta mal scrito.
De todas formas en la pagina esta corregida , copiala y pegala. Si llega mi correo la vas a ver funcionar
Un saludo y espera que lo estoy mandando....
haaa!!! ya hay algo escrito en las hojas que te va traer a la primera hoja...
Jose Oscar
