RANGE.SELECT da Error...

02/02/2006 - 00:34 por Jairo Marin | Informe spam
Hola Grupo.

Tengo el siguiente fragmento de código, que grabé usando el grabador de
macros y lo modifiqué para darle generalidad en un ciclo... sin embargo
cuando llega a la línea Range("A3").Select, sale el error:

"Se ha producido el error no 1.004 en tiempo de ejecución ". "Error en el
método select de la clase range".

la variable filename está verificado y ha sico correctamente establecida...
pero no tengo ni idea por que no funciona...

El proposito es abrir un numero grande de archivos, extraer parte del
contenido y unirlo todo en uno solo.
Pero no funciona.

Alguien sabe por que?


Workbooks.Open FileName:=FileName
Windows(STitulo).Activate
Sheets("CLIENTES").Select
Range("A3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
NoFilas = Selection.Rows.Count

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
02/02/2006 - 10:27 | Informe spam
hola, Jairo !

... el siguiente fragmento de codigo, que grabe usando el grabador de macros y lo modifique para darle generalidad en un ciclo
... sin embargo cuando llega a la linea Range("A3").Select, sale el error:
"Se ha producido el error no 1.004 en tiempo de ejecucion ". "Error en el metodo select de la clase range"...
Workbooks.Open FileName:=FileName
Windows(STitulo).Activate
Sheets("CLIENTES").Select
Range("A3").Select [...]



[probablemente]... la hoja 'clientes' -> esta oculta -?-
lo que no 'se sabe'... es:
-> si la hoja esta en el 'FileName' [que se esta abriendo]
o... en el 'Windows(STitulo)' [que pudiera ser 'lo mismo'] -?-

comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Jairo Marin
03/02/2006 - 23:32 | Informe spam
La hoja esta visible pero esta en el filename que se esta abriendo...

Aunque ya lo solucione usando otro codigo que hacia lo mismo, yo estaba
intentando abrir un archivo en un ciclo, seleccionar (que es lo que me
genera error) y luego copiar y pegar en el otro archivo... pero lo solucioné
usando otra forma a continuación. (SIN EMBARGO AUN NO SE POR QUE EL CODIGO
ANTERIOR ME DABA ERROR)

Este es mi nuevo codigo...

Private Sub f_FileFound(FileName As String)
Dim NoFilas As Long
Dim SRuta As String
Dim STitulo As String
Dim i As Long, j As Long

SplitPath FileName, SRuta, STitulo

Workbooks.Open FileName:=FileName
'Windows(STitulo).Activate
For i = 3 To 65536
If Workbooks(STitulo).Worksheets("Clientes").Cells(i, 1) <> "" Then
Workbooks("Macromedicion.xls").Worksheets("Hoja" &
NoHoja).Cells(FilaActualMacromedicion, 3) =
Workbooks(STitulo).Worksheets("Clientes").Cells(i, 1)
Workbooks("Macromedicion.xls").Worksheets("Hoja" &
NoHoja).Cells(FilaActualMacromedicion, 4) =
Workbooks(STitulo).Worksheets("Clientes").Cells(i, 3)
Workbooks("Macromedicion.xls").Worksheets("Hoja" &
NoHoja).Cells(FilaActualMacromedicion, 5) =
Workbooks(STitulo).Worksheets("Clientes").Cells(i, 5)
Workbooks("Macromedicion.xls").Worksheets("Hoja" &
NoHoja).Cells(FilaActualMacromedicion, 6) =
Workbooks(STitulo).Worksheets("Clientes").Cells(i, 4)
Workbooks("Macromedicion.xls").Worksheets("Hoja" &
NoHoja).Cells(FilaActualMacromedicion, 7) = FileName
FilaActualMacromedicion = FilaActualMacromedicion + 1
If FilaActualMacromedicion > 60000 Then
FilaActualMacromedicion = 2
NoHoja = NoHoja + 1
End If
Else
Exit For
End If
Next i
Windows(STitulo).Close

End Sub




"Héctor Miguel" escribió en el mensaje
news:%
hola, Jairo !

... el siguiente fragmento de codigo, que grabe usando el grabador de
macros y lo modifique para darle generalidad en un ciclo
... sin embargo cuando llega a la linea Range("A3").Select, sale el
error:
"Se ha producido el error no 1.004 en tiempo de ejecucion ". "Error en el
metodo select de la clase range"...
Workbooks.Open FileName:=FileName
Windows(STitulo).Activate
Sheets("CLIENTES").Select
Range("A3").Select [...]



[probablemente]... la hoja 'clientes' -> esta oculta -?-
lo que no 'se sabe'... es:
-> si la hoja esta en el 'FileName' [que se esta abriendo]
o... en el 'Windows(STitulo)' [que pudiera ser 'lo mismo'] -?-

comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#3 KL
04/02/2006 - 00:41 | Informe spam
Hola Jairo,

SIN EMBARGO AUN NO SE POR QUE EL CODIGO ANTERIOR ME DABA ERROR)



Creo que (como ya ha sugerido indirectamente Hector Miguel) lo mas probable es que el codigo inicial se encontraba en el modulo VBA
de una hoja y esa hoja no era la hoja "CLIENTES" del libro STitulo (sea el que sea su nombre). Si estoy en lo cierto, lo que ocurre
es que al usar el rango no calificado (Range("A3")) Excel por defecto interpreta que el rango esta en la hoja en cuyo modulo esta el
macro (en cambio, en los modulos que no sean de hoja se asumiria que el rango esta en la hoja que en ese momento esta activa).
Entonces al intentar seleccionar un rango de la hoja que no esta activa se produce el fallo. Para comprobarlo prueba modificar tu
codigo inicial de la siguiente manera:

Workbooks.Open Filename:=Filename
With Workbooks(STitulo).Sheets("CLIENTES")
.Activate
.Range("A3").Select
.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
NoFilas = Selection.Rows.Count
End With

incluso se podria hacerlo asi (no es necesario selecionar nada):

Workbooks.Open Filename:=Filename
With Workbooks(STitulo).Sheets("CLIENTES")
With .Range(.Range("A3"), .Range("A3").End(xlDown))
.Copy
NoFilas = .Rows.Count
End With
End With

Saludos,
KL
Respuesta Responder a este mensaje
#4 KL
04/02/2006 - 01:28 | Informe spam
Hola Jairo,

Solo intentando acortar tu codigo. Me imagino que las variables o constantes "SRuta", "STitulo", "FilaActualMacromedicion" y
"NoHoja" estan declaradas en el modulo o en el procedimiento que llama "f_FileFound".

Saludos,
KL

Private Sub f_FileFound(FileName As String)
Dim NoFilas As Long
Dim SRuta As String
Dim STitulo As String
Dim i As Long
Dim ws As Worksheet

SplitPath FileName, SRuta, STitulo
Workbooks.Open FileName:=FileName
Set ws = Workbooks(STitulo).Worksheets("Clientes")
For i = 3 To ws.Range("A65536").End(xlUp).Row
With Workbooks("Macromedicion.xls").Worksheets("Hoja" & NoHoja)
.Cells(FilaActualMacromedicion, 3) = ws.Cells(i, 1)
.Cells(FilaActualMacromedicion, 4) = ws.Cells(i, 3)
.Cells(FilaActualMacromedicion, 5) = ws.Cells(i, 5)
.Cells(FilaActualMacromedicion, 6) = ws.Cells(i, 4)
.Cells(FilaActualMacromedicion, 7) = FileName
End With
If i > 60000 Then
FilaActualMacromedicion = 2
NoHoja = NoHoja + 1
Else
FilaActualMacromedicion = FilaActualMacromedicion + 1
End If
Next i
Windows(STitulo).Close
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida