Anzeige
Archiv - Navigation
1452to1456
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
Inhaltsverzeichnis

Namensmanager

Namensmanager
28.10.2015 20:02:10
Reaper
Hi,
Ich hab ne kurze Frage betreffs des Namensmanagers.
Derzeit baue ich eine Mappe zusammen in der mehrere Webabfragen erfolgen (momentan nur 3, könnten sich aber auch noch erweitern).
In meiner ersten ich nenne sie mal Beta sind die Abfragen jeweils in einen Modul und werden über ein Active-X Steuerelement ausgelöst und läuft soweit auch gut.
In einer 2. Mappe versuche ich jetzt die Abfragen durch eine Scheife direkt in einem Steuerelement auszuführen, was auch relativ gut läuft.
Jedoch kommt jetzt der Haken, und zwar wird der Namensmanager bei jeder Abfrage zugemüllt. Wenn irgendwann die finale Mappe zum Einsatz kommt und ich und meine Mitarbeiter damit arbeiten hat man nach einer gewissen Zeit über 100 oder mehr Einträge im Manager.
Bei der Mappe wo die Abfragen in den Modulen sind kommt dieses Phänomen nicht vor.
Ich hoffe Ihr könnt mit in dieser Hinsicht helfen und eventuell erklären woran das liegen könnte.
Danke schon mal in voraus
Gruß
Reaper

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Namensmanager
28.10.2015 20:38:02
Matthias
Hallo Reaper,
benötigst du diese Namen nach der Verwendung denn noch, oder können diese gelöscht werden?
Hast du keine Bereiche im Namensmanager die du benötigst und kannst einfach alles löschen, dann tue folgendes:
Dim objName As Name, objConn
For Each objName In ThisWorkbook.Names
objName.Delete
Next objName
For Each objConn In ThisWorkbook.Connections
objConn.Delete
Next objConn

Möchtest du jedoch bestimmte Namen behalten, musst du bei der Abfrage aufpassen, wie deine Query genannt wird (.Name-Eigenschaft).
For Each objName In ThisWorkbook.Names
If objName.Name Like "*NameQuery*" Then objName.Delete
Next objName
For Each objConn In ThisWorkbook.Connections
If objConn.Name Like "*NameQuery*" Then objConn.Delete
Next objConn

Meist nimmer er den Datei-Namen eins zu eins, kommen die Namen öfters vor wird "_1" usw. angehängt. Desshalb das "Like "*...*". Mit Web-Queries kenn ich mich leider nicht ganz so aus und kann daher nicht 100%ig sagen was dabei rumkommt. Einfach mal den Makrorecorder fragen.
Beim Namen fügen Queries übrigens noch die Tabelle vorne an, auch wenn der Bereich im Namensmanager als "NameQuery" angezeigt wird, so gibt mir objName.Name "Tabelle1!NameQuerey_X" zurück! Bei selbst erstellten Bereichen ist dies jedoch nicht so, also aufpassen!
Probier damit einfach mal rum,
lg Matthias

Anzeige
AW: Namensmanager
28.10.2015 21:39:40
Reaper
Hi,
Wow ging ja schnell. vielen Dank. Ich werds die Tage ausprobieren.
Leider werden in der Mappe einige Bereiche dynamisch gestaltet und benannt, wo im Anschluss nach der Abfrage per Pivot (mehrere) Auswertungen der jeweiligen Datensätze gemacht werden.
Hier ergibt sich das nächste Problem, denn die Namen der Queries ändern sich auch, weil diese Datums bedingt sind.
z.b.
list?end_date_2015_10_28_start_date_2015_10_28_ ....
oder
list?end_date_2015_09_01_start_date_2015_09_03_ ....
oder
summary_report?end_date_2015_07_15_ ...
Also wenn ich zum Beispiel den Datensatz vom 27.10.15 brauche wird der Hyperlink (gelistet in einer entsprechenden Hilfsspalte) per Formel angepasst bevor die Abfrage gestartet wird und deshalb kommen wie oben genannt solche Namen vor.
Das was ich nicht verstehe, bei den Queries die in den einzelnen Modulen laufen wird kein Eintrag getätigt, nur wenn die Queries in der Schleife laufen.
Gruß
Reaper

Anzeige
AW: Namensmanager
29.10.2015 08:27:18
EtoPHG
Hallo Reaper,
Bei VBA gut könnte man voraussetzen, dass Debugging kein Fremdwort ist und die Helfer vielleicht mit wenigsten dem relevante Codeteilen versorgt werden.
Ich bin ziemlich sicher, dass dein Code die .Add Methode auf Query- bzw. 'Pivotquery'-Objekte anwendet und dieses dann nie mehr löscht!
Gruess Hansueli

AW: Namensmanager
29.10.2015 08:58:27
matthias
Hallo Reaper,
wenn deine Namen immer den gleichen Aufbau haben, dann nutze doch weitere Platzhalter für das 'Like':
"*end_date_?_?_?_start_date_?_?_?_*"
Natürlich kann man dies auch kürzer fassen, aber ich weis ja nicht wie eindeutig du es brauchst. Du verstehst jedenfalls worauf ich hinaus will.
lg Matthias

Anzeige
AW: Namensmanager
29.10.2015 18:42:02
Reaper
Hi,
Danke erst mal für die schnellen Antworten.
@ Hansueli ja WebQueries arbeiten meiner Meinung nach immer mit "Add". Das löschen der jeweiligen Queries ist mit im Code eingebaut.
z.b.
.
.
.Refresh BackgroundQuery:=False
.Delete
oder:
For i = wksZiel.QueryTables.Count To 1 Step -1
wksZiel.QueryTables(i).Delete
was den Code angeht hier der Beispielcode
Option Explicit
Dim strLink, strCon, strName As String
Dim lngS, a, i, iCount As Integer
Dim lngZ As Long, z As Long
Dim wsZiel, wksListeLinks, wksZiel, ws(4) As Worksheet
Dim rng As Range
Dim pt As PivotTable
Private Sub Query_Click()
Set ws(0) = Sheets(1)
Set ws(1) = Sheets(2)
Set ws(2) = Sheets(3)
Set ws(3) = Sheets(4)
Set ws(4) = Sheets(5)
Application.ScreenUpdating = False
Application.EnableEvents = False
ws(2).Columns("A:S").Clear
ws(3).Columns("A:S").Clear
ws(4).Columns("A:S").Clear
Set rng = Union(ws(1).Range("A1").CurrentRegion, _
ws(1).Range("AO1").CurrentRegion, _
ws(1).Range("BY1").CurrentRegion)
rng.Clear
Set wksListeLinks = ws(0)
With wksListeLinks
lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
For lngZ = 1 To lngZ
iCount = iCount + 1
If ws(2).Cells(1, 1) = "" Then
Set wsZiel = ws(2)
Set wksZiel = wsZiel
Else
If ws(2).Cells(1, 1).Value  0 Then
Set wsZiel = ws(3)
Set wksZiel = wsZiel
If ws(3).Cells(1, 1).Value  0 Then
Set wsZiel = ws(4)
Set wksZiel = wsZiel
End If
End If
End If
For i = wksZiel.QueryTables.Count To 1 Step -1 ' optional löschen der Anfrage
wksZiel.QueryTables(i).Delete
Next
strLink = wksListeLinks.Cells(lngZ, 1)
strCon = "URL;" & strLink
strName = strLink
With wksZiel.QueryTables.Add(Connection:=strCon, _
Destination:=wksZiel.Range("$A$1"))
.Name = strName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
.Delete ' optional löschen der Anfrage
End With
lngS = 1
' folgender Code muss sein, da der Datensatz Leerzeilen enthält
For a = wsZiel.Cells(Rows.Count, lngS).End(xlUp).Row To 1 Step -1
If wsZiel.Cells(a, 1).Value = "" Then
wsZiel.Rows(a).Delete shift:=xlUp
End If
Next a
If iCount = 10 Then
iCount = 0
Set wsZiel = Nothing
End If
Next lngZ
' hier erfolgen weitere Sequenzen wie z.b folgende, sind aber derzeit inaktiv
'For Each pt In ws(4).PivotTables
'pt.RefreshTable
'Next pt
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub
Wie gesagt die gleichen Queries laufen einzeln in den Modulen der anderen Mappe ohne Einträge.
Das löschen der Namen ist ne gute Alternative, aber mich würde interresieren warum keine Einträge erfolgen aber in einer Schleife schon.
Gruß
Reaper
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige