Thema Datum  Von Nutzer Rating
Antwort
07.06.2022 20:57:50 Kerstin
NotSolved
07.06.2022 23:26:03 Gast62166
NotSolved
07.06.2022 23:42:00 Gast39651
NotSolved
08.06.2022 08:45:56 Gast82824
*****
Solved
Rot Variant aus Datenbank umformatieren und in Word ausgeben
08.06.2022 13:15:12 Gast63282
NotSolved

Ansicht des Beitrags:
Von:
Gast63282
Datum:
08.06.2022 13:15:12
Views:
383
Rating: Antwort:
  Ja
Thema:
Variant aus Datenbank umformatieren und in Word ausgeben

Hallo Kerstin

Das Makro arbeitet in einer UserForm und die Ergebnisse aus der SQL Abfrage werden in eine Listbox geschrieben richtig? Funktioniert das Befüllen der Listbox? Denn dann ist der SQL Teil bereits abgehandelt und du kannst "einfach" die Items aus der Listbox in dein Word Dokument übernehmen. Du kannst auch die Listbox weglassen und direkt in das Word Dokument schreiben. Dafür musst Du den ersten geposteten Teil deines Makros so umbauen, dass der ganze With Me.lstResult-Block nicht in die Listbox, sondern in das Dokument schreibt.

Die Methode GetInfo() liefert den Wert True oder False zurück, wenn über den SQL-String Datensätze in der Datenbank gefunden wurden oder eben nicht. Den Datenbankzugriff selbst führt die Funktion auch aus. Deshalb wird vermutlich extra hervorgehoben, dass der Parameter varResult ByRef übergeben wird. Das bedeutet By Reference, während ByVal By Value bedeutet.

Kurze Erklärung:

ByRef ist default und wird automatisch gewählt, wenn nicht explizit ByVal hingeschrieben wird. Objekte können ausschließlich ByRef übergeben werden. By Reference bedeutet, es werden nicht die eigentlichen Daten einer Variable an eine Methode übergeben, sondern lediglich die Referenz, wo im Speicher diese Inhalte abgelegt sind. Wird innerhalb einer Methode schreibend mit so einer Referenz gearbeitet, wird der Inhalt so einer Variablen auch außerhalb der Methode verändert. In Deinem Fall wird also der Inhalt von varResult durch GetInfo() verändert. Es wird nämlich das Ergebnis der DB Abfrage reingeschrieben.

ByVal hingegen übergibt eine Kopie des Variableninhalts an eine Mathode. Wird z.B. eine 10 übergeben und innerhalb der Methode durch 2 geteilt, hat die Variable innerhalb der Methode den Wert 5. Außerhalb ist es aber eine andere Variable und der Inhalt bleibt 10.

Was ist nun varResult und warum ist der Datentyp Variant gewählt worden?

Die Variable varResult ist ein zweidimanesionales Array. Das siehst du an diesem Code-Fragment: UBound(m_varResult, 2). UBound() ist eine Funktion, die die obere Grenze eines Arrays zurückgibt. Der zweite Parameter (hier die 2) gibt die Dimension des Arrays an, von der die Grenze abgefragt werden soll. Es könnte auch ein 3 oder Mehrdimensionales Array sein. Aber es ist ein Zweidimensionales, weil aus der DB eine Tabelle erwartet wird, deren Zeilen halt in dieses Array geschrieben werden sollen.

Ist die DB Abfrage fertig, steht alles was Du möchtest in diesem Array (sofern der DB Zugriff erfolgreich war, was GetInfo() dir aber direkt mitteilt). Was ich eingangs über das Schreiben in die ListBox sagte, kannst du hier also erweitern auf ... Du brauchst nur die Inhalte dieses Arrays auslesen und kannst die hinschreiben wo Du willst.

Der Datentyp Variant erscheit erstmal komisch, denn aus der DB werden ja nur Zeichenketten geholt. Man könte also denken, ein Array vom Typ String wäre besser, weil man direkt sieht, womit man es zu tun hat. In der Theorie stimmt das, in der Praxis (von VBA) wird aber auf Variant zurückgegriffen, wenn nicht sicher ist, ob es wirklich nur Strings gibt, die das Makro versucht im Array unterzubringen oder mit For Each gearbeitet werden soll, um über alle Elemente des Arrays zu iterieren.

In deinem Fall bin ich nicht siocher, was die DB liefert, wenn es keine Ergebnisse für eine SQL Abfrage gibt. Evtl. wird da Null zurückgeliefert und das ist kein String, könnte aber in den Datentyp Variant geschrieben werden.

Vielleicht hilft dir die kleine Aufschlüsselung, was dein Makro eigentlich macht etwas weiter.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
07.06.2022 20:57:50 Kerstin
NotSolved
07.06.2022 23:26:03 Gast62166
NotSolved
07.06.2022 23:42:00 Gast39651
NotSolved
08.06.2022 08:45:56 Gast82824
*****
Solved
Rot Variant aus Datenbank umformatieren und in Word ausgeben
08.06.2022 13:15:12 Gast63282
NotSolved