Help, hoe via code de naam van een tabblad te gebruiken

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • JohanKoers
  • Registratie: Februari 2020
  • Laatst online: 04-05-2023
Mijn vraag

Ik werk met excel 2019 en werk aan een sheet waat ik de verbouwing van mijn huis ga plannen.
Momenteel werkend dat als ik een nieuw project toevoeg (in tab Overzicht werk in kolom A) dat er een nieuw tabblad gemaakt wordt met de naam van dit veld.

Nu wil ik graag dat het totaal van dit nieuwe tabblad (B40) komt bij in geval van voorbeeld B2 en de prioriteit in C2 in het tabblad Overzicht werk

Loop vooral vast op stukje hoe ik de naam ActiveSheet.Name moet gaan gebruiken om te verwijzen en de inhoud van die cel in het tabblad Overzicht werk krijg
Ben beginner dus alle hulp is welkom, normaal maak ik alleen simpele excel sheets

Hier de link naar bestand: https://www.dropbox.com/t/WWQIsnyX66wtRvFT

Alvast dan voor de moeite,

Johan

Alle reacties


Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 15:39
=INDIRECT(A3&"!B40")

Waarbij A3 de naam van het betreffende tabblad is.

Zie ook:
https://www.got-it.ai/sol...namic-worksheet-reference

Acties:
  • 0 Henk 'm!

  • JohanKoers
  • Registratie: Februari 2020
  • Laatst online: 04-05-2023
Ik denk dat ik deel begrijp (sorry ben beginner) maar A3 de naam van het tablad veranderd elke keer in de code. Moet het dan zijn : =INDIRECT(Target&"!B40") target is de variabele voor de nieuwe naam van het tabblad in de code

Acties:
  • 0 Henk 'm!

  • JohanKoers
  • Registratie: Februari 2020
  • Laatst online: 04-05-2023
Het moet denk ik ergens in de code komen:

On Error GoTo Foutmelding:


If Target.Column = 1 Then

Sheets("Template").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Target

End If

Exit Sub

Foutmelding:
MsgBox "Dit werkblad bestaat al.", vbExclamation, "Werkblad bestaat al."

Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
JohanKoers schreef op woensdag 6 juli 2022 @ 09:24:
Nu wil ik graag dat het totaal van dit nieuwe tabblad (B40) komt bij in geval van voorbeeld B2 en de prioriteit in C2 in het tabblad Overzicht werk
Die zin begrijp ik niet. Je maakt een nieuw tabblad aan en je vult wat in bij prijs en aantal. Wat moet er dan gebeuren?
Loop vooral vast op stukje hoe ik de naam ActiveSheet.Name moet gaan gebruiken om te verwijzen en de inhoud van die cel in het tabblad Overzicht werk krijg
Díe cel, welke cel is dat?

Acties:
  • 0 Henk 'm!

  • JohanKoers
  • Registratie: Februari 2020
  • Laatst online: 04-05-2023
Als er in kolom a een naam wordt ingevoerd bijvoorbeeld (test1) dan wordt er een nieuwe tab test1 gemaakt vanuit het sjabloon., via bovenstaande code. Daarna wil ik graag dat bij b2 en c3 (kosten en prioriteit van tab Overzicht werk) de inhoud van in dit geval tab badkamer b14 en b1 in Overzicht werk komt. Bij bijvoorbeeld test2 moeten de waardes in b3 en c3 komen enz.

Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
In 'Overzicht werk'staat in B2: 400 en in C3 staat niets.
De tab Badkamer bestaat niet, dus met B14 en B1 van die tab kunnen we niets aanvangen.
Test2 bestaat evenmin en welk blad je dan met b3 en c3 bedoelt is me evenmin duidelijk.
Het kan aan mij liggen, maar ik begrijp er niets van.
Een oplossing zal evenwel niet moeilijk zijn, als maar duidelijk is wat er moet gebeuren.

Acties:
  • 0 Henk 'm!

  • JohanKoers
  • Registratie: Februari 2020
  • Laatst online: 04-05-2023
c3 moet c2 zijn excuses, maar wat ik bedoelde dat als je in kolom A1 een naam typt, er een nieuwe tab gemaakt wordt. Bijvoorbeeld badkamer of test2 of wat dan ook. (probeer maar) dan moeten de waardes van die nieuwe tab (welke naam deze nieuwe tab ook heeft) op B1 en B40 weergegeven worden in tab overzicht werk in kolom B en C naast waar je net de nieuwe naam hebt ingevoerd. dan kan elke rij zijn. Het hele idee van is dat er voor elk project een tab is met een totaal overzicht in tab Overzicht werk. Sorry beter kan ik het echt niet uitleggen.

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 22:31

Reptile209

- gers -

JohanKoers schreef op woensdag 6 juli 2022 @ 10:29:
Het moet denk ik ergens in de code komen:

On Error GoTo Foutmelding:


If Target.Column = 1 Then

Sheets("Template").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Target

End If

Exit Sub

Foutmelding:
MsgBox "Dit werkblad bestaat al.", vbExclamation, "Werkblad bestaat al."
Volgens mij ben je hier al een heel eind mee. Twee hints in de richting om het te laten werken: "Target" is een referentie naar een locatie (of een Range). Je wil de inhoud daarvan hebben: de .Value. Gebruik anders om te testen een MsgBox om de waarde van de cell weer te geven, zodat je kan zien dat je de juiste hebt.
En de regel met ActiveSheet gaat hier niet werken: dat is de sheet waar je in bezig bent. Je wil eerst of de nieuwe sheet die je net gemaakt hebt Active maken, of je gebruikt Sheets(Sheets.Count).Name (want Sheets.Count is als het goed is de index van je nieuwe sheet). :)

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • JohanKoers
  • Registratie: Februari 2020
  • Laatst online: 04-05-2023
Dank je, maar heb echt geen idee hoe ik die .value moet gebruiken. Kun je een beetje de goede richting in helpen

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 22:31

Reptile209

- gers -

JohanKoers schreef op donderdag 7 juli 2022 @ 09:09:
Dank je, maar heb echt geen idee hoe ik die .value moet gebruiken. Kun je een beetje de goede richting in helpen
MsgBox Target.Value, vbExclamation, "Inhoud van cell" O-)
Eventueel nog even een check doen dat Target maar één cell is, maar je kan ook accepteren dat je een VBA-error krijgt als iemand een heel blok cellen kopieert over je doelcell heen (en Target dus een echte range wordt).

Aanvulling:
Overweeg trouwens om deze actie (nieuw tabblad aanmaken) niet in een OnChange functie van het werkblad te hangen, maar via een knop te activeren. Dat is een stuk logischer voor de gebruiker (typ een naam in, knop doet de actie) dan als het automatisch gaat. Want als je nu een typfoutje in de cell met de naam wil aanpassen, krijg je een nieuwe kopie. Of als je hem leeg maakt, dan krijg je een tab met een lege naam. Enz. Er is een ribbon-tab met formulier-onderdelen, waaronder knoppen. En die knop koppel je dan aan een sub (je code). Je kan dan alleen in die sub niet meer Target gebruiken om de naam op te halen. Je gebruikt dan een verwijzing naar de juiste cell (C3212 bijvoorbeeld) daarvoor.

[ Voor 41% gewijzigd door Reptile209 op 07-07-2022 11:01 ]

Zo scherp als een voetbal!


Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
JohanKoers schreef op donderdag 7 juli 2022 @ 08:42:
wat ik bedoelde dat als je in kolom A1 een naam typt, er een nieuwe tab gemaakt wordt. Bijvoorbeeld badkamer of test2 of wat dan ook. (probeer maar) dan moeten de waardes van die nieuwe tab (welke naam deze nieuwe tab ook heeft) op B1 en B40 weergegeven worden in tab overzicht werk in kolom B en C naast waar je net de nieuwe naam hebt ingevoerd. dan kan elke rij zijn. Het hele idee van is dat er voor elk project een tab is met een totaal overzicht in tab Overzicht werk. Sorry beter kan ik het echt niet uitleggen.
Als ik je goed begrijp maak je een kopie van het blad Template met als bladnaam de naam die in je kolom A van het blad "Overzicht werk" hebt ingevuld (bv. 'Test1'). Het blad 'Test1' wil je daarna invullen en nadat dat invullen compleet is, wil je de waarden van B1 en B40 van 'Test1 kopiëren naar het blad 'Overzicht werk' naar de kolommen B en C, behorend bij de naam van het ingevulde blad (in dit voorbeeld 'Test1'). Als dat juist is, dan kan dat met een macro als volgt:

- Bepaal het aantal ingevulde rijen van kolom A in het blad "Overzicht werk".
- Bepaal in welke rij van het blad "Overzicht werk" de naam van het blad staat waarvan je gegevens wil kopiëren (Dat kan met de functie match, noem de gevonden rij bv. r).
-Kopieer uit het bewuste blad (de 'ActiveSheet') Range("B1") naar Range("C" & r) van het blad "Overzicht werk".
- Kopieer uit het bewuste blad (de 'ActiveSheet') Range("B40");
- Plak niet de inhoud, maar de waarde ervan (PasteSpecial Paste:=xlPasteValues) naar Range("B" & r) van het blad "Overzicht werk".

De macro moet je plaatsen in een module (in de vba-editor kiezen: "Invoegen - Module".
Het is het gemakkelijkst om de macro uit te voeren door op een knop te klikken, maar dan zou je in elk aangemaakt nieuw blad een knop moeten plaatsen. Om dat te vermijden kun je in plaats van een knop in de bladen ook een knop (icoon) in de "Werkbalk snelle toegang" plaatsen. Hoe dat moet heb ik op dit forum onlangs nog uitgelegd in dit topic:
https://gathering.tweakers.net/forum/list_messages/2132490
(zie mijn bericht aldaar van 15 juni 2022, 15.38 uur onder de punten 8 t/m 10).
Met die knop in de 'werkbalk snelle toegang' moet je erg goed opletten in die zin dat je er op klikt terwijl je het actieve blad voor je hebt (waaruit je gegevens wil kopiëren) en niet een ander blad.

Acties:
  • +1 Henk 'm!

  • JohanKoers
  • Registratie: Februari 2020
  • Laatst online: 04-05-2023
Dit is het geworden voor degene die dit ooit ergens voor nodig hebben.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Evaluate("ISREF('" & Target & "'!A1)") Then
MsgBox "Werkblad " & Target & " bestaat al.", vbExclamation, "Werkblad bestaat al."
Else
Sheets("Template").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Target
End If
kolB = "=" & Target & "!B40"
kolC = "=" & Target & "!B1"
Sheets(1).Select
Cells(Target.Row, 2) = kolB
Cells(Target.Row, 3) = kolC
End If
End Sub

Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Tja, dan was de probleemstelling toch anders dan waar ik vanuit ging (en logischerwijs vanuit mócht gaan).
In je voorbeeldbestand staan in het vak Template niet de gegevens die in het blad Test1 staan, daarom nam ik aan dat de gegevens in Test1 niet uit het blad Template kwamen en dat je Test1 pas ging invullen nadat je dat blad had aangemaakt.
Jouw oplossing zou overigens de mijne niet zijn, maar dat terzijde. Over smaak valt niet te twisten.

Acties:
  • 0 Henk 'm!

  • Teun_2
  • Registratie: Oktober 2003
  • Laatst online: 30-09 22:16
dix-neuf schreef op vrijdag 8 juli 2022 @ 11:15:
Tja, dan was de probleemstelling toch anders dan waar ik vanuit ging (en logischerwijs vanuit mócht gaan).
In je voorbeeldbestand staan in het vak Template niet de gegevens die in het blad Test1 staan, daarom nam ik aan dat de gegevens in Test1 niet uit het blad Template kwamen en dat je Test1 pas ging invullen nadat je dat blad had aangemaakt.
Jouw oplossing zou overigens de mijne niet zijn, maar dat terzijde. Over smaak valt niet te twisten.
Ooh jawel, voor deze doesltelling met macro's aan de slag gaan is een grote no-no. Er zijn echt betere manieren om dit te doen.

Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 15:39
JohanKoers schreef op woensdag 6 juli 2022 @ 09:54:
Ik denk dat ik deel begrijp (sorry ben beginner) maar A3 de naam van het tablad veranderd elke keer in de code. Moet het dan zijn : =INDIRECT(Target&"!B40") target is de variabele voor de nieuwe naam van het tabblad in de code
Hoi Johan,

Even t.a.v. het forumgebruik, ik zie nu pas dat je wel had gereageerrd, als je specifiek op iemand (of een reactie) reageert, quote dan de reactie (met de quote knop bij de betreffende reactie), of tag diegene waarop je reageert, dan wordt diegene erop geattendeerd.

Wat ik had gedaan was juist heel simpel in het Excel bestand zelf (los van de code) die formule ingevoerd bij B3 en doorgesleept naar beneden. (Excel nummert dan zelf van A3 naar A4 naar A5 op basis van de rij waar de formule staat).
Voeg je dan in A3 een nieuw tabblad toe (voer je een naam in), dan wordt dat tabblad door jou gemaakt, en in veld B3 wordt dan direct gezocht naar de waarde die op dat nieuwe tabblad in B40 staat.

Wat jij doet dat kan inderdaad ook, maar waar iets niet in code gedaan hoeft te worden doe ik dat ook liever niet in Excel, die tool is best krachtig als je weet hoe je die gebruikt.
Pagina: 1