2015-12-24 10 views
7

Sono nuovo alla codifica e sto cercando di eseguire quanto segue;- L'oggetto VBA non supporta questa proprietà o metodo

La cartella di monitoraggio contiene informazioni sul progetto prese da una cartella di lavoro di input. Sto cercando di aprire la cartella di lavoro in ingresso copiare tutti i dati sul foglio informativo del progetto e passato nelle informazioni del progetto della cartella di lavoro di monitoraggio sheet.Here è il mio codice qui sotto

Sub GetProjectInfo() 

    Workbooks.Open Filename:="\\ccprd02\workgrp2\AM\SPIM Input.xlsm" 
    ActiveSheet("Project Info").Select 
    Cells.Select 
    Selection.Copy 
    Windows("SPIM Tracking Sheet.xlsm").Activate 
    ActiveSheet("Project Info").Select 
    Cells.Select 
    Range("A1").Activate 
    ActiveSheet.Paste 
    Range("A1").Select 
    Windows("SPIM Input.xlsm").Activate 
    ActiveWindow.Close 

End Sub 

Si sta aprendo il file ok, ma poi sembra fermarsi appena prima di copiare i dati. Non riesco a individuare l'errore. Ho cercato diversi thread con problemi simili ma non ho avuto fortuna. C'è qualcosa di sbagliato nella mia codifica?

+0

Qualifica i tuoi oggetti con 'set'. – findwindow

+1

@findwindow - Quali oggetti? L'intero sub è basato su Select, Activate e ActiveWorkbook. – Jeeped

+0

Le cartelle di lavoro, i fogli e le celle non sono oggetti? – findwindow

risposta

4

Durante la scrittura del codice VBA, è meglio servire qualificando tutti gli oggetti con variabili e lavorando direttamente con gli oggetti stessi.

Prova questo:

Dim wbC as Workbook 
Dim wbP as Workbook 
Dim wsC as Worksheet 
Dim wsP as Worksheet 

Set wbP = Workbooks("SPIM Tracking Sheet.xlsm") 
Set wsP = wbP.Sheets("Project Info") 
Set wbC = Workbooks.Open (Filename:="\\ccprd02\workgrp2\AM\SPIM Input.xlsm") 
Set wsC = wbC.Sheets("Project Info") 

wsC.Cells.Copy wsP.Range("A1") 

wbC.Close False 'assuming you want to close the workbook you opened. 

Mi chiedo anche se davvero si vuole copiare ogni cellula del foglio di lavoro o volete semplicemente copiare le celle con dati reali ?

Se si desidera solo le celle con dati reali, è possibile utilizzare wsC.UsedRange.Copy wsP.Range("A1")Nota - questo potrebbe avere problemi pure, ma io vi permetterà di dirmi se lo fa :)

8

Il problema con il vostro codice è nella seconda riga.

ActiveSheet("Project Info").Select 

Questo dovrebbe essere,

ActiveWorkbook.Sheets("Project Info").Select 
'alternative 
Worksheets("Project Info").Select 

Come detto nel mio commento, vedere How to avoid using Select in Excel VBA macros per più metodi su come ottenere lontano da affidarsi a selezionare e attivare per realizzare i tuoi obiettivi. Il ActiveWorkbook property, Application.ActiveWindow property, ActiveSheet property e ActiveCell property non sono solo metodi affidabili di referenziamento.

+3

bel modo di segnalare un problema principale senza manipolare il codice originale più del necessario :) * necessario essere relativo, ovviamente:) * –

Problemi correlati