Office: SQL Abfrage in Excel

Helfe beim Thema SQL Abfrage in Excel in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen Ich lasse mir in Excel eine Tabelle mittels SQL ausgeben: SELECT KHKVKBelege.Belegnummer, KHKVKBelegePositionen.BelID,... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von grunz, 8. Januar 2013.

  1. grunz Neuer User

    SQL Abfrage in Excel


    Hallo zusammen

    Ich lasse mir in Excel eine Tabelle mittels SQL ausgeben:

    SELECT KHKVKBelege.Belegnummer, KHKVKBelegePositionen.BelID, KHKVKBelegePositionen.BelPosID, KHKVKBelegePositionen.Artikelnummer, KHKArtikel.Matchcode,
    KHKArtikelVarianten.EANNummer, KHKVKBelege.Referenznummer, KHKVKBelege.A1Zusatz, KHKVKBelegePositionen.Menge, KHKVKBelege.Nettobetrag,
    KHKVKBelege.Belegdatum, KHKVKBelege.Kundengruppe
    FROM KHKVKBelegePositionen INNER JOIN
    KHKVKBelege ON KHKVKBelegePositionen.BelID = KHKVKBelege.BelID AND KHKVKBelegePositionen.Mandant = KHKVKBelege.Mandant INNER JOIN
    KHKVKBelegeVorgaenge ON KHKVKBelegePositionen.BelID = KHKVKBelegeVorgaenge.BelID AND
    KHKVKBelege.Mandant = KHKVKBelegeVorgaenge.Mandant INNER JOIN
    KHKArtikelVarianten ON KHKVKBelegePositionen.Artikelnummer = KHKArtikelVarianten.Artikelnummer AND
    KHKVKBelegePositionen.Mandant = KHKArtikelVarianten.Mandant INNER JOIN
    KHKArtikel ON KHKArtikelVarianten.Artikelnummer = KHKArtikel.Artikelnummer AND KHKArtikelVarianten.Mandant = KHKArtikel.Mandant
    WHERE
    (KHKVKBelege.Belegkennzeichen = 'VLR')
    AND (KHKVKBelegePositionen.Artikelnummer = Platzhalter )
    AND (KHKVKBelege.Belegdatum > '2012')
    AND (KHKVKBelege.Kundengruppe='66' or KHKVKBelege.Kundengruppe='67')
    AND (KHKVKBelegeVorgaenge.VorID NOT IN
    (SELECT KHKVKBelegeVorgaenge_1.VorID
    FROM KHKVKBelege AS KHKVKBelege_1 INNER JOIN
    KHKVKBelegeVorgaenge AS KHKVKBelegeVorgaenge_1 ON KHKVKBelege_1.BelID = KHKVKBelegeVorgaenge_1.BelID AND
    KHKVKBelege_1.Mandant = KHKVKBelegeVorgaenge_1.Mandant
    WHERE (KHKVKBelege_1.Belegkennzeichen = 'VFS') AND (KHKVKBelege_1.Kundengruppe = KHKVKBelege.Kundengruppe) AND
    (KHKVKBelege_1.Mandant = KHKVKBelege.Mandant)))
    order by KHKVKBelege.Belegdatum

    Statt dem Wort Platzhalter hätte ich an der Stelle gerne den Wert der Zelle N14 in Tabelle2. Wie stelle ich das an?
    Habe schon alles möglich, auch an Tipps, ausprobiert, aber nichts funktioniert. Hilfe!

    Danke schon mal vorab.

    Gruß
     
  2. Exl121150 Erfahrener User
    Hallo,

    das folgende Makro mittels Kopieren und Einfügen in das Code-Modul des Arbeitsblattes kopieren, in dem auch Deine zu modifizierende Abfragetabelle enthalten ist.
    1) Das Makro ist so konzipiert, dass es auf Datenänderungen in dem Blatt reagiert, in dessen Codemodul es eingefügt wurde (Ereignis Datenänderung im aktiven Arbeitsblatt).
    2) Daraufhin holt es sich den Inhalt der Zelle 'Tabelle2!N14' und speichert ihn zuerst in der Variablen Platzhalter$ und in weiterer Folge an der gewünschten Position der SQL-Abfrage-Variablen 'SqlAbfrage$'.
    3) Diese letztere Variable wird als SQL-Kommando an die 1. Abfragetabelle (Me.QueryTables(1)) des aktiven Arbeitsblattes (in dessen Codemodul sich dieses Makro befindet) übergeben.
    4) Damit Punkt 3) funktioniert, muss natürlich für diese Abfragetabelle eine gültige Datenverbindung zur Datenquelle existieren. Dies nehme ich an, da Du vermutlich für feste Werte von PLATZHALTER die SQL-Abfrage bereits ausgeführt haben wirst.


    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim SqlAbfrage$
      Dim Platzhalter$
      
      On Error GoTo Err_Ws_Change
      Application.EnableEvents = False
        
      Platzhalter$ = Worksheets("Tabelle2").Range("N14").Value
      
      'Falls KHKVKBelegePositionen.ARTIKELNUMMMER ein TEXT-Feld ist, muss der Inhalt von Platzhalter$ in "'" gesetzt werden:
      Platzhalter$ = "'" & Platzhalter$ & "'"
      
      SqlAbfrage$ = _
        "SELECT KHKVKBelege.Belegnummer, KHKVKBelegePositionen.BelID, KHKVKBelegePositionen.BelPosID, KHKVKBelegePositionen.Artikelnummer, KHKArtikel.Matchcode, " & _
        "KHKArtikelVarianten.EANNummer, KHKVKBelege.Referenznummer, KHKVKBelege.A1Zusatz, KHKVKBelegePositionen.Menge, KHKVKBelege.Nettobetrag, " & _
        "KHKVKBelege.Belegdatum , KHKVKBelege.Kundengruppe " & _
        "FROM KHKVKBelegePositionen INNER JOIN " & _
        "KHKVKBelege ON KHKVKBelegePositionen.BelID = KHKVKBelege.BelID AND KHKVKBelegePositionen.Mandant = KHKVKBelege.Mandant INNER JOIN " & _
        "KHKVKBelegeVorgaenge ON KHKVKBelegePositionen.BelID = KHKVKBelegeVorgaenge.BelID AND " & _
        "KHKVKBelege.Mandant = KHKVKBelegeVorgaenge.Mandant INNER JOIN " & _
        "KHKArtikelVarianten ON KHKVKBelegePositionen.Artikelnummer = KHKArtikelVarianten.Artikelnummer AND " & _
        "KHKVKBelegePositionen.Mandant = KHKArtikelVarianten.Mandant INNER JOIN " & _
        "KHKArtikel ON KHKArtikelVarianten.Artikelnummer = KHKArtikel.Artikelnummer AND KHKArtikelVarianten.Mandant = KHKArtikel.Mandant " & _
        "WHERE " & _
        "(KHKVKBelege.Belegkennzeichen = 'VLR') " & _
        "AND (KHKVKBelegePositionen.Artikelnummer = [COLOR="#FF0000"]" & Platzhalter$ & "[/COLOR] ) " & _
        "AND (KHKVKBelege.Belegdatum > '2012') " & _
        "AND (KHKVKBelege.Kundengruppe='66' or KHKVKBelege.Kundengruppe='67') " & _
        "AND (KHKVKBelegeVorgaenge.VorID NOT IN " & _
        "(SELECT KHKVKBelegeVorgaenge_1.VorID " & _
        "FROM KHKVKBelege AS KHKVKBelege_1 INNER JOIN " & _
        "KHKVKBelegeVorgaenge AS KHKVKBelegeVorgaenge_1 ON KHKVKBelege_1.BelID = KHKVKBelegeVorgaenge_1.BelID AND " & _
        "KHKVKBelege_1.Mandant = KHKVKBelegeVorgaenge_1.Mandant " & _
        "WHERE (KHKVKBelege_1.Belegkennzeichen = 'VFS') AND (KHKVKBelege_1.Kundengruppe = KHKVKBelege.Kundengruppe) AND " & _
        "(KHKVKBelege_1.Mandant = KHKVKBelege.Mandant))) " & _
        "ORDER BY KHKVKBelege.Belegdatum; "
      
      'Me: bezieht sich auf das aktive Arbeitsblatt: in diesem Fall ist es zB. 'Worksheets("Tabelle1")'.
      'Me.QueryTables(1): bezieht sich dann auf die 1. Abfragetabelle im Arbeitsblatt 'Tabelle1'.
      '   In dieser Abfragetabelle muss eine bereits bestehende, gültige Verbindung(szeichenfolge) zu einer SQL-Datenquelle existieren.
      '   Mit dieser Verbindung wird mit Hilfe der Variablen SQLABFRAGE$ im Folgenden eine SQL-Abfrage ausgeführt, indem
      '   a) der Eigenschaft ".CommandText" die SQL-Abfrage, die in der Variablen SQLABFRAGE$ enthalten ist, zugewiesen wird;
      '   b) die Methode ".Refresh" ausgeführt wird. Dadurch wird die Abfrage erneut ausgeführt. In diesem Fall wird festgelegt,
      '      dass die Abfrage nicht im Hintergrund ausgeführt werden soll, d.h. sie wird sofort ausgeführt.
      '
      With Me.QueryTables(1)
        .CommandText = SqlAbfrage$
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = 0 'Überschreiben aller Zellwerte im Resultatsbereich
        .SavePassword = True
        .SaveData = False
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
      End With
      
    Err_Ws_Change:
      Application.EnableEvents = True
      
    End Sub
    
    
     
    Exl121150, 8. Januar 2013
    #2
Thema:

SQL Abfrage in Excel

Die Seite wird geladen...
  1. SQL Abfrage in Excel - Similar Threads - SQL Abfrage Excel

  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. 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...
  4. Mit SQL-Abfragen Access-Daten in Excel übertrage

    in Microsoft Excel Hilfe
    Mit SQL-Abfragen Access-Daten in Excel übertrage: Hallo Leute, ich habe ein großes Problem an dem ich schon seit 2 Tagen sitze und nicht weiter komme. Im großen und ganzen versuche ich von EXCEL-VBA aus eine Select-Anweisung zu schreiben,...
  5. Excel 2016 ODBC SQL Abfrage mit Zellbezug

    in Microsoft Excel Hilfe
    Excel 2016 ODBC SQL Abfrage mit Zellbezug: Hallo Zusammen, da ich leider nicht fündig geworden bin mache ich jetzt mal ein neues Thema auf. Ich hab eine SQL Abfrage die auch funktioniert die lautet Code: SELECT "- Standard Calendar"."Day...
  6. Variablengesteuerte SQL Abfrage aus Excel VBA starten und in Zellen ausgeben

    in Microsoft Excel Hilfe
    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...
  7. SQL Abfrage: Jahreszahl selektieren

    in Microsoft Access Hilfe
    SQL Abfrage: Jahreszahl selektieren: Hallo ich möchte mir über eine Abfrage nur Datensätze aus einem bestimmten Jahr anschauen (Jahreszahlen stehen in CBO:JAHR drin) : Me.Liste.RowSource = "SELECT * FROM Abfrage_Datum where...
  8. Access SQL Abfrage

    in Microsoft Access Hilfe
    Access SQL Abfrage: Guten MOrgen, ich bin grade etwas unglücklich über meine SQL Abfrage Code: SELECT MITGLIED.NAME, MITGLIED.VORNAME, MITGLIED.AUSWEISNR, FucAlter([Mitglied].[Geburtstag]) AS [Alter],...
  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