[VBA, Excel] nieuwe worksheet naam geven

Pagina: 1
Acties:
  • 2.192 views sinds 30-01-2008
  • Reageer

  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
Ik heb een excel file waarin een nieuwe sheet moet worden gemaakt, deze sheet moet een naam krijgen met gegevens uit de reeds bestaande sheets.

In dit geval:
Sheets("stap1").Range("F13").Value bevat de waarde "2005"

De naam van de nieuwe Sheet moet nu worden: "Cijfers 2005"

Er worden afhankelijk van de voorgaande handelingen in dit workbook meerdere nieuwe sheets aangemaakt, waardoor het onduidelijk is of de nieuwe sheet Sheet1, Sheet2,... heet.
De gewone manier van Sheets renamen werkt dus niet.
Als ik in de F1 zoek naar Add en Name, krijg ik niet wat ik zoek.

Er moet toch een manier zijn om een nieuwe sheet meteen een naam mee te geven, die ook nog samengesteld is uit fragmenten die VB uit andere reeds bestaande sheets haalt ???

Dit is de code waarmee ik geprobeerd had, maar die werkte niet:
Visual Basic:
1
2
a = Sheets("stap1").Range("F13").Value
Sheets("Cijfers" & a).Add
Wie heeft er een oplossing voor mij ?

iets met foto's...


  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 02-06 20:28

CoRrRan

Don't Panic!!!

Visual Basic:
1
2
Worksheets.Add(After:=Worksheets(ActiveSheet.Index)) _
    .Name = "Cijfers " & Worksheets("stap1").Range("F13").Value
De "ActiveSheet.Index" is een voorbeeld, deze moet je eventjes veranderen naar wat je precies wilt hebben.

-- == Alta Alatis Patent == --


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Ik weet niet zeker of er op regel twee van CoRrRan iets gaat gebeuren. Zoniet, probeer:
Visual Basic:
1
2
3
4
Dim Mijnnieuweblad as Worksheet
Set Mijnnieuweblad = Worksheets.Add(After:=Worksheets(ActiveSheet.Index)) _
Set Mijnnieuweblad.Name = "Cijfers " & Worksheets("stap1").Range("F13").Value
Set Mijnnieuweblad = Nothing 'hiermee verwijder je de koppeling, de variabele wordt leeggemaakt, maar je blad blijft wel bestaan.

  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 02-06 20:28

CoRrRan

Don't Panic!!!

onkl schreef op dinsdag 07 februari 2006 @ 18:05:
Ik weet niet zeker of er op regel twee van CoRrRan iets gaat gebeuren. Zoniet, probeer:
[...]
Ik weet niet of je die underscore gezien hebt op regel 1, maar die geeft een line break aan. Trust me, dit werkt als een zonnetje.

Kijk op:
http://www.microsoft.com/.../solution/part2/ch03.mspx
En zoek even op die pagina naar "Line Breaks"

[ Voor 6% gewijzigd door CoRrRan op 07-02-2006 18:57 ]

-- == Alta Alatis Patent == --


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
CoRrRan schreef op dinsdag 07 februari 2006 @ 18:56:
[...]
Ik weet niet of je die underscore gezien hebt op regel 1, maar die geeft een line break aan. Trust me, dit werkt als een zonnetje.

Kijk op:
http://www.microsoft.com/.../solution/part2/ch03.mspx
En zoek even op die pagina naar "Line Breaks"
He, leuk. De underscore als linebreak kende ik natuurlijk wel, maar dat je daar meer mee kan doen dan lange regels leesbaar houden wist ik dan weer niet.

  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 02-06 20:28

CoRrRan

Don't Panic!!!

onkl schreef op dinsdag 07 februari 2006 @ 19:11:
[...]

He, leuk. De underscore als linebreak kende ik natuurlijk wel, maar dat je daar meer mee kan doen dan lange regels leesbaar houden wist ik dan weer niet.
Eigenlijk had ik die underscore ook gebruikt om de code leesbaar te houden. :) Anders krijg je zo'n horizontale scrollbar op GoT en dat vind ik wat minder leesbaar. (Ook probeer ik altijd in mijn code een maximum van 80 characters per regel te hanteren, dus die underscore zie ik redelijk vaak in mijn code terug.)

-- == Alta Alatis Patent == --


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

offtopic:
Wel gezellig babbelen over undercores, maar niemand die opmerkt dat dit garant staat voor maar liefst twee compile errors?

Visual Basic:
1
2
Set Mijnnieuweblad = Worksheets.Add(After:=Worksheets(ActiveSheet.Index)) _
Set Mijnnieuweblad.Name = "Cijfers " & Worksheets("stap1").Range("F13").Value

;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Niesje schreef op dinsdag 07 februari 2006 @ 20:26:
offtopic:
Wel gezellig babbelen over undercores, maar niemand die opmerkt dat dit garant staat voor maar liefst twee compile errors?

Visual Basic:
1
2
Set Mijnnieuweblad = Worksheets.Add(After:=Worksheets(ActiveSheet.Index)) _
Set Mijnnieuweblad.Name = "Cijfers " & Worksheets("stap1").Range("F13").Value

;)
Compilen?compilen? Ach, dat gezeur. Als het maar werkt... O+
Overigens, als je code kniperdeplakt en dan aanpast schijnt het slim te zijn te kijken wat je knipperdeplakt. Een underscore ja.
Beter:
Visual Basic:
1
2
3
4
Dim Mijnnieuweblad As Worksheet
Set Mijnnieuweblad = Worksheets.Add(After:=Worksheets(ActiveSheet.Index))
Mijnnieuweblad.Name = "Cijfers "
Set Mijnnieuweblad = Nothing 'hiermee verwijder je de koppeling, de variabele wordt leeggemaakt, maar je blad blijft wel bestaan.

Maar je kan ook CoRrRan's code gebruiken.

  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
Heren, dat gebabbel over die underscore was erg leerzaam :)
En ook is mijn vraag beantwoord, dus het was weer een leerzaam avondje 8)

Heb ik gelijk een volgende vraag waar ik niet zo goed uitkom...
Een Sheet ziet er ongeveer zo uit:

1000 2 Vaste activa 1000
1010 1 Immateriele Vaste activa 200
1011 Goodwill 100
1012 Entree Fee 100
1020 1 Materiele Vaste Activa 800
1021 Software 400
1022 Machines en Inventaris 400

De bedoeling is nu dat voor het vervolg van de procedure enige formules worden ingebouwd.
De bovenstaande getallen komen in eerste instantie namelijk rechtstreeks uit het boekhoudprogramma, en omdat er in excel correcties gedaan kunnen worden, moeten automatisch de saldi worden aangepast d.m.v. ingebouwde formules.
Zoals je ziet is 1000/2/Vaste Activa een optelling van 1010 en 1020. En zijn 1010 en 1020 een optelling van resp. 1011/1012 en 1021/1022.
De samenstelling van de pagina verschilt per keer, dus het aantal regels na 1000, of na 1020 verschilt, en dat is de moeilijkheid nu.
Wellicht dat er wat te doen valt met de niveau's 1 en 2 ? Ik ben al aan het rommelen geweest, maar wat er uit komt is erg omslachtig en werkt maar half. :/

Iemand ? Alvast bedankt !

de weergave is niet helemaal lekker, maar de getallen 1000/1010 etc staan in 1 kolom, de niveau's 1,2 en "" staan in de kolom ernaast, de omschrijving daarnaast, en de getallen een paar kolommen verderop

[ Voor 8% gewijzigd door Gulf_5 op 08-02-2006 11:39 ]

iets met foto's...


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Wat je kan doen is:
Maak een kolom waarin voor ieder detail (niveau 0) staat hoeveel het gewijzigde bedrag is.
Maak een kolom waarin je dat optelt, van onder af:
Als het niveau van de regel onder me niet 1 of groter is, dan tel op: het getal recht onder me en het regeltotaal. Anders alleen het regeltotaal.
Maak een kolom met: Als het niveau voor deze regel=1 dan pak het net uitgerekende totaal van de regel hieronder. anders ben ik 0.
En laat daarop het optellen en uitfilteren trucje los voor niveau twee. Vervolgens kan je met kiezen/choose op iedere regel de kolom pakken die je nodig hebt.
Zie je zonnet mail voor een voorbeeldje.

  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
@ onkl: onwijs bedankt, hier heb ik wat aan, ga t gelijk proberen !!!

edit:
Ziet er goed uit Onkl, nu nog effe manier bedenken om t in VBA te kloppen :)
Zal wel klus worden, maar ga t proberen, mocht iemand me voor willen, be my guest !! alle hulp is welkom.

[ Voor 59% gewijzigd door Gulf_5 op 08-02-2006 12:56 ]

iets met foto's...


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Aha, VBA.
Wel, wat dacht je van een trucje als:

(nepcode, ik zou best eens een underscore kunnen missen :+ )
ik neem de volgende kolomindeling aan:
A=nummer
B=niveau
C=naam
D=bedrag
E=wijziging
F=resultaat
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub hoi()
Dim mijncel As Range
Dim kijkcel As Range
Dim totaal As Single
Set mijncel = Activeworksheet.Range("F1") '(Adres eerste resultaatcel)
Do While mijncel.Offset(0, -3).Value <> "" 'als er geen naam is zal het wel niets zijn
    If mijncel.Offset(0, -4).Value = "" Then
        mijncel = mijncel.Offset(0, -2) + mijncel.Offset(0, -1)
    Else 'niveau 1 of twee
        Set kijkcel = mijncel.Offset(1, 0)
        totaal = 0
        Do While kijkcel.Offset(0, -3).Value <> ""
            If kijkcel.Offset(0, -4) = mijncel.Offset(0, -4) Then 'volgende regel met gelijk niveau bereikt
                Exit Do 'we hebben wel weer genoeg cellen bekeken. Totaal wegschrijven en verder maar weer.
            End If
            If kijkcel.Offset(0, -4) = "" Then 'detailregel gevonden, tel bij totaal op.
                totaal = totaal + kijkcel.Offset(0, -1) + kijkcel + Offset(0, -2)
            End If
            Set kijkcel = kijkcel.Offset(1, 0)
        Loop
        mijncel = totaal
    End If
    Set mijncel = mijncel.Offset(1, 0)
Loop
End Sub

  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
Zo, die code van jou ziet er effe anders uit dan de mijne :)

Die van mij was af, en werkt zoals ie moet, dus die laat ik lekker staan, maar voor de volgende keer zal ik die van jou es gebruiken, die ziet er nog niet eens zo onlogisch uit.

Maar voor de vorm mag je de mijne ook nog even bekijken hoor... De xls zit er niet bij, dus is misschien wat moeilijk voor te stellen wat er gebeurt, maar dit is m:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Columns("A:A").Select
    Selection.Find(What:="", After:=Cells(7, 1), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, Searchdirection:=xlNext, MatchCase:=False).Select
   
    ActiveCell.Offset(-1, 32).Select
    y = ActiveCell.Address
    ActiveCell.Offset(0, -26).Select
    x = ActiveCell.Address
    ActiveCell.Offset(0, 3).Select
    v = ActiveCell.Address
    ActiveCell.Offset(0, 31).Select
    z = ActiveCell.Address
    
Range("AA5").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-25]=2,"""",IF(RC[-25]=1,"""",RC[-22]-RC[-21]))"
    Range("AB5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-26]="""",RC[-24]+RC[-1],0)"
    Range("AC5").Select
    ActiveCell.FormulaR1C1 = "=IF(R[1]C[-27]=0,R[1]C+RC[-1],RC[-1])"
    Range("AD5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-28]=1,R[1]C[-1],0)"
    Range("AE5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-29]>1,RC[-1],RC[-1]+R[1]C)"
    Range("AF5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-30]=2,R[1]C[-1],0)"
    Range("AG5").Select
    ActiveCell.FormulaR1C1 = "=CHOOSE(RC[-31]+1,RC[-5],RC[-3],RC[-1])"
    Range("AA5:AG5").Select
    Selection.AutoFill Destination:=Range("AA5", y), Type:=xlFillDefault
   
Range("AI5").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-33]=2,"""",IF(RC[-33]=1,"""",RC[-27]-RC[-26]))"
    Range("AJ5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-34]="""",RC[-29]+RC[-1],0)"
    Range("AK5").Select
    ActiveCell.FormulaR1C1 = "=IF(R[1]C[-35]=0,R[1]C+RC[-1],RC[-1])"
    Range("AL5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-36]=1,R[1]C[-1],0)"
    Range("AM5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-37]>1,RC[-1],RC[-1]+R[1]C)"
    Range("AN5").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-38]=2,R[1]C[-1],0)"
    Range("AO5").Select
    ActiveCell.FormulaR1C1 = "=CHOOSE(RC[-39]+1,RC[-5],RC[-3],RC[-1])"
    Range("AI5:AO5").Select
    Selection.AutoFill Destination:=Range("AI5", z), Type:=xlFillDefault
   
Range("G5").Select
ActiveCell.FormulaR1C1 = "=RC[26]"
Range("G5").Select
Selection.AutoFill Destination:=Range("G5", x), Type:=xlFillDefault

Range("J5").Select
ActiveCell.FormulaR1C1 = "=RC[31]"
Range("J5").Select
Selection.AutoFill Destination:=Range("J5", v), Type:=xlFillDefault


brand los met commentaar :+
en begin nou niet over het ontbreken van underscores :P

[ Voor 14% gewijzigd door Gulf_5 op 08-02-2006 16:06 ]

iets met foto's...


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:54
Gulf_5 schreef op woensdag 08 februari 2006 @ 16:05:[...]
brand los met commentaar :+[...]
Nu ja, als het moet dan moet het.

Je code is erg gefixeerd op werkbladformules om te rekenen. Het is niet zozeer een programma om uit te rekenen wat je wilt hebben, maar een programma om in te vullen welke formules je nodig hebt om uit te rekenen wat je wilt hebben.
En daar worden programma's nu eenmaal langer van. Dat is op zich geen probleem, maar kijk eens naar de verschillen in programmeerstijl en denk dan aan uitbreidbaarheid van de code. Bijv. probeer je eens een niveau 3 voor te stellen in die van jouw. Bij mij werkt dat autoelectrisch al
(als je regel 13 verandert in:
Visual Basic:
1
If kijkcel.Offset(0, -4) => mijncel.Offset(0, -4) Then 

wat hoe dan ook een goed idee is :X )
Of in versie huidig+1 van het boekhoudpakket besluit de een of andere flippo de kolomdefinitie om te gooien.. etc.
Ook de begrijpelijkheid ervan voor een eventuele opvolger is kleiner.
Op zich maak ik ook wel eens code zoals die van jouw, vaak met veel macro-recorder knippen en plakken, maar er is mij ooit verteld dat het beter kan en soms ook wel moet. (Dat was mijn baas, ongeveer een maand nadat'ie m'n ex-baas werdt 8)7 )

  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
:+
duidelijk !!
Mja, ik heb het VBA ook intern geleerd, niet een cursusje ofzo. Vandaar mijn stijl, die ikzelf ook niet erg netjes vind, maar t werkt allemaal wel.
Wat betreft de kolomdefinitie, die kunnen we zelf bepalen, dus dat scheelt.

Bovendien wordt de macro losgelaten op een sheet die al aan _heel veel_ bewerkingen heeft blootgestaan, als er dus iets verandert wordt dat daarvóór al opgevangen.

/me Gulf_5 ziet zijn boek VB 6.0 liggen
denk dat ik me binnenkort maar weer eens een beetje ga verdiepen in hoe het écht moet 8)
In ieder geval tot zover bedankt ! en ik kom ongetwijfeld bij je / jullie terug als ik weer wat heb...

iets met foto's...

Pagina: 1