Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1364to1368
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Von Excel in Access
05.06.2014 13:51:05
Sinayli57
Hallo,
ich möchte aus einem Excel-Kalkulationstool mit dem Namen "ABC", bestimmte vertikal angeordnete Datenreihen (von B100-B145, C100-C145, ..., AB100-AB145), horizontal in eine Excel-Datenbank mit dem Namen "XYZ" (Felder B-AU) in die nächst leere Zeile per Knopfdruck exportieren, aber nur die Datenreihen, die nicht leer sind, bzw. deren ersten Zellen nicht leer sind.
Vielen Dank im Voraus.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Hmmmmpf.....
05.06.2014 15:40:38
rolfk
Hallo Sinayli,
was hat der Begriff Access (also der Datenbank) im Betreff mit Deiner Beschreibung zu tun, oder habe ich etwas übersehen.
Wenn ich das richtig interpretiere sollen Datenzeilen aus einer Datei "ABC" mit Blatt ? kopiert und in eine Datei "XYZ" mit Blatt ? eingefügt werden. Oder sind hier Dateibereiche mit Namen gemeint?
Dabei sollen nur Datenzeilen kopiert werden, die nicht leer sind, bzw deren erste Zellen (welche sollen das konkret sein, Spalte B....) nicht leer sind.
Ich denke mal, Du würdest den Helfern hier mit einer Beispieldatei erheblich unter die Arme greifen. Also lade bitte mal ein Beispiel hoch.
Gruß Rolf

Anzeige
AW: Hmmmmpf.....
10.06.2014 13:32:11
Sinayli57
Hi Rolf,
zunächst wg. dem Betreff. Wollte erst in eine Access Datenbank hineinkopieren, habe mich aber umentschieden auf Excel, jedoch vergessen, den Betreff umzuändern. Sorry.
Bin mit dem Code auch schon fast fertig, hab nur noch ein Problem.
Der Code kopiert immer die erste Spalte (also B100-B145) in die nächst leere Zeile der Datenbank, doch soll auch überprüft werden, ob die Zellen danach, also von C100 bis AB 100 beschrieben sind (wenn erste Zelle beschrieben ist, soll die Spalte von 100-145 kopiert werden) und im positiven Fall auch diese beschriebenen Spalten (C100-C145, D100--D145,..., AB100-AB145) in die Datenbank hineinkopieren.
Sub Datenbankeintrag()
Range("B100:B145").Copy
Workbooks.Open Filename:= _
"V:\VI\SSC_Europa\Allgemein\Preiskalkulationstool\Kalkulationsdatenbank.xlsx"
Worksheets("Datenbank") _
.Cells(Worksheets("Datenbank").Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) _
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

Anzeige
Erweiterung....
10.06.2014 15:23:09
RolfK
Hallo Synayli,
ich habe mal versucht Deinen Ansatz etwas mehr zu strukturieren (scheint mir etwas übersichtlicher und damit leichter zu handhaben) und um die Abfrage zu erweitern.
Sub TransformAktuell()
Dim StartZeileQ As Long, EndZeileQ As Long, AnzZeilenZ As Long, StartSpalteQ As Long,  _
EndSpalteQ As Long
Dim AktSpalteQ As Long
Dim wsQuelle As Worksheet, wsZiel As Worksheet
Workbooks.Open Filename:="V:\VI\SSC_Europa\Allgemein\Preiskalkulationstool\ _
Kalkulationsdatenbank.xlsx"
Set wsQuelle = ThisWorkbook.Worksheets("Tabelle1") 'da muss noch der richtige Name des  _
Quellblattes rein....
Set wsZiel = Workbooks("Kalkulationsdatenbank.xlsx").Worksheets("Datenbank")
StartZeileQ = 2 'bei Dir 100
EndZeileQ = 6 'bei Dir 145
StartSpalteQ = 1 'bei Dir 2 Spalte B
EndSpalteQ = 4 'bei dir 28  Spalte AB
AnzZeilenZ = wsZiel.Range("A1").CurrentRegion.Rows.Count + 1
For AktSpalteQ = StartSpalteQ To EndSpalteQ
If Not IsEmpty(wsQuelle.Cells(StartZeileQ, AktSpalteQ)) Then
'wenn nicht ist leer erste Zeile der akt Spalte, dann kopieren, transformieren
With wsQuelle
.Range(.Cells(StartZeileQ, AktSpalteQ), .Cells(EndZeileQ, AktSpalteQ)).Copy
wsZiel.Cells(AnzZeilenZ, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,  _
SkipBlanks:= _
False, Transpose:=True
AnzZeilenZ = AnzZeilenZ + 1
End With
End If
Next AktSpalteQ
wsZiel.Save
wsZiel.Close
End Sub
Teste mal und melde Dich, falls es nicht klappt.
Gruß Rolf

Anzeige
AW: Erweiterung....
10.06.2014 16:17:25
Sinayli57
Hi Rolf,
vielen Dank. Nur noch ein wenig Feinschliff.
Zunächst einmal soll beim einfügen in die Zieldatei ab der zweiten Spalte angefangen werden, weil in der ersten Spalte jeder neuen Zeile eine eindeutige Nummer vergeben wird.
Zweitens soll beim einfügen "Werte" eingefügt werden, weil in der Quelldatei von Formeln kopiert wird.
In meinem Code hatte ich das irgendwie durch ausprobieren geschafft und es hatte auch funktioniert.
Ein anderes Problem ist, dass aufgrund der besagten Formeln in den Zellen der Quelldatei deine "Abfrage" (wenn nicht ist leer) dazu führt, dass er keine der Zellen als leer erkennt und dadurch alle Spalten in die Datenbank einfügt.
Zur Info: Die Formeln in der Quelldatei besagen, dass wenn weiter oben die Zelle zu der verwiesen wird leer ist, dann mach "", ansonsten kopiere.
Danke im Voraus.

Anzeige
Angepasst....
10.06.2014 17:56:51
RolfK
Hallo Sinayli,
das war meiner Meinung nach aus Deiner Beschreibung so nicht zu erkennen, aber egal, dann hier der angepasste Code:
Sub TransformAktuell()
Dim StartZeileQ As Long, EndZeileQ As Long, AnzZeilenZ As Long, StartSpalteQ As Long,  _
EndSpalteQ As Long
Dim AktSpalteQ As Long
Dim wsQuelle As Worksheet, wsZiel As Worksheet
Workbooks.Open Filename:="V:\VI\SSC_Europa\Allgemein\Preiskalkulationstool\ _
Kalkulationsdatenbank.xlsx"
Set wsQuelle = ThisWorkbook.Worksheets("Tabelle1") 'da muss noch der richtige Name der  _
Quelldatei rein....
Set wsZiel = Workbooks("Kalkulationsdatenbank.xlsx").Worksheets("Datenbank")
StartZeileQ = 2 'bei Dir 100
EndZeileQ = 6 'bei Dir 145
StartSpalteQ = 1 'bei Dir 2 Spalte B
EndSpalteQ = 4 'bei dir 28  Spalte AB
AnzZeilenZ = wsZiel.Range("A1").CurrentRegion.Rows.Count + 1
For AktSpalteQ = StartSpalteQ To EndSpalteQ
If wsQuelle.Cells(StartZeileQ, AktSpalteQ)  "" Then
'wenn ungleich "" leer erste Zeile der akt Spalte, dann kopieren, transformieren
With wsQuelle
.Range(.Cells(StartZeileQ, AktSpalteQ), .Cells(EndZeileQ, AktSpalteQ)).Copy
wsZiel.Cells(AnzZeilenZ, 2).PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:= _
False, Transpose:=True
AnzZeilenZ = AnzZeilenZ + 1
End With
End If
Next AktSpalteQ
wsZiel.Save
wsZiel.Close
End Sub
Gruß Rolf

Anzeige
AW: Angepasst....
11.06.2014 10:14:26
Sinayli57
Hi Rolf,
alles funktioniert bis auf eine Kleinigkeit. Leider habe ich es selbst nicht hinbekommen. Es kopiert die Einträge in die Datenbank, aber erst ab der Zeile, wo in Spalte A keine Formel für die automatische Nummernvergabe steht. Der Code soll sozusagen in Spalte B nach der nächst leeren Zeile suchen, nicht in A, weil da die Durchnummerierung geschieht.
Außerdem gab er Fehler bei wsZiel.Save. Das habe ich in ActiveWorkbook.Save umgeändert. Dann kam der Fehler nicht mehr.
Hier der Quellcode:
Sub Datenbankeintrag()
Dim StartZeileQ As Long, EndZeileQ As Long, AnzZeilenZ As Long, StartSpalteQ As Long, _
EndSpalteQ As Long
Dim AktSpalteQ As Long
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Workbooks.Open Filename:="V:\VI\SSC_Europa\Allgemein\Preiskalkulationstool\ _
Kalkulationsdatenbank.xlsx"
Set wsQuelle = ThisWorkbook.Worksheets("Elo") 'da muss der richtige Name der Quelldatei rein.... _
Set wsZiel = Workbooks("Kalkulationsdatenbank.xlsx").Worksheets("Datenbank")
StartZeileQ = 100
EndZeileQ = 145
StartSpalteQ = 2
EndSpalteQ = 28
AnzZeilenZ = wsZiel.Range("A1").CurrentRegion.Rows.Count + 1
For AktSpalteQ = StartSpalteQ To EndSpalteQ
If wsQuelle.Cells(StartZeileQ, AktSpalteQ)  "" Then
'wenn ungleich "" leer erste Zeile der akt Spalte, dann kopieren, transformieren
With wsQuelle
.Range(.Cells(StartZeileQ, AktSpalteQ), .Cells(EndZeileQ, AktSpalteQ)).Copy
wsZiel.Cells(AnzZeilenZ, 2).PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:= _
False, Transpose:=True
AnzZeilenZ = AnzZeilenZ + 1
End With
End If
Next AktSpalteQ
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige