• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Range aanmaken en benoemen op ander tabblad

Status
Niet open voor verdere reacties.

origami123

Gebruiker
Lid geworden
7 apr 2012
Berichten
54
Goedenavond,

Ik kan wel enige hulp gebruiken bij het samenstellen van een macro.

Na op Blad1 invoegen van een naam in kolom C en daarna ENTER: automatisch een range maken op Blad2 , waarbij de naam er direct boven wordt geplaatst en tegelijk de "range-naam" wordt. (zie voorbeeld op Blad2)

Na het invoegen van de tweede naam in kolom C opnieuw automatisch idem eenzelfde nieuwe range aanmaken op Blad2, maar wel precies x regels onder de eerste naam.

Na het invoegen van de derde naam in kolom C opnieuw automatisch idem opnieuw eenzelfde nieuwe range aanmaken op Blad2, maar ook weer precies x regels onder de tweede naam, etc, etc....

De verschillende ranges dienen na invullen van de lijst later eenvoudig te kunnen teruggehaald door bijvoorbeeld in de lijst op de naam te klikken.


Mijn voorlopige begin hieronder:

Code:
Sub Macro1()
'
' Macro1 Macro
    Sheets("Blad2").Select

    Range("B65536").Select
    Selection.End(xlUp).Select

    Naam = Range("Blad1!C6").value
'    ActiveWorkbook.Names.Add Name:=Naam, RefersTo:=Range("J4:P9")
' of
'    ActiveWorkbook.Names.Add Name:="NieuwTabblad", RefersToR1C1:= _
'        "=Blad3!R4C10:R9C16"

End Sub

Bekijk bijlage Range aanmaken en benoemen op ander tabblad.xlsm

B.v.d.

M.vr.gr.
Origami
 
Wat bedoel je precies met:
De verschillende ranges dienen na invullen van de lijst later eenvoudig te kunnen teruggehaald door bijvoorbeeld in de lijst op de naam te klikken.
?
 
Waarschijnlijk wordt je beter geholpen, als je het uiteindelijke doel uitlegd.

Mogelijk dat je dan andere oplossingen aangereikt krijgt.
 
oeldere,
het belangrijkste zal zijn dat op blad2 bereiken aangemaakt worden met als naam de naam die op blad1 onder 'Ras' is ingevuld. Dat is wel te doen, maar wat de vragensteller bedoelt met de zin waarnaar ik verwees, is mij niet duidelijk.
 
Zapatr, Oeldere en Sylvester,

Heel erg bedankt voor jullie reactie's.

Sylvester,

het "beginnetje", dat je hebt aangemaakt, werkt perfect en precies zoals ik het me voorstelde.
Ook de tinten en kaders heb je meegenomen, geweldig.

Je verteld ook, dat je de macro "een beetje aangepast" had, maar dan doe je jezelf toch wel tekort, want het is veel meer dan dat.
Had nooit verwacht, dat dit het resultaat was geworden en was daar zelf nooit uitgekomen.

Ik heb het ook verschillende keren geprobeerd, door via een macro op te nemen, maar blijf al steken op het aangeven van de gewenste cel om de volgende range te beginnen, omdat ik alleen maar kon aangeven waar de range moest komen en hoe eruit te zien door de cellen te trekken, maar dat kan je maar 1 keer doen, omdat ik hem dan in de macro nog steeds niet variabel heb om de range x regels onder de vorige naam te plaatsen, terwijl jouw oplossing dat allemaal wel doet.

Zapatr, Oeldere,

v.w.b.
De verschillende ranges dienen na invullen van de lijst later eenvoudig te kunnen teruggehaald door bijvoorbeeld in de lijst op de naam te klikken.

De verschillende ranges op Blad2 dienen door de macro op deze manier te worden aangemaakt, omdat er zo voor elk paard in de lijst automatisch een plaats wordt gereserveerd op Blad2 om bijzonderheden, etc.... alleen betrekking hebbend op dat paard te kunnen opnemen.

Omdat er bovendien tegelijkertijd een benoemde range van is gemaakt, waarvan de naam altijd correct is en niet achteraf hoeft te worden ingevoerd, kan je er op een later tijdstip direct naar toe springen, als er voor dat unieke paard zaken zijn, die aanpassing binnen de range noodzakelijk maken.

Maar bovendien is de range als gevolg hiervan nu ook bereikbaar vanuit een andere hoek, bijvoorbeeld als vanuit een afstamming de gegevens moeten worden ingezien. De lijst op Blad1 hoeft dan niet te worden nagelopen, maar men kan de link naar de range van dat paard direct in het tabblad van de afstamming opnemen of oproepen via een dynamische combo-box, etc...

Tijdens de opname in de eerste lijst Blad1 wordt altijd de plaats (range) - hoewel nog leeg - voor dat unieke paard - direct gereserveerd en - vanuit waar dan ook - direct vanaf dat moment oproepbaar.

Ik hoop, dat nu wat duidelijker is, waarom ik voor deze manier gekozen heb.

Rest mij nog iets:
Omdat de namen uit - laten we het eenvoudig zeggen - uit voor- en achternamen bestaat, komt er een foutmelding vanuit de benaming van de range, omdat daarin geen spaties mogen voorkomen.

Nu is het inderdaad wel mogelijk om elke spatie op te vullen met bijv. een "_" (underscore), maar ten eerste werkt dat niet makkelijk en is het uitermate vervelend als telkens weer de foutmelding opkomt.

Van de ingegeven naam op de basislijst, moeten de spaties dus eerst worden opgevuld, voordat de range wordt benoemd.

In ieder geval iedereen zeer bedankt voor al jullie hulp tot dusver.


M.vr.gr.

Origami
 
Laatst bewerkt:
Ik ben ook al (lange tijd) met een oplossing bezig geweest, maar wilde eerst het antwoord op mijn vraag afwachten alvorens die te plaatsen. Zie de bijlage, die gemaakt is in Excel 2002, maar naar ik aanneem ook in 2007/2010 zal werken.
1. Als je op blad1 onder 'ras' wat invoert, wordt na het drukken op Enter op blad2 het gewenste bereik aangemaakt, zoals je ook meteen kunt zien (met spaties in de namen is rekening gehouden).
2. Als je op blad1 al 1 of meer namen hebt en je dubbelklikt op een naam, dan wordt er meteen naar de betreffende range op blad2 'gesprongen'. Ik weet niet of dit punt 2 ook de bedoeling is, indien niet dan verwijder je dat maar.
 
Laatst bewerkt:
Zapatr,

heel erg bedankt voor je oplossing,

Hij werkt perfect, maar vooral de overige mogelijkheden, als dubbele namen opvangen, underscore tussenvoegen en dubbelklikken op de naam om naar de range te springen, die ik zo broodnodig acht voor de werking en gebruiksvriendelijkheid van het programma, zelfs die heb je in de code opgenomen. :thumb:

Het dubbelklikken om naar de range te kunnen vanuit de basislijst op Blad1, was juist een "must", dus die gaat er zeker niet uit.

Ik vind het erg knap om zo'n macro neer te zetten en kan me dan ook heel goed voorstellen, dat daar veel tijd in gaat zitten.

Ikzelf had hier nooit echt uitgekomen, dus ik ga de code heel goed uitpluizen op werking en waarom, want ik wil er vanzelfsprekend van leren.

Nogmaals heel erg bedankt.

M.vr.gr.

Origami
 
Toch wat te snel gewerkt.
Bij het dubbelklikken op namen met een spatie volgt in het eerder geposte bestand een foutmelding.
Dat is hierbij hersteld.
 
Zapatr,

Ik had 'm inderdaad ook al opgemerkt door de foutmelding, maar verdacht ".Activate" van de fout en had het idee om hem om te zetten naar ".Select" om te checken of dat effect zou hebben.

Echter bleek het toch in een andere hoek en je was er snel bij.

Heel erg bedankt

Origami
 
heel mooi, Zapatr:thumb:
en nu nog automatisch de "NAAM" aanpassen als op blad1 (of op blad2) de naam wordt verbeterd
bv van van Paard_Jan in Paard_Jaan.

groet sylvester
 
sylvester-ponte,
je hebt zonder meer een punt als je wil zeggen: 'bij de gegeven oplossing mag het niet blijven'. Zeker als meerdere mensen van een toepassing gebruik gaan maken, moet je ervoor zorgen dat er geen ongewenste dingen kunnen gebeuren (namen wijzigen of wissen bv, en dit zowel op blad1 als blad2). Misschien mogen ingevoerde namen wel niet gewijzigd worden(?). En indien wel, zou je bij elke wijziging moeten controleren of de namen op blad1 en 2 nog wel dezelfde zijn en als dat niet het geval is, aanpassingen doen. Nu is dat niet zó moeilijk en daaraan (en aan andere zaken, want er zijn er nog wel meer) heb ik wel gedacht, maar enerzijds wil en kan ik er niet eindeloos mee bezig zijn (daar heb ik de tijd niet voor), en anderzijds lijkt mij een forum vooral bedoeld om de vragensteller aanwijzingen te geven of een opzet te geven waar hij mee verder kan en niet zozeer om complete oplossingen te geven. Daar leert de vragensteller het meeste van, want zoals je wel uit eigen ervaring zult weten leer je meer door zelf met een probleem aan de slag te gaan dan door oplossingen van anderen klakkeloos over te nemen.
Het bestand nog even bekijkend merkte ik dat er nog een onjuistheid in zat bij het invoeren van dubbele namen met een spatie, dat is in deze bijlage gecorrigeerd. En op blad2 zullen in de namen de underscores niet meer verschijnen, maar dat is slechts een kleine schoonheidsaanpassing.
 
Zapatr, Sylvester,

Allereerst opnieuw hartelijk dank voor jullie inzet.

Natuurlijk hebben jullie gelijk, als je opmerkt, dat de vragensteller ervan moet leren en zelf de nodige aanpassingen gaat doen om jullie code te vervolmaken.

Maar de oplossingen, die jullie me al hebben gegeven zijn werkelijk fenomenaal en ik ben dan ook zeer content.

Aangezien ik zelf vind, dat als je iets doet, het goed moet zijn, geven jullie mij de handgrepen om dit ook te kunnen realiseren.
Vandaar ook, dat bijvoorbeeld de "schoonheidsoplossing" voor het weer verwijderen van de underscore op Blad2 helemaal in mijn straatje valt.

Natuurlijk was ik in gedachten er ook al mee bezig geweest, omdat ook ik over zulke dingen val, terwijl het voor een ander misschien minder belangrijk is, maar voor de professionaliteit is zoiets veel mooier en helemaal afgewerkt en ben er dan ook zeer over te spreken.

Vanzelfsprekend ga ik verder met uitbreiden van jullie code, zoals het inderdaad controleren op gelijkheid van de namen tussen Blad1 en Blad2.

Bovendien is het mijn bedoeling om de lijst op Blad1 en de range op Blad2 direct na invoer af te schermen, zodat er niet per ongeluk iets wordt aangepast of gewist, maar ook om te voorkomen dat later gebruikers bij zaken kunnen komen, waar ze niet horen te zijn en al dan niet moedwillig gaan aanpassen of terugdraaien.

Vanuit een combobox mag straks de range worden aangesproken, maar niet onbeschermd, omdat alleen gegevens worden ingezien en niet mogen worden aangepast.

Vanuit bijv. de lijst wordt de range ook aangesproken, maar dan - alleen die cellen tijdelijk onbeschermd - om wel aan te kunnen
passen.

Probleem in beide keuzemenu's zal waarschijnlijk zijn, dat de source voor de keuzelijst - op Blad1 - voorziet in de namen inclusief spaties, maar dat de selectie van de bewuste range alleen "luistert" naar de naam inclusief underscores. En het gebruiken van de namen in de B-kolom van Blad2 zal hetzelfde resultaat geven, maar dat is dan weer de uitdaging.

Het is ook nog de bedoeling een deel van de range te reserveren om een afbeelding op - vooraf ingestelde - gewenste grootte in te passen en de rest van de tekst er - binnen de range - automatisch naast te plaatsen.

Zoals je ziet, heb ik nog genoeg werk, maar dat komt helemaal goed, zeker na bovenstaande inbreng.

Ik print nu de code uit van de laatste drie bestanden van Zapatr en leg ze naast elkaar om de wijzigingen te onderscheiden en te begrijpen hoe de code verder werkt.

Nogmaals bedankt voor de inzet.

M.vr.gr.

Origami
 
Laatst bewerkt:
Probleem in beide keuzemenu's zal waarschijnlijk zijn, dat de source voor de keuzelijst - op Blad1 - voorziet in de namen inclusief spaties, maar dat de selectie van de bewuste range alleen "luistert" naar de naam inclusief underscores. En het gebruiken van de namen in de B-kolom van Blad2 zal hetzelfde resultaat geven, maar dat is dan weer de uitdaging.
Dat is nou juist heel eenvoudig en kun je ook in mijn macro zien. Staat er bv. in A1 een tekst met spaties en je wil die tekst in B1 met underscores i.p.v. spaties, dan gebruik je voor B1:
Code:
Range("B1").Value = WorksheetFunction.Substitute(Range("A1").Value, " ", "_")
En omgekeerd, staat er in A1 een tekst met underscores en je wil die in B1 met spaties i.p.v. underscores, dan gebruik je voor B1:
Code:
Range("B1").Value = WorksheetFunction.Substitute(Range("A1").Value, "_", " ")
 
Laatst bewerkt:
Zapatr,

Inderdaad, dat is een goede oplossing en kan ik zo vanuit jouw macro opnieuw weer ergens anders inzetten.

Ik had er nog niet echt naar gekeken, want als ik ��n ding wel geleerd heb, is het, dat soms dingen eenvoudig lijken, maar blijken ze omgekeerd toch weer net anders te werken, dus wilde even wachten alvorens me erin te verdiepen.

Ik ben bezig mezelf in te leven in hoe de macro de naamcellen en de uiteindelijke range plaatst, maar kan deze gedeeltelijk vatten:

Code:
fr = .Cells(Rows.Count, 2).End(xlUp).Row + 6
If fr = 7 Then fr = 4

fr is de onderste gevulde cel in de B-kolom, daarbij wordt 6 opgeteld en kom je uit op de cel, waarin de "target.value" komt van de laatst ingevoerde nieuwe naam vanuit de lijst op Blad1

In de volgende regel breek ik me dan het hoofd, waarom fr=4 gaat worden als fr=7 is.

M.vr.gr.

Origami
 
Zapatr,

Ik heb hem gevonden en kan hem volgen.

Het betreft hier waarschijnlijk de eerste range, die hoort bij de eerste naam op de lijst op Blad1.

Je hebt dan geen referentie van de onderste gevulde cel en dus begin je automatisch in rij 1.
+6 kom je uit op 7 en dan wordt je teruggebracht naar rij 4.

Heel clever van je gevonden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan