Office: Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben

Helfe beim Thema Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Experten, ich will mittels Excel VBA auf eine Access DB zugreifen (read only). Aus dieser DB möchte ich eine Abfrage starten und das Ergebnis in... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von skyfe, 15. April 2009.

  1. Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben


    Hallo Experten,

    ich will mittels Excel VBA auf eine Access DB zugreifen (read only). Aus dieser DB möchte ich eine Abfrage starten und das Ergebnis in das Excel Worksheet schreiben. Die Abfrage soll spezifisch mit einem Parameter aus z.B. einer Excel Zelle starten.

    Bsp.:

    DB Abfrage:

    2 Tabellen


    Excel:

    Ich will in eine Zelle z.B. "2009" eingeben. Das VBA Makro soll mir nun nur folgende Abfrage starten und ins Worksheet ausgeben:

    SELECT tab1.Segment, tab1.Region, tab1.[2004], tab2.[2004], tab1.[2005], tab2.[2005], tab1.[2006], tab2.[2006], tab1.[2007], tab2.[2007], tab1.[2008], tab2.[2008], tab1.[2009], tab2.[2009]
    FROM tab1 INNER JOIN tab2 ON (tab1.Segment = tab2.Segment) AND (tab1.Region = tab2.Region);

    Gebe ich jetzt in der Parameterzelle "2007" ein, dann soll nur diese Abfrage starten:

    SELECT tab1.Segment, tab1.Region, tab1.[2004], tab2.[2004], tab1.[2005], tab2.[2005], tab1.[2006], tab2.[2006]
    FROM tab1 INNER JOIN tab2 ON (tab1.Segment = tab2.Segment) AND (tab1.Region = tab2.Region);


    Wie kann ich das flexibel gestalten und realisieren?

    Danke!

    :)
     
  2. OfficeUser Neuer User
    Hallo skyfe,

    Du kannst den SQL-String in einerSchleife dynamisch zusammensetzen - hier ein Beispiel für die Jahreszahl (z.B. 2009) in Zelle A1 :

    VBA-Code:
    Sub SQLAbfrage()
        Dim strSQL As String, intT As Integer

        'SELECT tab1.Segment, tab1.Region, tab1.[2004], tab2.[2004],
        'tab1.[2005], tab2.[2005], tab1.[2006], tab2.[2006], tab1.[2007],
        'tab2.[2007], tab1.[2008], tab2.[2008], tab1.[2009], tab2.[2009]
        'FROM tab1 INNER JOIN tab2 ON (tab1.Segment = tab2.Segment) AND '
        '(tab1.Region = tab2.Region);

        strSQL = "SELECT tab1.Segment, tab1.Region"
        For intT = 2004 To [A1].Value 'In A1 steht das Jahr, z.B. 2009

            strSQL = strSQL & ", tab1.[" & intT & "], tab2.[" & intT & "]"
        Next
        strSQL = strSQL & " FROM tab1 INNER JOIN tab2 ON "
        strSQL = strSQL & "(tab1.Segment = tab2.Segment) AND "
        strSQL = strSQL & "(tab1.Region = tab2.Region);"

        'Hier die weitere Bearbeitung des strSQL-Strings:
        MsgBox strSQL
    End Sub
    Code eingefügt mit Syntaxhighlighter 4.15
    Den SQL-String kannst Du nun in Deiner Abfrage weiterverwenden.
     
    OfficeUser, 17. April 2009
    #2
  3. Eine Abfrage ist eine SQL-Anweisung.

    Das Ergebnis der dynamisch erstellten SQL-Anweisung kannst Du so in Dein Arbeitsblatt übernehmen:
    Code:
    Anmerkung: Feldbezeichnungen 2004, 2005, 2006, ... in einer Datenbanktabelle weisen auf ein falsches Datenmodell hin (Stichwort Normalisierung). Falsch schon z.B. deshalb, weil man wie oben angefragt solche "Verdrehungen" anstellen muss.
    Real sollten Tabellen und die resultierende Abfrage anders aussehen.
     
  4. Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben

    Hallo,

    @NoNet: Danke für dein Codebeispiel, funktioniert bestens!

    @ebs17: Da hast du sicher Recht mit der Normalisierung, aber das Thema ist bei mir schon sehr lange her (damals in der Schule) :-)

    Danke!
     
  5. Das nenne ich dann ein selbstausgestelltes Armutszeugnis. Es heißt doch: "Lernen, lernen und nochmals lernen" (Lenin), nicht "Vegessen, vergessen, ..."
     
  6. Hallo zusammen,

    habe mir gerade das Thema durchgelsen und dachte ich könnte vieleicht noch folgende Frage anfügen:

    ich importiere aus Excel Daten in ein ERP System über eine ODBC Schnittstelle.
    Es handelt sich um Artikelbezeichungen in verschiedenen Sprachen.
    Da ich den SQL Befehl mit verschieden Variablen zusammensetzte verwenden ich folgenden Syntax:

    Code:
    INSERT INTO ArtText (ArtNr,SprKz,ArtBez1,ArtBez2,ME) VALUES ('" & Cells(i, 10).Value & "','E',""" & Cells(i, 22).Value & """,""" & Cells(i, 25).Value & """,'" & mengeneinheitEN & "')"


    Ich habe viele ' in meinem String deswegen habe ich die 3 """ verwendet. Leider habe ich aber nun auch viele " in meinem String und bekomme nun diverse Fehlermedlungen.

    Was kann ich hier tun um wirklich den kompletten String mit ALLEn Sonderzeichen " ' usw. zu importieren?

    Vielen Dank schonmal
     
  7. verwende die einfachen tuetelchen innerhalb deines sql-statements, verwende chr(34) fuer die verwendung der doppelten ohne sie als text eingeben zu müssen oder definiere eine konstante mit chr(34) und verwende diese anstelle.
     
    rushifell, 10. Januar 2014
    #7
  8. Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben

    Eine Anfügeabfrage, die nur einen Datensatz anfügt (wie bei Verwendung von VALUES) und ein Insert per Recordset sind etwa in Aufwand und Geschwindigkeit gleichwertig. Bei der zweiten Variante muss man aber nicht einen zusammenhängenden String bauen und hat somit nicht das Doublequote-Problem.
    Code:
     
  9. ich dachte, es ging allgemein um das "zurechtbasteln" von sql-statements. mein fehler.
     
    rushifell, 10. Januar 2014
    #9
  10. Nein, nein, Du hattest schon richtig gedacht. Das Problem ist nur, wenn die Werte aus den Excelzellen selber Quotes und Doublequotes enthalten, dann kann das ganz schnell dazu führen, dass der Gesamtstring für die SQL-Anweisung auseinanderfliegt. Das Gegensteuern mit den von Dir genannten Maßnahmen - ein Replace für eine Verdopplung von solchen Zeichen käme noch hinzu - ist möglich, aber etwas unübersichtlich.
    Daher brachte ich eine Alternative ins Spiel, die man da problemfreier anwenden kann. Man denke dabei auch an die datentypgerechte Formatierung der Werte, die die Anfügeabfrage benötigt, die jetzt auch nicht von jedem beherrscht wird.
     
  11. habs kapiert. danke.
     
    rushifell, 10. Januar 2014
    #11
Thema:

Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben

Die Seite wird geladen...
  1. Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben - Similar Threads - Variablengesteuerte SQL Abfrage

  2. SQL-Abfrage mit where

    in Microsoft Access Hilfe
    SQL-Abfrage mit where: SQL-Abfrage mit where-Parameter. PNrHaupt ist eine Zahl. Ich vermute, da liegt der Fehler, aber ich weiss nicht, wie ich das darstellen soll. Bei jeder neuer PNrHaupt soll eine neue Datei erstellt...
  3. Apostroph in sql Recordset

    in Microsoft Access Hilfe
    Apostroph in sql Recordset: Hallo Gemeinde, einen hätte ich noch: sqlTitel = "SELECT * FROM tbl_Files_Edited WHERE Titel='" & strTitel & "'" Set rs1 = db.OpenRecordset(sqlTitel) Enthält strTitel einen...
  4. Access - SQL: Inhalt auf 255 Zeichen beschränkt

    in Microsoft Access Hilfe
    Access - SQL: Inhalt auf 255 Zeichen beschränkt: Hallo zusammen, in Access habe ich ein Modul mit folgender Funktion: Public Function SQLListe(Nummer As Long) As String Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT Dokument...
  5. Abfrage mit den jüngsten Einträgen erstellen

    in Microsoft Access Hilfe
    Abfrage mit den jüngsten Einträgen erstellen: Hallo liebe Experten, ich bastel gerade an einer Access-Datenbank für die Besuche meiner Klienten. Aus meiner Tabelle "KlientenT" und einer weiteren Tabelle mit "BesucheT" möchte ich eine Abfrage...
  6. Tabellen-Datenquelle in ganzem Dokument ändern

    in Microsoft Access Hilfe
    Tabellen-Datenquelle in ganzem Dokument ändern: Hallo, ich habe eine Access-Datenbank (FE & BE getrennt) mit mehreren Tabellen, Abfragen und Formularen. Nun möchte ich das BE nach SQL migrieren. Den Assistenten hierzu scheint es ja nicht mehr...
  7. Binäre Dateien verarbeiten

    in Microsoft Access Hilfe
    Binäre Dateien verarbeiten: Hallo zusammen, nachdem ich weder auf deutsch- noch englischsprachigen Foren fündig werde, bitte ich Euch um Unterstützung. Ich habe eine PostgreSQL-Datenbank, darin Bytea-Felder gefüllt mit...
  8. Binäre Dateien verarbeiten

    in Sonstiges
    Binäre Dateien verarbeiten: Hallo zusammen, nachdem ich weder auf deutsch- noch englischsprachigen Foren fündig werde, bitte ich Euch um Unterstützung. Ich habe eine PostgreSQL-Datenbank, darin Bytea-Felder gefüllt mit...

Users found this page by searching for:

  1. excel vba sql  parameter wert aus zelle

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden