2017-03-13 4 views
1

Ich versuche, Daten aus einem Arbeitsblatt, das aus einer CSV-Datei geöffnet wurde, als neues Arbeitsblatt in eine vorhandene Excel-Vorlage zu kopieren. Ich habe versucht, in ein vorhandenes leeres Arbeitsblatt zu kopieren und das Quellarbeitsblatt als neues Arbeitsblatt in die Zielarbeitsmappe zu kopieren. Alle diese Methoden haben eine Vielzahl von Fehlern verursacht. Die einzige Methode, mit der der Code tatsächlich abgeschlossen werden konnte, war ein Befehl copy-paste-special. Es führte jedoch dazu, dass Zellen im Gegensatz zu Werten mit Binärdaten gefüllt wurden und viele Zellen mit einem ausgegrauten Erscheinungsbild gefüllt wurden.Versuch, ein Arbeitsblatt in eine vorhandene Arbeitsmappe in VBA zu kopieren

Unten ist der Code Ich habe zum Laufen zu bringen versucht:

'================================================= 
'Add Data 
'================================================= 
Dim AppExcell As Object 
Dim wb As Object 
Dim xFile As String 
Dim main As Workbook 

Set AppExcel = CreateObject("Excel.Application") 
AppExcel.Visible = False 

Set wb = AppExcel.Workbooks.Add("C:\Fridge_Automation\Lab Report.xltm") 
Set main = ActiveWorkbook 

xFile = Application.GetOpenFilename("All CSV Files (*.csv),*.csv", , "Select CSV File") 

Set src = Workbooks.Open(xFile) 

src.Worksheets(1).Copy Before:=wb.Worksheets("11Mic Avg - Raw Data") 
wb.Worksheets(2).Name = "Raw Data" 
src.Close 

ich in Excel 2013 diesen Code leite durch Klicken auf eine Schaltfläche ich zu einem Arbeitsblatt hinzugefügt haben.

+0

Führen Sie diesen Code aus ** Excel **? –

+0

Ich habe eine Schaltfläche in einer Excel-Tabelle, die dann diesen Code ausführt – charwayne

+0

Haben Sie Code für Ihre 'GetOpenFilename' Funktion? –

Antwort

1

Der folgende Code funktionierte für mich, von innerhalb einer Arbeitsmappe ausgeführt. *** Flags Dinge, die ich geändert habe.

Option Explicit    ' *** Always use this in every module 
Option Base 0 

Public Sub GrabSheet() 

    'Dim AppExcel As Object ' *** don't need this 
    'Dim wb As Object  ' *** 
    Dim dest As Workbook ' *** Instead of "wb" 
    Dim xFile As String 
    'Dim main As Workbook ' *** 

    'Set AppExcel = CreateObject("Excel.Application") ' *** 
    'AppExcel.Visible = False ' *** 
    'Application.Visible = False ' *** Uncomment if you really want to... 

    Set dest = ActiveWorkbook ' *** for testing - use Workbooks.Add("C:\Fridge_Automation\Lab Report.xltm") for your real code 
    'Set main = ActiveWorkbook ' *** don't need this 

    xFile = Application.GetOpenFilename("All CSV Files (*.csv),*.csv", , "Select CSV File") 

    Dim src As Workbook  ' *** Need to declare this because of "Option Explicit" 
    Set src = Workbooks.Open(xFile) 

    ' Per https://stackoverflow.com/q/7692274/2877364 , it is surprisingly 
    ' difficult to get the new sheet after you copy. 
    ' Make a unique name to refer to the sheet by. 
    Dim sheetname As String       ' *** 
    sheetname = "S" & Format(Now, "yyyymmddhhmmss") ' *** 
    src.Worksheets(1).Name = sheetname    ' *** 

    src.Worksheets(1).Copy Before:=dest.Worksheets("11Mic Avg - Raw Data") ' *** changed wb to dest 
    'dest.Worksheets(2).Name = "Raw Data"   ' *** don't assume an index... 
    dest.Worksheets(sheetname).Name = "Raw Data" ' *** ... but use the name. 
     ' *** NOTE: this fails if a "Raw Data" sheet already exists. 
    src.Close SaveChanges:=False ' *** Suppress the "save changes" prompt you otherwise get because of the `src...Name` assignment 

End Sub 

habe ich einen benutzerdefinierten Blattnamen das neue Blatt zu finden, weil der in this question aufgeführten Themen.

Sie müssen kein Objekt erstellen, wenn Sie in Excel ausgeführt werden. Stattdessen können Sie direkt auf Application verweisen.

+0

Wenn ich' Option Explicit' am Anfang meiner Funktion hinzufüge, fügt es einen Teiler zum Code hinzu. In diesem Fall ist es immer noch am besten, es oben oder nach dem Funktionscode zu haben? – charwayne

+1

Die Option Explicit steht ganz oben in der Datei vor jedem "Sub" in der Datei. Es erfordert, dass Sie Dim-Anweisungen für alle Ihre Variablen verwenden, was dazu beiträgt, viele häufige Fehler zu beseitigen. – cxw

Verwandte Themen