2012-06-15 10 views
12

¿Por qué no puedo definir un libro de trabajo de cualquiera de estas formas? (Tengo el rango de bits para una prueba rápida). ¿Cómo lo soluciono?¿Por qué no puedo definir mi libro de trabajo como un objeto?

Esto produce un "Compile Error: Type Mismatch"

Sub Setwbk() 

    Dim wbk As Workbook 

    Set wbk = "F:\Quarterly Reports\2012 Reports\New Reports\ _ 
      Master Benchmark Data Sheet.xlsx" 

    Range("A2") = wbk.Name 

End Sub 

Y esto crea un "Runtime Error '91': Object variable or with block variable not set"

Sub Setwbk() 

    Dim wbk As Workbook 

    wbk = "F:\Quarterly Reports\2012 Reports\New Reports\ _ 
      Master Benchmark Data Sheet.xlsx" 

    Range("A2") = wbk.Name 

End Sub 

Qué me estoy perdiendo aquí? He estado trabajando duro en VBA durante un mes, me he vuelto bastante sofisticado, pero esto me ha dejado perplejo. Me estoy perdiendo algo elemental.
¡Solo quiero definir un libro de trabajo para que no tenga que escribirlo todo!

Respuesta

18

En realidad es una pregunta sensata. Aquí está la respuesta de la ayuda de Excel 2010:

"El objeto Workbook es un miembro de la colección Workbooks. La colección Workbooks contiene todos los objetos Workbook actualmente abiertos en Microsoft Excel."

Por lo tanto, como ese libro de trabajo no está abierto, al menos supongo que no lo está, no se puede establecer como un objeto de libro de trabajo. Si estaba abierto que le acaba de establecer que gusta:

Set wbk = workbooks("Master Benchmark Data Sheet.xlsx") 
+1

y @Gaffi tiene el resto, y la parte más pertinente, de la respuesta. –

+2

Ya veo. Tengo que abrirlo. Dejé fuera el bit de "libros de trabajo". También necesito "configurarlo". ¿Por qué tengo que "configurarlo"? (Supongo que debería preguntar ¿por qué también tengo que "establecer" un rango?) Solo trato de entender el idioma. ¿Es porque son objetos en oposición a las propiedades de los objetos? ¡Muchas gracias! –

+1

@ user1408660 'Set 'es la forma en que VBA asigna las variables * object *. Como un 'Range' y un' Workbook'/'Worksheet' son * objects *, debe usar' Set' con estos. En otras palabras, tu suposición es correcta. – Gaffi

13

que necesitará para abrir el libro para referirse a ella.

Sub Setwbk() 

    Dim wbk As Workbook 

    Set wbk = Workbooks.Open("F:\Quarterly Reports\2012 Reports\New Reports\ _ 
     Master Benchmark Data Sheet.xlsx") 

End Sub 

* Siga Doug's answer si el libro ya está abierto. Con el fin de hacer que esta respuesta sea lo más completa posible, incluyo mi comentario sobre su respuesta:

¿Por qué tengo que "configurarlo"?

Set es como VBA asigna objeto variables. Dado que Range y Workbook/Worksheet son objetos, debe usar Set con estos.

+0

He publicado otro q para doug glancy arriba. muchas gracias por su respuesta rápida! –

+0

+ 1 para seguirlo en los comentarios también! –

Cuestiones relacionadas