2015-12-24 17 views
7

Ich bin neu im Codieren und versuche, das Folgende auszuführen;Fehler - VBA-Objekt unterstützt diese Eigenschaft oder Methode nicht

Tracking-Arbeitsmappe enthält Projektinformationen, die aus einer Eingabearbeitsmappe stammen. Ich versuche, die Eingangs Arbeitsmappe zu öffnen, kopieren Sie alle Daten auf dem Projekt Infoblatt und an ihm vorbei in die Projektinfo Tracking-Arbeitsmappe sheet.Here ist meine Codierung unter

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 

Es ist die Datei in Ordnung zu öffnen, aber dann scheint Stoppen Sie kurz vor dem Kopieren der Daten. Ich kann den Fehler nicht genau lokalisieren. Ich habe mehrere Threads mit ähnlichen Problemen durchsucht, hatte aber kein Glück. Ist etwas falsch mit meiner Codierung?

+0

Qualifizieren Sie Ihre Objekte mit 'set'. – findwindow

+1

@findwindow - Welche Objekte? Das gesamte Sub basiert auf Select, Activate und ActiveWorkbook. – Jeeped

+0

Arbeitsmappen, Blätter und Zellen sind keine Objekte? – findwindow

Antwort

4

Wenn Sie VBA-Code schreiben, werden Sie am besten bedient, indem Sie alle Objekte mit Variablen qualifizieren und direkt mit den Objekten arbeiten.

Try this:

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. 

Ich frage mich auch, wenn Sie wirklich jede Zelle des Arbeitsblatts kopieren oder wollen Sie nur Zellen mit tatsächlichen Daten kopieren?

Wenn Sie nur Zellen mit aktuellen Daten möchten, können Sie wsC.UsedRange.Copy wsP.Range("A1")Hinweis verwenden - dies auch Probleme haben könnte, aber ich werde Sie lassen Sie mich sagen, ob es funktioniert :)

8

Das Problem mit Ihrem Code ist in der zweiten Zeile.

ActiveSheet("Project Info").Select 

Dies sollte sein

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

Wie in meinem Kommentar erwähnt, finden Sie weitere Methoden How to avoid using Select in Excel VBA macros entfernt wählen, sich auf immer und aktivieren Sie Ihre Ziele zu erreichen. Die ActiveWorkbook property, Application.ActiveWindow property, ActiveSheet property und ActiveCell property sind einfach keine zuverlässigen Methoden der Referenzierung.

+3

netter Weg, um ein Hauptproblem aufzuzeigen, ohne den ursprünglichen Code mehr als nötig zu manipulieren :) * musste relativ sein, natürlich:) * –

Verwandte Themen