Avatar billede marten123 Nybegynder
12. november 2007 - 07:31 Der er 12 kommentarer og
1 løsning

slet named ranges via VBA

Hej,

Jeg har en række named ranges i et ark, som jeg ønsker at slette.
Hvordan gør jeg?
Koden skal slette alle named ranges i activesheet.

Mvh
Marten
Avatar billede jkrons Professor
12. november 2007 - 09:15 #1
Er det navnene eller indholdet af områder, der skal slettes+
Avatar billede jlemming Nybegynder
12. november 2007 - 09:22 #2
Sub Macro1()
'

Set tabel = ActiveWorkbook.Names
 
  'Worksheets("Sheet1").Range("A1").ListNames
  Set nms = ActiveWorkbook.Names
 
  rend = nms.Count
  For r = nms.Count To 1 Step -1
      nms(r).Delete
  Next r
  'Worksheets("Sheet1").Range("f1").ListNames
     
End Sub
Avatar billede jlemming Nybegynder
12. november 2007 - 09:25 #3
findes også uden overskuds linier :o)

Sub Macro1()
  Set nms = ActiveWorkbook.Names
  For r = nms.Count To 1 Step -1
      nms(r).Delete
  Next r
End Sub
Avatar billede marten123 Nybegynder
12. november 2007 - 09:35 #4
hejsa, Det er navnene. Så dit forslag virker sådan set på hele workbooken.
Men jeg kunne godt tænke mig kun at gøre det på sheet'er "codes". al'a dette:
Denne virker bare ikke...:/

Sub Macro1()
Dim nms
Dim r
  Set nms = Worksheets("codes").Names
  For r = nms.Count To 1 Step -1
      nms(r).Delete
  Next r
End Sub
Avatar billede jlemming Nybegynder
12. november 2007 - 09:44 #5
nææ, det vil hvis ikke kunne virke, da names er gobale for hele filen,
men kigger lige på, hvordan man læser sheets navnet ud
Avatar billede marten123 Nybegynder
12. november 2007 - 09:52 #6
alternativt skal man kunne slette named ranges der starter med "lst_". Så gør det ikke noget at den kigger i hele workbooken
Avatar billede jlemming Nybegynder
12. november 2007 - 10:05 #7
Denne Kode læser adressen, men det er desværre hele adressen

nms.RefersTo

ellers

  Set nms = ActiveWorkbook.Names
    For r = nms.Count To 1 Step -1
      If Left(nms(r).Name, 4) = "lst_" Then
            nms(r).Delete
      End If
    Next r
Avatar billede marten123 Nybegynder
12. november 2007 - 10:15 #8
ja :/ det er løser desværre ikke mit problem
Avatar billede jlemming Nybegynder
12. november 2007 - 11:09 #9
Prøv lige om dette virker

  Set nms = ActiveWorkbook.Names
  Dim streng As String
  Dim streng2 As String
   
    For Each nm In ActiveWorkbook.Names
        streng = UCase(MidB(nm.RefersTo, 3, Len(nm.RefersTo) - 6))
        streng2 = UCase(ActiveSheet.Name)
        If streng = streng2 Then
            nm.Delete
        End If
    Next
Avatar billede marten123 Nybegynder
12. november 2007 - 11:47 #10
nob
Avatar billede jlemming Nybegynder
12. november 2007 - 12:16 #11
Vi prøver igen :o)
Den anden var ustabil i beregningen af længden


  For Each nm In ActiveWorkbook.Names
        navn = nm.RefersTo
        For t = 1 To Len(navn)
            If Mid(navn, t, 1) = "!" Then Exit For
        Next t
       
        If UCase(Mid(navn, 2, t - 2)) = UCase(ActiveSheet.Name) Then
            nm.Delete
        End If
    Next
Avatar billede marten123 Nybegynder
12. november 2007 - 13:48 #12
cool - virker :) tak for hjælpen...
smider du et svar?
Avatar billede jlemming Nybegynder
12. november 2007 - 13:57 #13
Velnekomme :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester