La Web del Programador: Comunidad de Programadores
 
    Pregunta:  17389 - ERROR 1004 EN TIEMPO DE EJECUCIóN CON VISUAL EN EXCEL
Autor:  Luis del Campo Oñate
Hola, os cuento mi problema. Simplemente lo que trato de hacer es seleccionar varias celdas de una hoja de excel, el problema es que con la opción A, si las puedo seleccionar, pero con la opción B no puedo, y la única diferencia es que en la opción B, antes de ponerle las celdas que quiero seleccionar, le doy valor a la celda a8, sin embargo en la opción A no le doy valor a la celda a8. Estoy haciendo pruebas, y si selecciono nada más abrir la hoja si que puedo, pero si hago cualquier cosa en la hoja, ya no puedo seleccionar las celdas, aunque si en vez de varias celdas sólo selecciono una, se puede de las dos formas.
El error que me da es "Error 1004 en Tiempo de Ejecución
Fallo en el método Range del objeto _Application"
Gracias

Opción A

Private sub Command_Click()
Dim Hoja as New excel.application
Hoja.visible=True
Hoja.Workbooks.open "C:\Hoja.xls"
Hoja.Range("A2,B4,C8").Select
End Sub

Opción B

Private sub Command_Click()
Dim Hoja as New excel.application
Hoja.visible=True
Hoja.Workbooks.open "C:\Hoja.xls"
Hoja.Range("A8").Value="VALOR" (Sin esta línea sí funciona)
Hoja.Range("A2,B4,C8").Select
End Sub

  Respuesta:  Pedro Serrano Baizabal
Luis

El análisis de tu problema radica en que deseas abrir un libro de excels llamado Hoja.xls que se encuentra en "C:\" si este no esta ubicado en este directorio es por eso que te manda el mensaje de error 1004 en tiempo de ejecución.Comprobe esto con el codigo siguiente:

Private Sub CommandButton1_Click()
Dim Hoja As New Excel.Application
Hoja.Visible = True
Hoja.Workbooks.Open "C:\mis documentos\Hoja.xls"
'Sheets("Hoja1").Range("A8").Value = "VALOR"
'Sheets("Hoja1").Range("A2,B4,C8").Select
Hoja.Range("A8").Value = "VALOR"
Hoja.Range("A2,B4,C8").Select
End Sub

Como puedes observar se ordena abrir el libro Hoja.xls que se encuentra en el subdirectorio mis documentos
Las líneas de sheets("Hoja1").range pueden sustituir a Hoja.range para especificar en que hoja deseas hacer tus actividades.
Espero comentarios
Saludos