11. januar 2003 - 17:04Der 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....
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
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
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 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...
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...
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
Synes godt om
Ny brugerNybegynder
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.