• 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.

Excel VBA werkbladen

Status
Niet open voor verdere reacties.

Claudioo

Gebruiker
Lid geworden
29 sep 2015
Berichten
8
Goedemiddag mensen,

Een tijdje geleden heb ik hier een vraag geplaatst waar ik prima mee geholpen ben, ik was toen bezig met een Excel bestand waarin ik uren kon bij houden voor klanten. Nu wil ik graag het document wat gebruikersvriendelijker maken.
Nu heb ik in mijn document een knopje gemaakt die een macro uitvoert, en heb ik een werkblad toegevoegd die dient als template. Wanneer ik de knop activeer krijg ik een prompt die mij vraagt om een klantnaam in te voeren, wanneer ik een naam invoer en op ok klik word het template werkblad gekopieerd en krijgt die de door mij ingevoerde naam. Dit werkt dus goed.

De nieuwe werkbladen die worden aangemaakt d.m.v de knop bevatten een aantal cellen die verwijzen naar een ander werkblad. Alleen wil ik graag dat de cellen automatisch bij elke kopie worden opgehoogd. Voorbeeld:
Mijn nieuw gekopieerde werkblad heeft in de volgende cellen de volgende waardes:
cel C3 (=KLANTEN!C11)
cel E3 (=KLANTEN!E11)
cel F3 (=KLANTEN!F11)
cel G3 (=Klanten!G11)

Stel dat ik nu weer een nieuwe klant toevoeg dan worden bovenstaande waardes dus meegenomen en zou ik deze handmatig aan moeten passen naar (=KLANTEN!C12), en bij weer een nieuwe klant (=KLANTEN!C13) etc.
Is er een manier om dit te automatiseren d.m.v een knop o.i.d ?

Mijn VBA code momenteel:
Sub CopySheet()
Dim i As Integer, x As Integer
Dim shtname As String

'i = Application.InputBox("Copy how many times?", "Copy sheet", Type:=1)
'For x = 0 To i - 1
Sheets("template").Copy After:=Sheets(Sheets.Count)
shtname = InputBox("Naam van klant", "Klant naam")
ActiveSheet.Name = shtname
'Next x

End Sub
Ik hoop dat iemand mij hiermee kan helpen, alvast bedankt!
Claudio.
 
Laatst bewerkt:
hallo Claudioo,

onderin bij beheer bijlagen kan een excel bestandje toegevoegd worden.

maak een klein voorbeeld bestandje dat liefst alleen je probleem bevat en post het hier aub.
 
claudioo, even de volgorde bepalen.

je maakt een nieuw klantblad aan.
deze vul je in
de ingevulde gegevens komen daarna in het klanten bestand.

klop dit of gaat het anders?
 
Hallo sylvester-ponte,

Eigenlijk is het juist andersom.. ik maak een nieuw klantblad aan d.m.v de knop en de cellen C3, E3, F3, G3 van het klantblad worden dan gehaald uit het blad "Klanten".
Alleen als ik dus een nieuw klantblad aanmaak, dan blijven de waardes hetzelfde bijvoorbeeld:

De verstreken maanden van het klantblad, in dit geval dus het blad "Klant" heeft nu de formule =Klanten!E3

Alleen is als ik een nieuwe klant toevoeg in het overzicht "Klanten" dan zou het dus =Klanten!E4 moeten worden enzovoort..
Ik hoop dat je me begrijpt, het is nogal lastig uit te leggen zo

alvast bedankt voor je hulp
 
ik neem aan dat de naam van de klant al is ingevuld op het klanten blad.
waarom dan in je macro de vraag om de naam in te vullen?
 
Laatst bewerkt:
Dat klopt indd, alleen moet er voor de klant zelf wel een apart blad komen.. wat de knop dus doet in dit geval.
De naam die je invult word de naam voor het tabblad onderin en staat dus los van het overzicht
 
als die namen in het overzicht niet het zelfde zijn als de namen van de bladen hoe wil je dan eenvoudig koppelen?

is het de bedoeling dat later alles in de klant bladen bijgehouden wordt? of kan dat ook in de klanten tabel?
 
Hoe bedoel je dat precies met 1 tabel ?

Het klantenblad is een overzicht van alle lopende klanten, en daar worden de afgesproken data en uren op ingevuld.
Op de aparte klantbladen worden de uren bijgehouden per klant. De aparte klantbladen heb ik ook zodat ik per klant kan laten zien hoeveel uur er geregistreerd is.
 
Probeer deze eens.

Code:
Sub copysheet()
With Sheets("Klanten")
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    shtname = InputBox("Naam van de klant?", "Naam invoeren")
    If IsError(Evaluate(shtname & "!a1")) Then
        Worksheets("template").Copy After:=Sheets(Sheets.Count)
        With ActiveSheet
            .Name = shtname
            .[C3].Formula = "=klanten!C" & lr
            .[E3].Formula = "=klanten!E" & lr
            .[F3].Formula = "=klanten!F" & lr
            .[G3].Formula = "=klanten!G" & lr
        End With
        .Cells(lr, 1) = shtname
      Else: MsgBox "klant bestaat al"
    End If
End With
End Sub
 
Probeer deze eens.

Code:
Sub copysheet()
With Sheets("Klanten")
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    shtname = InputBox("Naam van de klant?", "Naam invoeren")
    If IsError(Evaluate(shtname & "!a1")) Then
        Worksheets("template").Copy After:=Sheets(Sheets.Count)
        With ActiveSheet
            .Name = shtname
            .[C3].Formula = "=klanten!C" & lr
            .[E3].Formula = "=klanten!E" & lr
            .[F3].Formula = "=klanten!F" & lr
            .[G3].Formula = "=klanten!G" & lr
        End With
        .Cells(lr, 1) = shtname
      Else: MsgBox "klant bestaat al"
    End If
End With
End Sub

Dit werkt precies zoals ik bedoelde, echt heel erg bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan