2016-06-07 37 views
0

Ich habe Probleme mit etwas, das sehr einfach scheint. Meine Erfahrung mit VBA ist im Wesentlichen nichts. Ich habe eine Tabelle mit Daten, die aus einigen CSV-Dateien mit einem Skript importiert wurden, das ich gemacht habe. Das Skript liest die Daten ein und erstellt dann ein Master-Arbeitsblatt oder überschreibt das vorherige Master-Arbeitsblatt. Ich möchte diese Daten im selben Skript um eine Spalte verschieben. Der Bereich der Daten, die verschoben werden müssen, ändert sich jedes Mal, wenn das Arbeitsblatt aktualisiert wird, wenn mehr Daten hinzugefügt werden. Ich habe das Folgende am Ende meines Codes eingefügt, um dies zu tun, aber ich kann es nicht zum Laufen bringen.Offset eines dynamischen Datenbereichs

Set myRange = Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()) 

Range("myRange").Offset(,1) 

Was mache ich falsch?

Edit: Hier ist was ich jetzt habe. Ich laufe weiter in 'Run-time error 1004' in der 14. Zeile.

Dim myRange As Range 
Dim DefPath As String 
Dim lastRow As Long 
Dim lastColumn As Long 

Dim lRow As Long 
Dim lCol As Long 

DefPath = Application.DefaultFilePath 
Workbooks.Open Filename:=DefPath & "\SEM Master File" 

lRow = Cells(Rows.Count, 1).End(xlUp).Row 
lCol = Cells(1, Columns.Count).End(xlToLeft).Column 
Set myRange = Range(Cells(1, 1), Cells(lastRow, lastColumn)) 
myRange.Offset(, lastColumn).Value = myRange.Value 

Zweite Edit: Hier ist, was ich bisher habe. Es wird kompiliert und ausgeführt, aber anstatt alles wie erwartet über eine Spalte zu verschieben, erstellt es eine Kopie der Spalten und fügt sie in die Spalten neben den Daten ein, die sich bereits in der Tabelle befinden.

Sub Offset_Data() 
Dim myRange As Range 
Dim DefPath As String 
Dim lastRow As Long 
Dim lastColumn As Long 

DefPath = Application.DefaultFilePath 
Workbooks.Open ("SEM Master File.xlsx") 

lastRow = Cells(Rows.Count, 1).End(xlUp).Row 
lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column 
Set myRange = Range(Cells(1, 1), Cells(lastRow, lastColumn)) 
myRange.Offset(, lastColumn).Value = myRange.Value 
End Sub 
+0

Versuchen Sie, die 'Adresse()' zu entfernen? – findwindow

+0

Der Fehler, den ich erhalte, ist Kompilierfehler: Erwartet: = – Chase

+0

Oh. Just do 'myRange.Offset (, 1)' – findwindow

Antwort

1
Sub Offset_Data() 
Dim myRange As Range 
Dim DefPath As String 
Dim lastRow As Long 
Dim lastColumn As Long 

DefPath = Application.DefaultFilePath 
Workbooks.Open ("SEM Master File.xlsx") 

lastRow = Cells(Rows.Count, 1).End(xlUp).Row 
lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column 
Set myRange = Range(Cells(1, 1), Cells(lastRow, lastColumn)) 
myRange.Offset(, lastColumn).Value = myRange.Value 
myRange.ClearContents 
End Sub