Anzeige
Archiv - Navigation
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
984to988
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

abfragen fortlaufend ausführen

abfragen fortlaufend ausführen
12.06.2008 16:09:28
hwe
hallo zusammen,
super forum...konnte schon einiges mitnehmen. aber für mein problem will mir einfach der richtige ansatz nicht einfallen:
ich habe eine funktionstüchtige DB-abfrage als Makro, die mir alle werte (y) zu einem bestimmten wert (x) listet...und in eine separate datei speichert.
dies ganze ist sehr zeit- und betreuungsintensiv, darum sollte dies außerhalb der geschäftszeit stattfinden..
wie kann ich die prozedur nun dahingehend ändern, dass nach einer erfolgreichen abfrage der nächste wert (x) abgefragt wird?
ist dies mit einer for-next schleife zu bewerkstelligen?
wie müsste die übergabe des (x)-wertes an die abfrage aussehen?
hoffe es ist jemand da draußen der mir helfen kann.
grüße
hwe

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: abfragen fortlaufend ausführen
12.06.2008 16:43:34
Tino
Hallo,
hier mal ein simples Beispiel um eine Liste in einer Schleife abzuarbeiten.
In diesem Beispiel befindet sich die Liste auf der Tabelle1 in A1:A… ohne leere Zellen zu beachten.
Hilft Dir dies, bei Deinem Vorhaben?

Sub Schleife()
Dim Bereich As Range, MeSuchWert As String
'in diesem Beispiel Befindet sich die Liste in Tabelle1 A:A ohne Leerzeilen zu beachetn
With Sheets("Tabelle1")
For Each Bereich In .Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
MeSuchWert = Bereich.Value 'Übergabe Wert an MeSuchWert
'Deine DB Abfrage
Next Bereich
End With
End Sub


Gruß Tino
www.tinomargit.com

Anzeige
hoffentlich hat es hier keiner gemerkt ...
12.06.2008 17:33:19
Tino
Hallo,
... ich habe zwei Pünktchen vergessen.

Sub Schleife()
Dim Bereich As Range, MeSuchWert As String
'in diesem Beispiel Befindet sich die Liste in Tabelle1 A:A ohne Leerzeilen zu beachetn
With Sheets("Tabelle1")
For Each Bereich In .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
MeSuchWert = Bereich.Value 'Übergabe Wert an MeSuchWert
'Deine DB Abfrage
Next Bereich
End With
End Sub


Gruß Tino
www.tinomargit.com

AW: abfragen fortlaufend ausführen
12.06.2008 17:36:22
hwe
hallo tino,
dank dir vorab für die schnelle antwort, kann aber erst morgen berichten, wenn ich das im geschäft eingebunden hab.
nur zum verständnis:
meine DB-Abfrage richtet sich derzeit nach einer speziellen zelle, in die der suchwert eingetragen wird und die routine durchläuft.
ergo müsste ich dann meine DB noch etwas an deinen vorschlag anpassen?
grüße
hendryk

Anzeige
AW: abfragen fortlaufend ausführen
13.06.2008 07:46:00
hwe
hallo,
der tip scheint nicht zu funktionieren, da ich mich vermutlich falsch ausgedrückt habe...deshalb mal den code vom macro anbei.
wie kann ich per vba jetzt realisieren, dass sich das macro nach abarbeitung eines wertes einer nächsten abfrage widmet?

Sub DatenAbfragen()
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim lFields As Long
Dim iCols As Long
Dim Zeile As Long
Dim sqlreq As String
Sheets("Eingabe").Select
Range("Wert").Select
sqlreq = ""
Zeile = 1
Do
sqlreq = sqlreq & Sheets("SQL").Cells(Zeile, 1).Value & " "
Zeile = Zeile + 1
Loop Until Sheets("SQL").Cells(Zeile, 1).Value = ";"
cnt.Open "Provider=*******;Data Source=****;User Id=*******;Password=*******"
rst.Open sqlreq, cnt
lFields = rst.Fields.Count
Sheets("Daten").Select
Range("A6:AR65536").Select
Selection.ClearContents
Range("A1").Select
For iCols = 0 To lFields - 1
Cells(5, iCols + 1).Value = rst.Fields(iCols).Name
Next
Range(Cells(5, 1), Cells(5, rst.Fields.Count)).Font.Bold = True
Range("A6").CopyFromRecordset rst
rst.Close
cnt.Close
Set rst = Nothing
Set cnt = Nothing
Zeile = 6
Do Until Cells(Zeile, 1) = ""
Zeile = Zeile + 1
Loop
If Zeile > 6 Then
Range("Y1:AR1").Select
Selection.Copy
Range("Y6:AR" & Format(Zeile - 1)).Select
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End If
Range("A1").Select
'Diagramm anzeigen
'Sheets("maxHöhe").Select
Dim Datname
Sheets("Daten").Select
Range("A1:AR65536").Select
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Datname = Cells(1, 1).Value
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= _
"Y:\********\ " & Datname & ".xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Application.DisplayAlerts = True
ActiveWindow.Close
End Sub


hoffe es gibt abhilfe
grüße
hwe

Anzeige
AW: abfragen fortlaufend ausführen
13.06.2008 16:03:01
Tino
Hallo,
ich mache meine Access DB abfragen immer mit DAO, da ich dies leichter verstehen kann.
Mit Deinem Code kann ich so nichts anfangen, weis nicht wo da noch eine Liste abgearbeitet werden soll.
eine Liste arbeitest du schon ab in
Do
sqlreq = sqlreq & Sheets("SQL").Cells(Zeile, 1).Value & " "
Zeile = Zeile + 1
Loop Until Sheets("SQL").Cells(Zeile, 1).Value = ";"
hier wird scheinbar eine Überschrift erstellt?
For iCols = 0 To lFields - 1
Cells(5, iCols + 1).Value = rst.Fields(iCols).Name
Next
und hier werden Daten aus der Abfrage eingefügt.
Range("A6").CopyFromRecordset rst
Was für Abfrage willst du da noch als Schleife einbauen?
Sind da noch andere Tabellen oder andere Abfragen, die abgefragt werden sollen?
Gruß Tino
www.tinomargit.com

Anzeige
AW: abfragen fortlaufend ausführen
14.06.2008 07:42:24
hwe
hallo tino,
deine vermutungen sind richtig, mit dem code wird immer nur ein wert abgefragt der manuell in
Sheets("Eingabe").Select
Range("Wert").Select
eingetragen wird und mit combutton gestartet. meine frage geht dahin, ob man es realisieren kann, dass nach jeder abgeschlossen abfrage automatisch ein neue werte übergeben werden können, die bspw. in einer spalte A:A stehen und die abfrage neu startet.
grüße
hwe

AW: abfragen fortlaufend ausführen
14.06.2008 09:41:00
Tino
Hallo,
so wie den Code sehe, wird die Abfrage in dieser Schleife aufgebaut.
Do
sqlreq = sqlreq & Sheets("SQL").Cells(Zeile, 1).Value & " "
Zeile = Zeile + 1
Loop Until Sheets("SQL").Cells(Zeile, 1).Value = ";"
Ich kann so keinen Zusammenhang zu Range("Wert").Select erkennen.
Hättest du mal eine Beispieldatei? Vielleicht sogar eine Beispieldatei der Access DB, dann könnte ich mir den Ablauf mal genauer anschauen.
Gruß Tino

www.tinomargit.com


Anzeige
AW: abfragen fortlaufend ausführen
14.06.2008 14:00:00
hwe
hallo,
den code der sql kann ich erst am montag kurz auslesen.
was ich noch weiß, dass im sql-code eine "where" - anweisung" steht, die auf diese
Sheets("Eingabe").Select ... Range("Wert").Select --- Zelle ziehlt und hier den inhalt abgreift, für diesen werden die daten mit
Do
sqlreq = sqlreq & Sheets("SQL").Cells(Zeile, 1).Value & " "
Zeile = Zeile + 1
Loop Until Sheets("SQL").Cells(Zeile, 1).Value = ";" --- zusammengestellt.
da sind im prinzip nur die abzufragenden parameter definiert...z.b. höhen, breiten, max. länge, min. länge...usw.
aber vielleicht wird ja am montag alles etwas verständlicher...glaube, wir denken gerade etwas zu kompliziert...
grüße
hendryk

Anzeige
AW: abfragen fortlaufend ausführen
16.06.2008 11:25:11
hwe
hallo,
sowas in der art hatte ich mir vorgestellt...nur leider springt er nicht zur nächsten abfrage...
hab wohl grad ein brett vorm kopf und seh den fehler nicht...
sieht ihn jemand da draußen
grüße
[code]

Sub SQL_Schleife()
Dim i%
For i = 1 To 100 ' #### wenn es in A1 beginnt, sonst anpassen
If Cells(i, 1).Value  "" Then
Cells(4, 4).Value = Cells(i, 1).Value
DatenAbfragen ' ###### nur den Namen Deines Makros
Else
Exit Sub
End If
Next i
End Sub



Sub DatenAbfragen()
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim lFields As Long
Dim iCols As Long
Dim Zeile As Long
Dim sqlreq As String
'Sheets("Eingabe").Select
'Range("CarrierID").Select
' SQL-Abfrage in sqlreq zusammenstellen:
' SQL-Abfrage steht in der ersten Spalte im Blatt "SQL" (beliebig viele Zeilen)
' und muss mit einem einzelnen Semikolon enden!
' SQL in Oracle-Syntax
sqlreq = ""
Zeile = 1
Do
sqlreq = sqlreq & Sheets("SQL").Cells(Zeile, 1).Value & " "
Zeile = Zeile + 1
Loop Until Sheets("SQL").Cells(Zeile, 1).Value = ";"
' Verbindung zur Datenbank herstellen
cnt.Open "Provider=**********;Data Source=***********;User Id=********;Password=***********" _
' Open recordset based on Orders table
rst.Open sqlreq, cnt
' Count the number of fields to place in the worksheet
lFields = rst.Fields.Count
' Ausgabe nach Blatt "Daten", zuerst löschen
Sheets("Daten").Select
Range("A6:AR65536").Select
Selection.ClearContents
Range("A1").Select
' zunächst Bezeichnungen der Datenfelder abfragen und eintragen,
' denn CopyFromRecordset übergibt keine Feldbezeichnungen!
For iCols = 0 To lFields - 1
Cells(5, iCols + 1).Value = rst.Fields(iCols).Name
Next
Range(Cells(5, 1), Cells(5, rst.Fields.Count)).Font.Bold = True
' dann Daten abfragen
Range("A6").CopyFromRecordset rst
' alles wieder schließen
rst.Close
cnt.Close
Set rst = Nothing
Set cnt = Nothing
'Formeln in Tabelle ausfüllen
Zeile = 6
Do Until Cells(Zeile, 1) = ""
Zeile = Zeile + 1
Loop
If Zeile > 6 Then
Range("Y1:AR1").Select
Selection.Copy
Range("Y6:AR" & Format(Zeile - 1)).Select
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End If
'Range("A1").Select
'Diagramm anzeigen
'Sheets("maxHöhe").Select
'ExportWorksheetAsPicture
Dim chtPicture As Chart
Dim strSheetName As String
Application.ScreenUpdating = False
Sheets("RelMaxHöhe (2)").Select
strSheetName = ActiveSheet.Name
ActiveSheet.Range("A1:N49").CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set chtPicture = Charts.Add
chtPicture.Paste
chtPicture.Export ActiveWorkbook.Path & "\" & strSheetName & ".gif"
Application.DisplayAlerts = False
chtPicture.Delete
Application.DisplayAlerts = True
Set chtPicture = Nothing
Application.ScreenUpdating = True
End Sub


[/code]

Anzeige
AW: abfragen fortlaufend ausführen
16.06.2008 13:29:00
Tino
Hallo,
ich sehe aber jetzt keine Verbindung zu dieser Zelle Cells(4, 4).Value oder D4 in Deiner Abfrage?
Führe doch den Code mit einzelschritten aus, vielleicht kannst du erkennen was da geschieht.
Leider ohne die Datenbank und Deiner Tabelle kann ich dies so nicht nachvollziehen?
Gruß Tino

www.VBA-Excel.de


AW: abfragen fortlaufend ausführen
17.06.2008 12:33:00
hwe
hi tino,
dank dir für die mühe...habs gefunden. der zeiger stand nach dem Exit Sub noch im falschen sheet und musste nur noch korrigiert werden.
hoffe ich hab net zu sehr genervt...aber so funktioniert die schleife tadellos. die sql zieht im prinzip aus d4 den abzufragenden wert mit dieser formel [=" where ""1"" = '"&TEXT(wert;"0000000000")&"' "]
wünsch dir noch ne angenehme woche...werd bestimmt noch mehr fragen hier einstellen
grüße
hwe
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige