Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
524to528
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
524to528
524to528
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Funktion ausgliedern???

Funktion ausgliedern???
29.11.2004 13:52:37
Christian
Hi,
ich bisher folgenden VBA Code - Ausschnitt.
sc = "SCW06"
'erste leere Zelle auswählen
Set rngLeer = ActiveSheet.Cells(2, 3)
Do
Set rngLeer = rngLeer.Offset(1, 0)
Loop Until IsEmpty(rngLeer)
sql_statement_1 = "SELECT COUNT(DISTINCT cl_ip_name) .........
'Ergebnis einfügen
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=rngLeer)
.FieldNames = False
.BackgroundQuery = False
.Sql = sql_statement_1
.Refresh
End With
Jetzt wiederholt sich diese SQL Abfrage aber ca. 70 mal nur mit unterschiedlichen Parametern.
Kann ich die SQL Abfrage als eigenes Modul ausgliedern, dieses Modul dann aufrufen und den entsprechenden Parameter übergeben?
Wo wird der Rückgabewert dann gespeichert und wie sieht dann mein 'Ergennis einfügen aus?
Vielen Dank
Christian

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktion ausgliedern???
29.11.2004 17:08:10
RALF
Moin,
folgende Zeile definiert, wo die Daten abgelegt werden:
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=rngLeer)
nämlich im aktiven Blatt (activesheet)
Wenn das Ganze x mal ablaufen soll, dann lege Dir doch eine Schleife um den gesamten code (For each ... Next oder so) und speicher den code in eine Basisdatei.
Mache dann voe jeder Abfrage eine neue Mappe auf und hole die Daten. Speicher die neue Datei (ist ja aktiv) und schließe sie. usw. usw. usw.....
Vorschlag für die Parameter...lege die in der Basisdatei in ein Blatt. Ebenso die Verbindungsdaten.
Nochwas:
Set rngLeer = ActiveSheet.Cells(2, 3)
Do
Set rngLeer = rngLeer.Offset(1, 0)
Loop Until IsEmpty(rngLeer)
wenn mindestens 2 zeilen mit werten belegt sind, dann kann mit folgendem code das oben stehende ersetzt werden (um die letzte gefüllte zeile zu bekommen):
zeile=ActiveSheet.Cells(2, 3).end(xldown).row
Viel Spaß
Gruß RALF
Anzeige
AW: Funktion ausgliedern???
30.11.2004 09:22:57
Christian
Hi,
also erstmal vielen Dank. Nur leider kann ich mein Problem nicht so lösen.
Ich hatte eigentlich daran gedacht eine Prozedur zu schreiben, in der sich die SQL Abfrage (enthält 1 oder mehr Variablen) befindet. In meinem Hauptprogramm möchte ich dann die Variable initialisieren und dann die Prozedur aufrufen. Danach den Wert aus der Prozedur (also das Ergebnis der SQL Abfrage) wieder ans Hauptprogramm zurückgeben und an einer bestimmten Stelle in meinem Excel Sheet einfügen.
Vielleicht meinst du es ja auch so und ich verstehs nur nicht.
Hier noch mal mein Code:

Sub Weekly_Report()
'Deklaration der Variablen
Dim Month As String
Dim rngLeer As Range
Dim sc As String
Dim sup As String
'Aktuelles Sheet öffnen
Month = Format(Date, "MMMM")
Sheets(Month).Activate
'DB Connect
connstring = "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=XXX;PWD=XXX;SERVER=XXX"
'Variablen Initialisierung
sc = "SCW06"
Call Abfrage()
'erste leere Zelle auswählen
Set rngLeer = ActiveSheet.Cells(2, 3)
Do
Set rngLeer = rngLeer.Offset(1, 0)
Loop Until IsEmpty(rngLeer)
'Ergebnis einfügen
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=rngLeer)
.FieldNames = False
.BackgroundQuery = False
.SQL = Sqlstring
.Refresh
End With
End Sub


Sub Abfrage()
Sqlstring = "SELECT COUNT(DISTINCT cl_id) " & _
"FROM client, sup, sc " & _
"WHERE sysdate - cl_pingable <= 7 " & _
"AND sup_id = cl_sup_id AND sc_id = sup_sc_id AND sc_name = '" & sc & "' "
End Sub


Wie muss ich denn die Variable an die Prozedur übergeben?
Wie bekomme ich das Ergebnis in mein Excel Sheet?
Danke für eure Hilfe
Gruss
Christian
Anzeige
AW: Funktion ausgliedern???
02.12.2004 19:29:55
andre
Hallo Christian,
warum nicht so -unabhängig ob Dein code stimmt - da scheinen einige Variable zu fehlen bzw. leer zu sein usw. ...

Sub Weekly_Report()
'Deklaration der Variablen
Dim Month As String
Dim rngLeer As Range
Dim sc As String
Dim sup As String
'Aktuelles Sheet öffnen
Month = Format(Date, "MMMM")
Sheets(Month).Activate
'DB Connect
connstring = "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=XXX;PWD=XXX;SERVER=XXX"
'Variablen Initialisierung
sc = "SCW06"
Call Abfrage()
End Sub


Sub Abfrage(byval connstring as string)
'wo kommt cl_id her? wo die sup_* usw.
Sqlstring = "SELECT COUNT(DISTINCT cl_id) " & _
"FROM client, sup, sc " & _
"WHERE sysdate - cl_pingable <= 7 " & _
"AND sup_id = cl_sup_id AND sc_id = sup_sc_id AND sc_name = '" & sc & "' "
'erste leere Zelle auswählen
Set rngLeer = ActiveSheet.Cells(2, 3)
Do
Set rngLeer = rngLeer.Offset(1, 0)
Loop Until IsEmpty(rngLeer)
'Ergebnis einfügen
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=rngLeer)
.FieldNames = False
.BackgroundQuery = False
.SQL = Sqlstring
.Refresh
End With
'Variable rücksetzen!
Set rngLeer = nothing
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige