2012-06-15 7 views
12

Perché non è possibile definire una cartella di lavoro in questi modi? (Ho la gamma di bit in là solo per un test rapido.) Come posso risolvere il problema?Perché non posso definire la mia cartella di lavoro come un oggetto?

Questo 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 

E questo 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 

Che cosa mi manca qui? Sto martellando da VBA per un mese, sono diventato piuttosto sofisticato, ma questo mi ha lasciato perplesso. Mi manca qualcosa di elementare.
Voglio solo definire una cartella di lavoro in modo da non dover digitare tutto!

risposta

18

In realtà è una domanda sensata. Ecco la risposta dall'aiuto di Excel 2010:

"L'oggetto Cartella di lavoro è un membro della raccolta Cartelle di lavoro: la raccolta Cartelle di lavoro contiene tutti gli oggetti cartella di lavoro attualmente aperti in Microsoft Excel."

Quindi, dal momento che quella cartella di lavoro non è aperta, almeno presumo che non lo sia, non può essere impostata come un oggetto cartella di lavoro. Se era aperto, basta impostarlo come:

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

e @Gaffi ha il resto, e la parte più pertinente, della risposta. –

+2

Capisco. Devo aprirlo. Ho omesso il "workbook" bit. Devo anche "impostarlo". Perché devo "impostarlo"? (Credo che dovrei chiedere perché devo anche "impostare" un intervallo?) Sto solo cercando di capire la lingua. È perché sono oggetti in contrapposizione alle proprietà degli oggetti? Grazie mille! –

+1

@ user1408660 'Set' è il modo in cui VBA assegna * oggetto * variabili. Dato che un 'Range' e un' Workbook'/'Worksheet' sono * objects *, devi usare' Set' con questi. In altre parole, la tua ipotesi è corretta! – Gaffi

13

Avrete bisogno di aprire la cartella di lavoro per fare riferimento ad essa.

Sub Setwbk() 

    Dim wbk As Workbook 

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

End Sub 

* Seguire Doug's answer se la cartella di lavoro è già aperto. Per il gusto di fare questa risposta il più completo possibile, sto compreso il mio commento sulla sua risposta:

Perché devo a "set" vero?

Set è come VBA assegna oggetto variabili. Poiché uno Range e uno Workbook/Worksheet sono oggetti, è necessario utilizzare Set con questi.

+0

Ho postato un altro q per raddoppiare l'immagine sopra. molte grazie per la tua risposta rapida! –

+0

+ 1 per seguirlo anche sui commenti! –

Problemi correlati