Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Access: Einzelner Datensatz aus Query in Excel Tabellen kopie1ren ohne Spaltenüberschriften





Frage

Hallo, hab ein klitzekleines Problemchen, was mich grad in den Wahnsinn treibt. Und zwar wird in meiner Access-DB über ein Button eine Query geöffnet, die genau 1 Datensatz (1 Zeile in Datensatzform) anzeigt. Die User können jetzt diese Zeile markieren und in die Zwischenablage kopieren, um danach diesen in verschiedene Exceltabellen einzufügen. Leider fügt er in Excel immer zusätzlich die Spaltenüberschrift mit ein, was ich aber nicht möchte. [i]Kann man das unterbinden? Oder besser noch: Gibt es hierfür ähnlich wie in Excel VBA-Befehle, mit denen ich die Zeile markieren und in die Zwischenablage kopieren kann, ohne Spaltenüberschrift natürlich???[/i] Gruß Marcel

Antwort 1 von lleopard

Hi Marcel,

natürlich geht das... im Hintergrund - also bevor der DS angezeigt wird - greifst du einfach per VBA drauf zu. Dafür schnappst du dir den SQL-String der Query und Verweist in der Ereignisprozedur des Buttons einfach auf diesen SQL-String und liest die Werte aus.

Wenn du nun also die Werte in Excel wegschreiben willst, solltest du im Objektkatalog einen Verweis auf Excel setzen.

Dann fügst du deiner Routine folgende Zeile ein (nur ein Beispiel)

Dim oExcel As Excel.Application, Tmp, oSheet As Excel.Worksheet, Er As Long
dim i as integer, j as integer

Set oExcel = CreateObject("Excel.Application")

With oExcel
Randomize
.Visible = False 'verhindert, daß Excel angezeigt wird

.Workbooks.Open "Pfad der Exceltabelle"

'Wenn du nun eine Zeile an eine bestehende Tabelle anfügen willst - ich setze voraus du weißt welche Spalten (inkl. Bezeichnung) die Tabelle hat, wanderst du nun so lange die Tabellenzeilen entlang bis du am Ende eine neue leere Zeile hast:

do while .Cells(1,i ) =""
i = i +1
loop

'wenn nun also den Wert für i - also der ersten leeren Zeile in Excel - hast, kannst du ganz bequem die Daten auslesen und anfügen:

dim dbs as dao.database
dim rs as dao.recordset
dim fld as dao.field
dim stg as string

set dbs = currentdb
set rs = dbs.openrecordset ("Select * From Tabelle WHERE Spalte = ????")

'Nur ein DS?

If rs.bof then Exit sub 'Beendet die Routine, wenn kein DS vorhanden ist

rs.movelast
if rs.recordcount > 1 then exit sub 'beendet die Routine,wenn mehr als 1 DS vorhanden ist.

'Bitte auch eine Reaktion einbauen... Meldung der Art MsgBox "Fehler ...."

j = 1

for each fld in rs.fields
stg =rs(fld.name)
'Wenn die Anordnung der Tabellenspalten der Struktur der Datenbanktabelle entspricht:
.cells(j, i) = stg
j = j + 1
next fld

'Nun speichern wir das janze:
.ActiveWorkbook.Save
.Workbooks.Close
.Quit
end with ' Beenden den Verweis

'Beenden den DS-Zugriff
rs.close
set rs = Nothing
set dbs = Nothing

Wenn du mit Excel.Application arbeitest, die Funktion schrittweise ausführst und das Testfenster öffnest, wirst du feststellen, daß du auch ein neues Tabellenblatt erstellen kannst, eine ganz neue Exceltabelle erstellen kannst, in jedes beliebige Sheet schreiben kannst, usw...

Hoffe das hat dir ein wenig weitergeholfen,...

Gruß Leo

Antwort 2 von Marcel1983

Jo Danke!!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: