Avatar billede Morten Nybegynder
11. januar 2003 - 17:04 Der er 9 kommentarer og
1 løsning

range = celleværdi

Hej

jeg har 2 ark

Ark 1 indeholder bl.a. en kolonne med nogle navne
navn1
navn2
navn3

Ark 2 skal så indholde et range med disse navn...

Først vil jeg undersøge om navn1 eksisterer som range på ark2
hvis det gør så ingenting - hvis det ikke gør så skal der flyttes til første celle/række som ikke indgår i et range og her skal så oprettes et range fra A? til C1? og dette range skal navngives med navn?

og så loopes videre indtil alle navne på ark 1 er løbet igennem....

Håber det skrevne er forståligt...
Avatar billede bak Forsker
12. januar 2003 - 21:26 #1
Jeg tror jeg har forstået det, men er ikke helt sikker på:
her skal så oprettes et range fra A? til C1?
Hvis du mener fra A? til C? så kan du sikkert bruge nedenstående.
Den sidste sub er bare til at slette alle navne med igen når man har testet.

Sub NavngivOmråder()
Dim c As Range
Dim nTest As Name
Dim n As Name
Dim maxlr As Long
Dim lr As Long
Dim rNytRange As Range
  On Error Resume Next
  'Loop gennem alle celler i A1:A10
  For Each c In Ark1.Range("a1:a10")
      'check om navnet findes
      Set nTest = ActiveWorkbook.Names(c.Value)
      ' hvis det ikke gør så...
      If Err <> 0 Then
        maxlr = 0
        'find det navngivne område med det højeste rækkenr.
        For Each n In ActiveWorkbook.Names
            lr = Range(n).Row '  + Range(n.Name).Rows.Count - 1 (kan bruges hvis området er på flere rækker)
            If lr > maxlr Then maxlr = lr
        Next
        'navngiv de underliggende tre celler A-C med navnet fra A1:A10
        Set rNytRange = Ark2.Range(Cells(maxlr + 1, 1), Cells(maxlr + 1, 3))
        ActiveWorkbook.Names.Add Name:=c.Value, RefersTo:=rNytRange
      End If
  Next
End Sub

'bruges til at slette alle navne efter testning
Sub sletnavn()
Dim n As Name
For Each n In ActiveWorkbook.Names
  n.Delete
Next
End Sub
Avatar billede bak Forsker
13. januar 2003 - 09:05 #2
Evt. skal linien

If Err <> 0 Then
udskiftes med

If nTest Is Nothing Then
Avatar billede Morten Nybegynder
13. januar 2003 - 09:22 #3
jeg tester lige...
Avatar billede bak Forsker
13. januar 2003 - 09:44 #4
jeg har lige lavet et par (nødvendige) ændringer.
Du skal selv sætte shtName til navnet på det ark du ønsker navnene oprettet i.

marker et område med nye navne i ark1 og kør så makroen.

Sub NavngivOmråder()
Dim c As Range
Dim nTest As Name
Dim n As Name
Dim maxlr As Long
Dim lr As Long
Dim rNytRange As Range
Dim shtName As Worksheet
Set shtName = Sheets("Sheet2")
  On Error Resume Next
  'Loop gennem alle celler i A1:A10
  For Each c In Selection 'ActiveWorkbook.Sheets(1).Range("a1:a20")
      'check om navnet findes
      Set nTest = ActiveWorkbook.Names(c.Value)
      ' hvis det ikke gør så...
      If nTest Is Nothing Then
        maxlr = 0
        'find det navngivne område med det højeste rækkenr.
        For Each n In ActiveWorkbook.Names
            lr = Range(n).Row '  + Range(n.Name).Rows.Count - 1 (kan bruges hvis området er på flere rækker)
            If lr > maxlr Then maxlr = lr
        Next
        'navngiv de underliggende tre celler A-C med navnet fra A1:A10
        Set rNytRange = Range(shtName.Cells(maxlr + 1, 1), shtName.Cells(maxlr + 1, 3))
        ActiveWorkbook.Names.Add Name:=c.Value, RefersTo:=rNytRange
      End If
  Next
End Sub
Avatar billede Morten Nybegynder
13. januar 2003 - 10:20 #5
Hej Bak

Der er et lille problem...

det vedr. det at vi kigger på navne i hele workbook... og så finder vi det højeste rækkenummer - men jeg har mange navngivet områder så den indsætter mine navne fra kolonne ca. 700 eller så'n noget - kan man ikke tjekke navngivneområder på et worksheet? Jeg har ikke rigtigt kunne finde det nogen steder... men jeg tror at denne kodestump er perfekt hvis man kan nøjes med at løbe igennem navn på et worksheet... al'a:

for each n i activworkbook.worksheets.names....

Er det muligt?
Avatar billede Morten Nybegynder
13. januar 2003 - 10:25 #6
jeg har mange Worksheets med navngivne områder - skulle det være....
Avatar billede Morten Nybegynder
13. januar 2003 - 11:03 #7
Hmm det virker i hvert fald ikke lige hvis man:

For Each n In Workbooks(strWBStandard).Worksheets(strWSTeknisk).Names
  lr = Range(n).Row + Range(n.Name).Rows.Count - 1 
    If lr > maxlr Then maxlr = lr
Next

for den looper over dette sætter så selvfølelig navnet på samme range - så alle navne passer på samme range... hmmm leder lige videre...
Avatar billede Morten Nybegynder
13. januar 2003 - 11:23 #8
Men denne her virker sq.... har du programmeringsmæssigt nogen indvendinger mod den?

For Each n In Workbooks(strWBStandard).Names
lngNumber = Len(strWSTeknisk)
  If Mid(n, 2, lngNumber) = strWSTeknisk Then
    lr = Range(n).Row + Range(n.Name).Rows.Count - 1
    If lr > maxlr Then maxlr = lr
  End If
Next

Okay og så et lille tillæg...
Jeg vil meget gerne give range en baggrundsfarve, gitter samt i den første række i kolonne a (range start i kolonne b) indsætte navnet på range...

hmmm... kigger også selv på det
Avatar billede Morten Nybegynder
13. januar 2003 - 11:24 #9
Men pointene skal du ha'....
Avatar billede Morten Nybegynder
13. januar 2003 - 16:03 #10
Okay... her er så hvad jeg endte op med - tilføjede lige en set Ntest = nothing til sidst for ellers tilføjede den ikke hvis jeg senere adderede...

Kan du fortælle hvordan man får rammer indv. ?

Public Sub inser_new_door()
Dim c As Range
Dim nTest As Name
Dim n As Name
Dim maxlr As Long
Dim lr As Long
Dim rNytRange As Range
Dim lngNumber As Long
  On Error Resume Next
  'Loop gennem alle celler i glbKompPortNavn
  For Each c In Worksheets(strWSTabel).Range(glbKompPortNavn)
        Debug.Print c
      'check om navnet findes
      Set nTest = Workbooks(strWBStandard).Names(c.Value)
      ' hvis det ikke gør så...
      If nTest Is Nothing Then
        maxlr = 2
        'find det navngivne område med det højeste rækkenr.
        For Each n In Workbooks(strWBStandard).Names
            Debug.Print Mid(n, 2)
            lngNumber = Len(strWSTeknisk)
            Debug.Print Mid(n, 2, lngNumber)
            If Mid(n, 2, lngNumber) = strWSTeknisk Then
                lr = Range(n).Row + Range(n.Name).Rows.Count - 1  '(kan bruges hvis området er på flere rækker)
                    If lr > maxlr Then maxlr = lr
            End If
        Next
        'navngiv de underliggende tre celler A-C med navnet fra A1:A10
        Set rNytRange = Worksheets(strWSTeknisk).Range(Cells(maxlr + 1, 2), Cells(maxlr + 16, 7))
        Workbooks(strWBStandard).Names.Add Name:=c.Value, RefersTo:=rNytRange
        Worksheets(strWSTeknisk).Range(c.Value).Cells.BorderAround ColorIndex:=1, Weight:=xlMedium
        Worksheets(strWSTeknisk).Range(c.Value).Cells(1, 1).Offset(0, -1) = c.Value
       
       
      End If

    Set nTest = Nothing
  Next
End Sub
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
Kurser inden for grundlæggende programmering

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