Jag har en arbetsbok i Excel 2007 där jag skapar Anslutningar och QueryTables on the fly. Det fungerar som så att man matar in ett värde i en cell och då skapas en QueryTable samt en Anslutning för att hämta hem information från webben.
Tanken är att man ska kunna radera denna QueryTable samt Anslutningen om man raderar värdet ur cellen. Detta fungerar bra så länge man inte anger något tokigt i cellen. Koden ser ut såhär:
Set QT = ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://här-finns-en-address/?ID=" & fId _
, Destination:=Target.Offset(-1, 2))
With QT
.Name = "ID_" & fId & "_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "4"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
Target.Offset(0, 1).Value = QT.Name
Om man raderar värdet ur en cell så raderas QT:n och då följer Anslutningen med också. Så här ser koden ut:
ActiveSheet.QueryTables(Target.Offset(0, 1).Value).Delete
Target.Offset(0,1).Value innehåller namnet på den QueryTable.
Allt bra så här långt. Problemet kommer när man matar in ett felaktigt ID som får Anslutningen att misslyckas. Dvs att den inte lyckas hämta hem den specificerade tabellen för den URL:en. Jag har försökt sköta detta med en Felhanterare som, om detta sker, raderar QT:n. Problemet är här att Anslutningen inte raderas på samma gång utan ligger kvar. Vilket betyder att det teoretiskt sett kan ligga kvar massa "slaskanslutningar".
Jag vet inte riktigt hur jag ska kunna referera till den Anslutning som skapas i samband med att jag kör Set QT = ActiveSheet.QueryTables.Add. Dessa anslutningar får bara standardnamnen "Anslutning", "Anslutning1", "Anslutning2", osv osv.
Jag har försökt att först skapa en anslutning och sedan referera till den när jag kör
Set QT = ActiveSheet.QueryTables.Add
men jag lyckas inte. Vet inte ens om det går att göra på det sättet.
Några idéer?