ich muss für die Firma einen Finanzplan (bzw. die Software
dazu ;-) erstellen. Die Daten liegen in einer Access-DB.
Um die Formatierung möglichst benutzerdefiniert zu halten,
habe ich mir gedacht, den Finanzplan durch ein Excel-Sheet
darzustellen.
Die einzelnen Zeilen werden über MS-Query aus der Access-
DB gelesen (ID + Bezeichnung der Position).
In den einzelnen Spalten (entspricht den Kalenderwochen)
werden Formeln hinterlegt, die über die ID (siehe oben)
den entsprechenden Wert aus der Datenbank holen.
Was haltet ihr von dieser Vorgangsweise?
Wie kann ich eine Abfrage per VBA-Code erstellen? Ich habe
mir per Makro-Recorder und Assistent den erzeugten Code an-
geschaut (ist zur Zeit nur ein Test):
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Microsoft Access-Datenbank;DBQ=D:\Durchblick\Firma
\Finanzcontrolling\Prog\efc_prg.mdb;DefaultDir=D:\Durchblick\Firma
\Fina" _
), Array( _
"nzcontrolling\Prog;DriverId=25;FIL=MS Access;MaxBufferSize=
2048;PageTimeout=5;" _
)), Destination:=Range("D5"))
.CommandText = Array( _
"SELECT `Finanzplan Texte`.FPID, `Finanzplan Texte`.FPBez" & Chr
(13) & "" & Chr(10) & "FROM `D:\Durchblick\Firma\Finanzcontrolling\Prog
\efc_prg`.`Finanzplan Texte` `Finanzplan Texte`" & Chr(13) & "" & Chr
(10) & "ORDER BY `Finanzplan Texte`.FPBez" _
)
...
Muss man da diese Array-Syntax verwenden? In der Hilfe habe ich
nichts Entsprechendes gefunden.
Kann ich die Daten auch per OLEDB holen?
Apropos Hilfe: kann ich irgendwo abstellen, dass mein VBA-Fenster
dauernd in der Grösse angepasst wird, sobald ich die Hilfe aufrufe
bzw. das Hilfe-Fenster aktiviert - das nervt wirklich *nirg*
Herzlichen Dank,
Gerald
> ich muss für die Firma einen Finanzplan (bzw. die Software
> dazu ;-) erstellen. Die Daten liegen in einer Access-DB.
> Um die Formatierung möglichst benutzerdefiniert zu halten,
> habe ich mir gedacht, den Finanzplan durch ein Excel-Sheet
> darzustellen.
> Die einzelnen Zeilen werden über MS-Query aus der Access-
> DB gelesen (ID + Bezeichnung der Position).
> In den einzelnen Spalten (entspricht den Kalenderwochen)
> werden Formeln hinterlegt, die über die ID (siehe oben)
> den entsprechenden Wert aus der Datenbank holen.
> Was haltet ihr von dieser Vorgangsweise?
wenn ich das richtig verstanden habe, hast Du in Spalte 1 die ID, in Spalte
2 die Position, beides Daten aus der Access-DB. Ab Spalte 3 dann Deine
Kalenderwochen, die per Formel oder sonstwie auf die Spalten 1 und 2
zugreifen. Ich nehme mal an, es werden immer konstant 2 Felder aus Access
abgefragt und Du willst diese Daten in Excel weiterbearbeiten und/oder
aufbereiten, aber keine Daten danach wieder in die DB schreiben...
Prinzipiell (da Deine Beschreibung recht allgemein gehalten ist) würde ich
sagen, Deine Vorgehensweise ist ok.
> Wie kann ich eine Abfrage per VBA-Code erstellen? Ich habe
> mir per Makro-Recorder und Assistent den erzeugten Code an-
> geschaut (ist zur Zeit nur ein Test):
>
> With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
> "ODBC;DSN=Microsoft Access-Datenbank;DBQ=D:\Durchblick\Firma
> \Finanzcontrolling\Prog\efc_prg.mdb;DefaultDir=D:\Durchblick\Firma
> \Fina" _
> ), Array( _
> "nzcontrolling\Prog;DriverId=25;FIL=MS Access;MaxBufferSize=
> 2048;PageTimeout=5;" _
> )), Destination:=Range("D5"))
> .CommandText = Array( _
> "SELECT `Finanzplan Texte`.FPID, `Finanzplan Texte`.FPBez" &
> Chr (13) & "" & Chr(10) & "FROM
> `D:\Durchblick\Firma\Finanzcontrolling\Prog \efc_prg`.`Finanzplan
> Texte` `Finanzplan Texte`" & Chr(13) & "" & Chr (10) & "ORDER BY
> `Finanzplan Texte`.FPBez" _ )
> ...
>
> Muss man da diese Array-Syntax verwenden? In der Hilfe habe ich
> nichts Entsprechendes gefunden.
Tja, zu MSQuery kann ich Dir nicht viel sagen, ich arbeite nicht damit, ich
hole mir meine Daten per ADO, womit wir dann zu Deiner nächsten Frage
kommen...
> Kann ich die Daten auch per OLEDB holen?
In der Annahme, dass Du damit im Prinzip ADO meinst (eventuell auch DAO, ist
aber nicht mehr so angesagt), klar, geht ;-)
Was Du dazu brauchst (damit meine ich jetzt ADO), ist erstmal ein Verweis
auf die Bibliothek:
[geklaut von Reiner, er ist mir dafür bestimmt nicht böse]
Man gehe in den VBA-Editor, setze einen Verweis auf die "Microsoft
ActiveX Data Objects 2.7"-Bibliothek (sollte sich dort nicht zumindest
eine 2.5 finden lassen, sollte man eine aktuelle MDAC-Version auf seinem
Rechner installieren www.microsoft.com/data)
[Ende Zitat]
Weiterhin musst Du wissen, wie Du auf die Access-DB zugreifst (mit/ohne
Passwort, wo sie ist -> Pfad und dergl). Diese Sachen benötigst Du für den
Connectionstring. Anbei ein Minibeispiel (kein Passwort) für den Zugriff auf
eine MDB, auslesen der Daten von Tabelle1 und einfügen der Daten in das
aktuelle Tabellenblatt, beginnend ab Zelle A1:
Sub VerbindungMDB()
Dim cnn As ADODB.Connection
Dim rec As ADODB.Recordset
Set cnn = New ADODB.Connection
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=KompletterPfadZuDeinerMDB;User Id=admin;Password=;"
.Open
End With
Set rec = New ADODB.Recordset
rec.Open "Tabelle1", cnn, adOpenKeyset, adLockOptimistic, adCmdTable
ActiveSheet.Cells(1, 1).CopyFromRecordset rec
End Sub
> Apropos Hilfe: kann ich irgendwo abstellen, dass mein VBA-Fenster
> dauernd in der Grösse angepasst wird, sobald ich die Hilfe aufrufe
> bzw. das Hilfe-Fenster aktiviert - das nervt wirklich *nirg*
Klingt irgendwie nach Excel 2000... keine Ahnung, hat mich auch genervt, da
kann ich Dir leider nicht helfen :-)
Vielleicht hilft Dir ja der übrige Teil
Viele Grüße aus dem hohen Norden Deutschlands
Susanne
Hallo Susanne,
danke für deine Infos. Soweit ist alles klar. Der Vorteil der
Abfragen mit MS Query ist, dass die Zeilen automatisch erweitert
werden, falls neue Zeilen dazukommen (und die Formeln mitkopiert).
Diesen Programmcode wollte ich mir ersparen, aber ich muss noch
evaluieren, ob das Sinn macht.
Ein anderes Problem ist, dass ich wahrscheinlich sehr wohl Daten
zurückschreiben muss, aber da hab ich bereits ein paar Ideen.
> > Apropos Hilfe: kann ich irgendwo abstellen, dass mein VBA-Fenster
> > dauernd in der Grösse angepasst wird, sobald ich die Hilfe aufrufe
> > bzw. das Hilfe-Fenster aktiviert - das nervt wirklich *nirg*
> Klingt irgendwie nach Excel 2000... keine Ahnung, hat mich auch genervt, da
> kann ich Dir leider nicht helfen :-)
>
Ja, Excel 2000 - ich vergess immer wieder die genaue Version zu
erwähnen ;-)
> Viele Grüße aus dem hohen Norden Deutschlands
> Susanne
Bei dir ist's wenigstens (hoffentlich) angenehm kühl ;-)
schöne Grüsse aus dem (zur Zeit) heissen Graz,
Gerald
> danke für deine Infos. Soweit ist alles klar. Der Vorteil der
> Abfragen mit MS Query ist, dass die Zeilen automatisch erweitert
> werden, falls neue Zeilen dazukommen (und die Formeln mitkopiert).
könntest Du natürlich mit in ein Makro basteln, was beim Öffnen der
Arbeitsmappe automatisch ausgeführt wird, dann hättest Du diesen Vorteil
ebenfalls ;-)
> Bei dir ist's wenigstens (hoffentlich) angenehm kühl ;-)
Hier ist es zwar auch heftig heiß, wir haben aber eine leichte Brise und die
Ostsee zum Reinspringen :-)
> schöne Grüsse aus dem (zur Zeit) heissen Graz,
Bei so einer Wetterlage (wenn auch nur minimal kühler) ist tatsächlich der
Norden dem Süden vorzuziehen :-)
Susanne