VBA-makro som raderar "spöklänkar" i Excel
En bugg som uppträder tid till annan är så kallade spöklänkar till externa arbetsböcker, dvs länkar som egentligen inte borde finnas där eftersom vi inte kan finna någon cell som hänvisar till någon extern bok.
Och varje gång användaren (eller ett makro) öpnnar en viss bok så dyker rutan upp som frågar om vi vill uppdatera de externa länkarna. Och tyvärr kan det ibland vara omöjligt att via menyer eliminera dessa felaktiga länkar.
Ibland så uppträder Excel på sätt som vi inte riktigt förstår. Och trots att vi gör vår bästa för att förstå varför Excel felar, så måste vi till slut ge upp. Det är då dags att kalla felet för en “bugg”.
Men att ge upp inför ett problem betyder inte att man lämnar det åt slumpen.Och när det handlar om buggar i Excel så gäller det att hitta effektiva lösningar, eller “work arounds” som det brukar kallas på engelska.
Nedan beskrivs hur du med hjälp av makro-kod i VBA dödar samtliga externa länkar, riktiga såväl som falska.
varLink = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks) If Not IsEmpty(varLink) Then i = 1 Do Until IsEmpty(varLink) On Error GoTo 9 ActiveWorkbook.BreakLink Name:=varLink(i), Type:=xlLinkTypeExcelLinks i = i + 1 Loop End If |
Är spöklänkarna fortfarande kvar?
Ibland gömmer sig dessa länkar i så kallade “Named Ranges”, vilka man finner under menyn
- Formulas → Name Manager
Ofta ligger här ett stort antal element (dvs områden i kalkylböcker som givits namn). Dessa kan även länka till externa böcker utan att man vet om det. Om man inte använder Named Ranges så kan man normalt ta bort dem utan problem. Du kan eliminera dem antingen manuellt, eller via nedanstående makrokod.
I vissa fall så visar inte ovan nämnda “Name Manager” samtliga element, utan de måste först synliggöras med hjälp av följande kod:
Sub NamedRanges_MakeVisible() Dim nme As Name For Each nme In ActiveWorkbook.Names nme.Visible = True Next nme End Sub |
När alla element nu är synliga så kan vi slutföra elimineringen av dem:
Sub NamedRanges_Delete() Dim nme As Name For Each nme In ActiveWorkbook.Names nme.Delete Next nme End Sub |
Obs; Innan du kör makron av den här typen bör du spara undan en säkerhetskopia – allt för att vara på den säkra sidan.