Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
756to760
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
756to760
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

MS-Querry Script in Textdatei auslesen

MS-Querry Script in Textdatei auslesen
24.04.2006 15:18:58
Martin
Hallo Zusammen
Wieder einmal Ratlos stehe ich da und wende mich an Euch alle.
Wir haben einige Excels mit integrierten MS-Query Abfragen.
Nun wurde eine neue DB angelegt und die Querys sind nicht mehr lauffähig, es kann auch nicht der Edit Modus erreicht werden und der Script wurde nicht hinterlegt vom ersteller.
Darum meine Frage:
Kann man die Querys in eine Text Datei auslesen damit ich diese an die neue DB anpassen kann?
Gruss und unermesslichen Dank
Martin

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ergänzung zur Fragestellung
25.04.2006 08:46:25
MartinM
Hallo Zusammen
Damit ich Euch besser erklären kann was ich mit der Frage wollte:
For Each Wsh In ThisWorkbook.Worksheets
'Zählen wieviele Querys existieren
For Each qt In Wsh.QueryTables
Counter = Counter + 1
Next qt
If Counter &gt 0 then
'QueryTable in Textdatei oder Excelzelle
For Each qt In Wsh.QueryTables
'Nun fehlt mir der Script, hier müsste das SQL von jeder QueryTable in eine Zelle einer neuen Excel oder in eine Textdatei geschrieben werden
Next qt
End if
'Löschen der bestehenden QueryTables
For Each qt In Wsh.QueryTables
.QueryTable.Delete
Next qt
Next Wsh
VBA-Gruss Martin
Anzeige
AW: Ergänzung zur Fragestellung
25.04.2006 10:35:31
EtoPHG
Hallo Martin,
Probiers mal so:

Sub QueriesAuslesen()
Dim qrt As QueryTable
Dim wsh As Worksheet
Dim bAddList As Boolean
Dim iQueryCnt As Integer
iQueryCnt = 0
bAddList = True
For Each wsh In ActiveWorkbook.Worksheets
If wsh.Name = "QueryList" Then
bAddList = False
Exit For
End If
Next
If bAddList Then
ActiveWorkbook.Sheets.Add Before:=ActiveWorkbook.Worksheets(1)
ActiveSheet.Name = "QueryList"
End If
Sheets("QueryList").Cells(1, 1).Value = "BlattName"
Sheets("QueryList").Cells(1, 2).Value = "QueryName"
Sheets("QueryList").Cells(1, 3).Value = "ConnectionString"
Sheets("QueryList").Cells(1, 4).Value = "SQLString"
For Each wsh In ActiveWorkbook.Worksheets
For Each qrt In wsh.QueryTables
iQueryCnt = iQueryCnt + 1
Sheets("QueryList").Cells(1 + iQueryCnt, 1) = wsh.Name
Sheets("QueryList").Cells(1 + iQueryCnt, 2) = qrt.Name
Sheets("QueryList").Cells(1 + iQueryCnt, 3) = qrt.Connection
Sheets("QueryList").Cells(1 + iQueryCnt, 4) = qrt.Sql
Next
Next
If iQueryCnt = 0 Then
MsgBox "Keine Queries in dieser Arbeitsmappe", vbExclamation
Else
MsgBox "Total " & iQueryCnt & " Queries in der Arbeitsmappe.", vbInformation
End If
End Sub

Gruss Hansueli
Anzeige
AW: Ergänzung zur Fragestellung
25.04.2006 10:50:36
MartinM
Hallo Hansueli
DAS ist einfach GENIAL, DANKE!
Die richtige Lösung für mein Problem.
Hoffentlich kann jemand anderes ebenfalls davon einen Nutzen ziehen.
VBA-Gruss Martin
Der Weg ist das Ziel!
AW: Ergänzung zur Fragestellung
25.04.2006 11:00:16
EtoPHG
Hallo Martin,
Danke für die Rückmeldung.
P.S. Ich glaube nicht, dass du die Queries löschen muss, wenn du die Connection und SQL Zellen im ausgelesenen Tabellenblatt anpasst, kannst Du EASY eine Routine schreiben, die aus den Zellen wieder die QueryTable.Eigenschaften anpasst und Dein Excelsheet ist wieder up-to-date.
Gruss Hansueli
AW: Ergänzung zur Fragestellung
25.04.2006 11:09:48
MartinM
Hallo Hansueli
Ich habe gedacht, dass die Abfragen neu erstellt werden müssten, desshalb habe ich gleich mit dem .delete die alten überflüssigen löschen wollen. Aber wenn das geht, dass man die Querys updaten kann, wie lautet denn da der Befehl? Wie kann ich verhindern, dass ich das falsche Werte Update?
In diesen Routinen habe ich noch nicht den notwendigen Durchblick, würde aber gerne auch diesen Bereich besser verstehen. Eventuell hilfst Du mir beim Erstellen dieser Routine.
Danke im Voraus
Gruss Martin
Mein Ziel ist wieder einmal der Weg!
Anzeige
AW: Ergänzung zur Fragestellung
25.04.2006 11:52:24
EtoPHG
Hallo Martin,
Der folgende Code schreibt die Werte aus dem generierten Blatt in die Queries zurück.
Public

Sub QueriesEinlesen()
Dim qrt As QueryTable
Dim wsh As Worksheet
Dim bExistList As Boolean
Dim iQueryCnt As Integer
bExistList = False
For Each wsh In ActiveWorkbook.Worksheets
If wsh.Name = "QueryList" Then
bExistList = True
Exit For
End If
Next
If Not (bExistList) Then
MsgBox "QueryList existiert nicht !" & vbCrLf & _
"Keine Queries angepasst", vbCritical
Exit Sub
End If
For Each wsh In ActiveWorkbook.Worksheets
For Each qrt In wsh.QueryTables
iQueryCnt = 1
Do While Sheets("QueryList").Cells(1 + iQueryCnt, 1).Value <> ""
If wsh.Name = Sheets("QueryList").Cells(1 + iQueryCnt, 1).Value And _
qrt.Name = Sheets("QueryList").Cells(1 + iQueryCnt, 2) Then
qrt.Connection = Sheets("QueryList").Cells(1 + iQueryCnt, 3).Value
qrt.Sql = Sheets("QueryList").Cells(1 + iQueryCnt, 4).Value
MsgBox "Blatt:" & wsh.Name & vbCrLf & _
"Query:" & qrt.Name & " angepasst!", vbInformation
End If
iQueryCnt = iQueryCnt + 1
Loop
Next
Next
End Sub

D.h. was Du sicherstellen musst ist das RICHTIGE anpassen der C (Connection) und D (SQL) Spalten im QueryList Blatt.
Als Tipp: Mach mal eine neue einfache MS-Query auf die Neue Datebank, lass dann das Auslese-Makro laufen und vergleiche die Wert mit den alten. Dann findest Du vermutlich leichter raus, was Du an den alten anpassen und zurückschreiben musst.
Gruss Hansueli
Anzeige
AW: Ergänzung zur Fragestellung
25.04.2006 12:38:00
MartinM
Hallo Hansueli
Danke für Deine Einlese Routine, die meinige hatte wohl ebenfalls funktioniert, aber ich denke bei mehreren Querys ist Deine Variante die Sichere.
Der Test war sehr gut verlaufen, die Dateien arbeiten wieder wie vorher, durch die Anpassung der connection.values wurde das Problem behoben.
Auf ein andermal.
Martin
Am Ziel
AW: Ergänzung zur Fragestellung
25.04.2006 11:40:03
MartinM
Hallo Hansueli
Habe die Lösung so Versucht, denke das sollte so funktionieren.
&ltpre&gt
Sub QuerysUpdaten()
Dim qrt As QueryTable
Dim wsh As Worksheet
Dim bAddList As Boolean
Dim iQueryCnt As Integer
iQueryCnt = 0
For Each wsh In ActiveWorkbook.Worksheets
For Each qrt In wsh.QueryTables
iQueryCnt = iQueryCnt + 1
Sheets(Sheets("QueryList").Cells(2, 1).Value).Select
If qrt.Name = Sheets("QueryList").Cells(1 + iQueryCnt, 2).Value Then
qrt.Connection = Sheets("QueryList").Cells(1 + iQueryCnt, 3).Value
qrt.Sql = Sheets("QueryList").Cells(1 + iQueryCnt, 4).Value
End If
Next
Next
If iQueryCnt = 0 Then
MsgBox "Keine Queries ", vbExclamation
Else
MsgBox "Total " & iQueryCnt & " Queries in der Arbeitsmappe UP TO DATE.", vbInformation
End If
End Sub&lt/pre&gt
VBA-Gruss MartinM
Der Weg ist das Ziel!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige