Worksheet.nl  

Ga terug   Worksheet.nl > Excel Vragenforum > Afgehandelde vragen


Status bericht: Opgelost
 
LinkBack Discussietools Weergave
  #1  
Oud 7 maart 2010, 18:54
Member
 
Geregistreerd: 5 januari 2010
Berichten: 39
Standaard if then

Heren,

Ik maak in een user form gebruik van option buttons (in een groep)
Het resultaat hieruit link ik aan verschillende macro's die maar iets verschillen (naar andere cellen verwijzen) omdat ik de if then niet machtig ben.
Tevens wil ik een weeknummer in een datum omzetten (de woensdag in die week)
Wie kan mij hier bij helpen?
Ik heb een voorbeeldje meegestuurd zoals ik het ongeveer wil

Alvast bedankt,
Wim
Bijgevoegde bestanden
Bestandstype: xls WS keuze.xls‎ (37,0 KB, 38x gelezen)
Sponsored Links
  #2  
Oud 8 maart 2010, 13:38
Member
 
Geregistreerd: 11 september 2008
Berichten: 92
Standaard

Hoi Wim,

Je macro klopt logisch gezien niet. Je schrijft namelijk eerst een datum naar cel A2 in het tweede werkblad, en vervolgens overschrijf je die met een copy&paste van cellen B2:B10 uit het eerste werkblad.

Ik heb een vermoeden van wat je wilt bereiken en heb daarop de routine achter de eerste selectiebox aangepast naar het volgende. Je kunt zelf de andere routines aanpassen. Is dit wat je zoekt?

Tip: je hoeft een werkblad of cel niet eerst te selecteren om erin te kunnen schrijven. De macrorecorder laat dat wel zien (want zo doe je dat als je het handmatig doet) maar dat soort zaken laat je in VBA gewoon achterwege.

Groet,

Remco

Code:
Private Sub OptionButton1_Click()
    With Worksheets("Sheet1")
        Worksheets("Sheet2").Range("A1").Value = DateAdd("ww", .Range("B1").Value, Date)
        .Range("B2:B10").Copy (Worksheets("Sheet2").Range("A2"))
        .Range("A1").Select
    End With
    Unload Me
End Sub
  #3  
Oud 9 maart 2010, 06:52
Member
 
Geregistreerd: 5 januari 2010
Berichten: 39
Standaard

Beste Remco,

Dit is inderdaad ongeveer wat ik zoek.
Echter in het programma wat ik heb zijn meerdere keuze mogelijkheden waardoor ik 12 nogal uitgebreide macro's heb
Wat ik graag zou willen (indien mogelijk) is: Als keuzerondje 1 = waar dan neem waarde uit A1 en kopieer kolom A. Als keuzerondje 2 = waar dan neem waarde uit B1 en kopieer kolom B. Etc
Dit betekend dat het adres waar gegevens vandaan gehaald dienen te worden veranderd. Ik heb al wat geprobeerd met offset maar het lukt me niet om het toe te wijzen adres te wijzigen.
Bij als keuzerondje = waar dacht ik aan
Private Sub OptionButton1_Click()
If OptionButton1 = True Then Range("Q1") = 1
End Sub

Waardoor ik de waarde uit Q1 kan gebruiken maar nu nog de (relatieve) verwijzing naar een adres....

Groet,
Wim

Laatst gewijzigd door Taz4; 9 maart 2010 om 12:48
  #4  
Oud 9 maart 2010, 12:39
Member
 
Geregistreerd: 11 september 2008
Berichten: 92
Standaard

Hoi Wim,

Er zijn meerdere manieren om dit probleem op te lossen. Ik denk dat in dit geval het voldoet om simpelweg met een procedure argument te werken dat het checkbox nummer doorgeeft aan een subroutine die het kopieerwerk doet.

Zet in een module de volgende code:

Code:
Sub DoStuff(lCheckBox As Long)
    With Worksheets("Sheet1")
        Worksheets("Sheet2").Cells(1, lCheckBox).Value = DateAdd("ww", .Cells(1, lCheckBox + 1).Value, Date)
        Range(.Cells(2, lCheckBox + 1), .Cells(10, lCheckBox + 1)).Copy (Worksheets("Sheet2").Cells(2, lCheckBox))
        .Range("A1").Select
    End With
    Unload UserForm1
End Sub
En zet in het codeblok van je formulier het volgende:

Code:
Private Sub OptionButton1_Click()
    DoStuff 1
End Sub

Private Sub OptionButton2_Click()
    DoStuff 2
End Sub

Private Sub OptionButton3_Click()
    DoStuff 3
End Sub
Etc.
Op deze manier is je code goed te overzien en kun je alles laten afhandelen door één subroutine.

Groet,

Rembo
  #5  
Oud 9 maart 2010, 12:54
Member
 
Geregistreerd: 5 januari 2010
Berichten: 39
Standaard

Meteen even uitgeprobeerd, het werkt bijna zoals ik het voor ogen zie.
Kleine verandering toegepast zodat het altijd naar de eerste kolom in sheet 2 gekopiëerd wordt"
Sub DoStuff(lCheckBox As Long)
With Worksheets("Sheet1")
Worksheets("Sheet2").Cells(1, 1).Value = DateAdd("ww", .Cells(1, lCheckBox + 1).Value, Date)
Range(.Cells(2, lCheckBox + 1), .Cells(10, lCheckBox + 1)).Copy (Worksheets("Sheet2").Cells(2, 1))
.Range("A1").Select
End With
Unload UserForm1
End Sub

Slechts één ding wat niet klopt.
De datum die hij in rij 1 zet is de datum van vandaag + het aantal weken wat in rij1 van sheet 1 staat. Kortom hij telt er 10 weken bij op. Hoe kan ik dit voorkomen?

Groet,
Wim

P.S. Hoe krijg je de code zo mooi in een blok?

Laatst gewijzigd door Taz4; 9 maart 2010 om 13:31
  #6  
Oud 10 maart 2010, 00:16
Mr. Magoo's schermafbeelding
Super Moderator
 
Geregistreerd: 17 november 2005
Locatie: Blokker Nederland
Berichten: 4.492
Standaard

door eerst te klikken op het # in de menubalk van de forum editer of de tekst te selecteren en dan te klikken op het # in de forum editer.

Als je tekst naderhand bewerkt kies dan Meer opties om in het scherm te komen waar je de code tags kunt invoeren.

Je kunt ook CODE tussen [] deze haakjes zetten en /CODE tussen [] haakjes zetten.
alles wat daartussen staat wordt als VBA code gezien
__________________
Suc6

druk op F1 en lees ! En zie wat de moeder van de meeste oplossingen is.
en Worksheet.nl is de dochter

Moderator www.worksheet.nl / mr.magoo@worksheet.nl

Lees informatieve columns over buitenlandse reizen en wandelingen in Nederland
Verrassende columns over het leven van alledag op een camping.
Optimistische columns over pubers, ouders en ouderen. op www.jolandacatharina.nl
  #7  
Oud 10 maart 2010, 08:53
Member
 
Geregistreerd: 11 september 2008
Berichten: 92
Standaard

Citaat:
Oorspronkelijk geplaatst door Taz4 Bekijk bericht
Slechts één ding wat niet klopt.
De datum die hij in rij 1 zet is de datum van vandaag + het aantal weken wat in rij1 van sheet 1 staat. Kortom hij telt er 10 weken bij op. Hoe kan ik dit voorkomen?
Deze statement berekent die specifieke datum:

Code:
DateAdd("ww", .Cells(1, lCheckBox + 1).Value, Date)
Hier staat feitelijk: Tel (DateAdd) het aantal weken (ww) dat staat in in de cel .Cells(1, lCheckBox +1) op bij de huidige datum (Date). Aanpassen naar smaak.

Groet,

Rembo
  #8  
Oud 10 maart 2010, 17:53
Member
 
Geregistreerd: 5 januari 2010
Berichten: 39
Standaard

Dank Rembo,

Ik ben er uit (denk ik)

Groet,
Wim
 

Discussietools
Weergave

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Aan



Ga terug   Worksheet.nl > Excel Vragenforum > Afgehandelde vragen



Alle tijden zijn GMT +2. Het is nu 10:17.


Forumsoftware: vBulletin®, versie 3.8.6
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.5.1 PL1