Start » VBA-exempel för Excel | Effektiva lösningar på konkreta problem » Kalkylbladsstruktur » VBA-makro som raderar “spöklänkar” i Excel

VBA-makro som raderar “spöklänkar” i Excel





Vissa Excelböcker innehåller störande länkar till andra arbetsböcker, trots att inga celler innehåller några länkar.

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 kalkylboken som givits namn). 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 då 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.





Lämna en kommentar