2.9k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo

Kann man den folgenden Code ändern?

1. nur eine bestimmter bereich soll kopiert werden und in den Zielort in der selben
stelle eingefügt werden. (z.B: $A:$G)

2. Zielort soll das aktuelle Tabellenblatt sein ..



Option Explicit

Sub Datenimport()
Dim Importdatei$, Verzeichnis$, aktiver_Blattname As String
Application.ScreenUpdating = False
aktiver_Blattname = ActiveSheet.Name
Sheets("C-1012").Activate
Cells.ClearContents
Verzeichnis = "C:\"
On Error Resume Next
ChDir Verzeichnis
Importdatei = Application.GetOpenFilename("Exceldateien (*.csv), *.csv")
Application.ScreenUpdating = False
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Importdatei, _
Destination:=Range("A1"))
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
Sheets(aktiver_Blattname).Activate
End Sub

13 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

versuche es mal so:

Sub Datenimport()
Dim Importdatei$, Verzeichnis As String, aktiver_Blattname As String
Application.ScreenUpdating = False
With Sheets("C-1012")
.Cells.Clear
Importdatei = GetFile
Workbooks.Open Importdatei
Range("A1:B10").Copy .Range("A1")
ActiveWorkbook.Close False
End With
Application.ScreenUpdating = True
End Sub

Function GetFile() As String
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.InitialFileName = "C:\"
.ButtonName = "OK"
.Filters.Add "Textdateien", "*.csv", 1
.Title = "Dateiauswahl"
.Show
If .SelectedItems.Count = 0 Then
GetFile = ""
Else
GetFile = .SelectedItems(1)
End If
End With
End Function


Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,

vielen Dank für die schnelle Antwort.

Aber Daten werden nicht kopiert.

Und ich möchte gerne dass die Daten in den aktuell offenen Tabellenblatt
eingefügt werden.. also ich möchte den Tabellenblatt bezeichnung nicht
vorgeben müssen... weil es sich immer wieder ändert..

Vielen Dank im Voraus.

Nurettin
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nurettin,

ich habe am Prinzip deines Codes nichts geändert - dort wird nicht ins aktive Tabellenblatt sondern ins Tabellenblatt "C-1012" kopiert - ich habe vorausgesetzt, dass das korrekt ist. Was ich am Prinzip geändert habe ist nur, dass ich Select und Activate eliminiert habe, da es zu 99% aller Fälle wegfallen kann.
Wenn ins gerade aktive Tabellenblatt kopiert werden soll, dann ändere den Code wie folgt:


Sub Datenimport()
Dim Importdatei$
Application.ScreenUpdating = False
With ActiveSheet
.Cells.Clear
Importdatei = GetFile
Workbooks.Open Importdatei
Range("A1:B10").Copy .Range("A1")
ActiveWorkbook.Close False
End With
Application.ScreenUpdating = True
End Sub


Übrigens: bei mir werden die Daten aus dem festgelegten Bereich korrekt kopiert - den Bereich im Code musst du selbstverständlich an deine Bedingungen anpassen.

Bis später,
Karin
0 Punkte
Beantwortet von
[u]Vielen Dank nochmals..

Es hat geklappt.. :-)

Da ich in der Macro Geschichte nicht geübt bin, sind zwei neue Probleme entstanden.
1. wenn ich nur den Bereich A1:B10 kopieren will, wird in der Zieldatei alles andere gelöscht. Ich möchte natürlich auch in der Zieldatei nur diese Felder überschrieben werden.

2. Wahrscheinlich auf Grund von CVS Quelldatei... taucht folgendes Problem auf...


Sollte so sein:::

Result pass
-179,784 -0,91
-179,712 -4,481
-179,64 -4,25
-179,568 -4,228
-179,496 -4,203
-179,424 -4,451
-179,352 -4,356
-179,28 -4,142
-179,208 -4,14


Sieht aber so aus:::


Result; pass;;2014-07-01;17-15-47;cycle: 11;
-179 712;-4 481;
-179 640;-4 250;
-179 568;-4 228;
-179 496;-4 203;
-179 424;-4 451;
-179 352;-4 356;
-179 280;-4 142;
-179 208;-4 140;
-179 136;-4 357;


Vielen Dank im Voraus
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Wenn nur der Bereich überschrieben und nicht alle Zellen gelöscht werden soll, dann lösche diese Code-Zeile:

.Cells.Clear


Wenn deine CSV-Datei den Text nur in Spalte A kopiert, dann kannst du anschließend mit "Text in Spalten" den Text in die einzelnen Spalten auftrennen. Wie das konkret bei dir aussehen soll, das musst du mal mit dem Makrorekorder aufzeichnen. Stelle den Code hier ein, dann kann man ihn sicher problemlos in den bisherigen einbinden.
Welches Zeichen ist das "Leerzeichen" in den Zahlen? Das müsste man noch durch Nichts ersetzen und den gesamten Bereich durch 1000 dividieren.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo und vielen Dank nochmal..

Die original Datei sieht tatsächlich so aus

-179,784;-0,910;
-179,712;-4,481;


aber wenn ich mit Excel öffne wird es automatisch umformatiert..
Die Semikolons dienen als Trennung und es sind keine Lehrzeichen
dazwischen. Alles was nach dem Semikolon kommt wird in die nächste
Sparte gelegt.

A B C D E
-179,784 -0,910
-179,712 - 4,481
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

in deinem anderen Beitrag sind allerdings Leerzeichen dazwischen. Man kann immer nur davon ausgehen, was in einem Beitrag geschrieben steht.

Den Rest deines Beitrages verstehe ich leider nicht - wenn aus

-179,784;-0,910;


durch Ausführung von "Text in Spalten" dieses wird

-179,784 -0,910


sehe ich nicht, wo da ein Problem ist.

Bis später,
Karin
0 Punkte
Beantwortet von
Hi,

sorry erst jetzt sehe ich mein Fehler...

Also die csv-datei besteht aus Text, Lehrzeichen, Komma und Semikolons.
Dabei dienen die Semikolons als spalten wechsel.

Das Makro sieht die Komma als Spalt wechsel.
Oder zu mindestens sieht es nach ausführen so aus. Und man kann nicht
mehr Text-in-Spalten Funkion anwenden, da es schon in Spalten zerlegt
ist, halt nur nicht an der richtigen stelle.

Wenn du mir auch hierbei hilfst währe ich dir sehr dankbar.

Also die Text in Spalten Funktion so nach Semikolon trennen.

Vielen Dank im Voraus.
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

dazu müsstest du mal eine csv-Datei hochladen.

Bis später,
Karin
0 Punkte
Beantwortet von nuro1 Einsteiger_in (11 Punkte)
Hallo,

wo kann ich denn ein Datei hochladen?
...