[Excel 2007] Automatisch datum invoegen*

Pagina: 1
Acties:

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Is het mogelijk dat een cel, wanneer er in een aantal vooraf aangewezen cellen een wijziging wordt ingevoerd, automatisch de datum van vandaag weergeeft?

Voorbeeld:
als in cellen A1 t/m A5 iets wijzigt, komt in cel A6 de datum van vandaag te staan.


Zo kun je dus in een Excelbestand altijd later terugzoeken wanneer er iets voor het laatst is gewijzigd (en wát er gewijzigd is).

[ Voor 4% gewijzigd door tbenschop2 op 28-08-2008 14:59 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Dat kan, maar dan ben je al gauw aan 't duiken in VBa :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
'Geeft niet ;)

Als iemand me daarbij kan helpen...
Ik heb trouwens al volop zitten zoeken op dit forum, kwam dezelfde vraag tegen, echter zonder (bevredigend) antwoord.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

• VBA worksheet change
• VBA add date to call Cell

levert genoeg op ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Ok, ik heb een beetje lopen zoeken en puzzelen.

dit is de code die ik nu heb:

code:
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("E6")) Is Nothing Then
    ActiveSheet.Range("E5").Select
    Selection = "=Vandaag()"
End If
End Sub


Als ik nu wat intyp in E6, dan komt er in cel E5 #NAAM? te staan. In de balk bovenin het scherm staat overigens wel =Vandaag() .... What's up wiz thet?

[ Voor 52% gewijzigd door tbenschop2 op 29-08-2008 10:28 ]


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Je moet een functie neerkwakken, dus een beetje spelen met Macro's levert het volgende op

Visual Basic:
1
2
3
4
5
6
Sub Macro1()
'
' Macro1 Macro
'
    ActiveCell.FormulaR1C1 = "NOW()"
End Sub


sowieso een tip om eerst een macro op te nemen en je activiteit handmatig op te nemen, leer je een klein beetje hoe het kan (overigens niet altijd de meest efficiente VBA methode).



Oftewel een kleine rewrite:

Visual Basic:
3
Range("E5").FormulaR1C1 =Now()


Het zou kunnen dat VBA alleen maar de Engelse functies herkent (dat ben ik ff vergeten :P); dat moet je even zelf testen (NU vs NOW)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
You're my hero! :)

Het werkt!

Het enige is dat ik nu bang ben dat wanneer ik mijn sheet morgen opnieuw open, alle data meeveranderen, en ik dus niet meer de datum van de wijziging zie (vandaag), maar die van morgen...

Wat denk jij?

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Dan pas je je datum aan en kijk je wat er gebeurt ;)

Is het echt zo erg dat die datum aangepast wordt, dan google je voor de gein eens naar Excel VBA show save date en kom terecht op: http://www.vbaexpress.com/kb/getarticle.php?kb_id=538

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Dank u, o machtig Excel orakel ;)
Ik snap nog niet helemaal hoe het werkt, maar ik ga me erin verdiepen als inderdaad blijkt dat de data verspringen bij elke keer dat je het bestand oplaadt.

Mag ik nog één vraag stellen? de sheet waar ik mee bezig ben wordt door meerdere mensen gebruikt. Het lijkt mij handig om -naast het bijhouden van de de data van wijzigingen- ook bij te houden WIE de wijzigingen heeft aangebracht.
Om dat te doen is het denk ik noodzakelijk om iets te maken waarin de gebruiker bij het opladen van de sheet zijn naam kan typen. Wachtwoord is niet nodig denk ik. Die naam onthoud Excel dan, en die kan ik vervolgens mbv VBA opoepen bij een worksheet_Change event en in een cel plaatsen.

Klinkt leuk, maar is dit haalbaar? Of wil ik nu weer iets te ingewikkelds?

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

BtM909 schreef op vrijdag 29 augustus 2008 @ 10:40:
Visual Basic:
1
2
    ActiveCell.FormulaR1C1 = "=NOW()"
End Sub
Da's niet handig. Je wilt de datum vastzetten, waarom zou je dan een formule gebruiken die verandert iedere keer dat een bald herberekend wordt?
code:
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, ActiveSheet.[E6]) Is Nothing) Then
    ActiveSheet.[E5] = Now()
    End If
End Sub
tbenschop2 schreef op donderdag 28 augustus 2008 @ 14:58:
Ik heb trouwens al volop zitten zoeken op dit forum, kwam dezelfde vraag tegen, echter zonder (bevredigend) antwoord.
Het is je vaker gezegd: geef dan tenminste in je Topicstart ook aan wat je wél gevonden hebt en waarom het niet bevredigend is.
tbenschop2 schreef op vrijdag 29 augustus 2008 @ 11:14:
Om dat te doen is het denk ik noodzakelijk om iets te maken waarin de gebruiker bij het opladen van de sheet zijn naam kan typen.
Als het goed is heeft de gebruiker zijn naam al ingetikt bij het aanloggen op de pc. :)

En nou weer zelf aan de slag met 'environ' ;)

[ Voor 45% gewijzigd door Lustucru op 29-08-2008 11:27 ]

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


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
EDIT:

Ik heb het gevonden! Het is niet zo lastig als het lijkt.
Bedankt voor jullie hulp!!!


OUDE TEKST:
Bedankt voor de reactie..

Het punt is dat ik wel iets kan vinden dat dit doet, bijvoorbeeld
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Range
Set I = Intersect(Range("C4:C500"), Target)

If I Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim c As Range
For Each c In I
c.Offset(0, 1).Value = Environ("USERNAME")
Next c
Application.EnableEvents = True

End Sub

Maar hier zit een hele zooi doorheen waarvan ik geen flauw idee heb wat het doet of wat het is. Wat zijn bijvoorbeeld I en c ?

Die offset houdt in dat de waarde in de cel rechts ervan wordt geplaatst neem ik aan? Dat komt hier mooi uit omdat de usernaam komt te staan naast C4:C500. (dus D4:D500) Maar hoe zorg ik ervoor dat mijn username in D8 komt te staan als ik bijvoorbeeld B8 wijzig?
Wat is die laatste regel?
toon volledige bericht

[ Voor 6% gewijzigd door tbenschop2 op 29-08-2008 11:52 ]


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Potverdorie, nu werkt het toch weer niet!
Ik ben intussen geupgrade naar Excel 2007, zou dat wat uitmaken?

ik heb in de VBA editor dit staan:
code:
1
2
3
4
5
6
7
8
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, ActiveSheet.[A11:I11]) Is Nothing) Then
    ActiveSheet.[J11] = Now()
    ActiveSheet.[K11] = Environ("USERNAME")
    End If
.
.
.

Modbreak:Nergens goed voor om 28 x 4 identieke regels te posten. Je mag zelf ook schoffelen ipv gedachtenloos knippen en plakken

code:
1
2
3
4
5
6
7
8
. 
.
.
If Not (Intersect(Target, ActiveSheet.[A39:I39]) Is Nothing) Then
    ActiveSheet.[J39] = Now()
    ActiveSheet.[K39] = Environ("USERNAME")
    End If
End Sub


Maar als ik wat wijzig in de genoemde cellen komt er nergens de datum of mijn gebruikersnaam te staan!!! Hoe kan dat nou?

[ Voor 75% gewijzigd door Lustucru op 29-08-2008 15:49 ]


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Ga zelf eens debuggen. Wordt die code uberhaupt wel aangeroepen?

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


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Hmm.. het zijn inderdaad veel regels (kan het ook korter?). Ik krijg overigens geen foutmelding, hij doet gewoon niets.

Helaas werkt het ook niet als ik het terugbreng naar één regel,
code:
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, ActiveSheet.[A11:I11]) Is Nothing) Then
    ActiveSheet.[J11] = Now()
    ActiveSheet.[K11] = Environ("USERNAME")
    End If
End Sub


Het werkt gewoon niet. Zou het komen door mijn upgrade naar Excel 2007?

[ Voor 6% gewijzigd door tbenschop2 op 29-08-2008 16:56 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Zet eens een breakpoint op regel 2 in je voorbeeld. Op het moment dat je code wordt aangeroepen, stopt de uitvoering daar en wordt de VBA editor voor je geopend. Je kan dan gaan debuggen: controleren of de variabelen de juiste waarden hebben, of de If goed wordt afgehandeld, etc. Dan moet je er uit kunnen komen.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

tbenschop2 schreef op vrijdag 29 augustus 2008 @ 16:24:
Hmm.. het zijn inderdaad veel regels (kan het ook korter?). Ik krijg overigens geen foutmelding, hij doet gewoon niets.

Het werkt gewoon niet. Zou het komen door mijn upgrade naar Excel 2007?
Tuurlijk kan het veel korter, met behulp van iets als cells(target.row,nn) ben je in een keer klaar.
Beveiligingsinstellingen gechecked? Code op de goede plek geplakt, ondertekend?

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


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Lustucru schreef op vrijdag 29 augustus 2008 @ 11:18:
[...]

Da's niet handig. Je wilt de datum vastzetten, waarom zou je dan een formule gebruiken die verandert iedere keer dat een bald herberekend wordt?
code:
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, ActiveSheet.[E6]) Is Nothing) Then
    ActiveSheet.[E5] = Now()
    End If
End Sub
Fuckeduck.... Ik heb het blind gekopieerd van de TS en even naar Engels vertaald... Moest natuurlijk gewoon Now() zijn ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Bedankt voor jullie reacties.
@Lustrucru: Zou je daar nog even mee kunnen helpen, ik kom er niet echt uit. Wat bedoel je met nn?
@BTM909: Sorry, maar ik begrijp je niet echt, er stond toch al Now() ?

Verder werkt de code nog steeds niet.
Wat ik heb gedaan is de hele tabel naar een nieuwe lege sheet gekopieerd, daar een stukje VBa ingezet en dat werkte wel. Vaag he? Naja, dan maak ik hem gewoon nog een keer.

antwoord op de vraag hieronder van Lustrucu: ik zou niet weten waar ik dat kan bekijken, wist niet eens dat er beveiligingsinstellingen in Excel zaten, laat staan dat ik ze heb veranderd. Misschien wel per ongeluk.. Ik ga eens kijken in de help-file waar de beveiligingsinstellnigen zitten.

[ Voor 193% gewijzigd door tbenschop2 op 02-09-2008 12:35 ]


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Lustucru schreef op vrijdag 29 augustus 2008 @ 23:22:
Beveiligingsinstellingen gechecked?
Geef eens antwoord...

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


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
@Lusctucru:
ik zou niet weten waar ik dat kan bekijken, wist niet eens dat er beveiligingsinstellingen in Excel zaten, laat staan dat ik ze heb veranderd. Misschien wel per ongeluk.. Ik ga eens kijken in de help-file waar de beveiligingsinstellnigen zitten.

Even later... Dat bleek het dus te zijn. Heb nu alles op 'onveilig' gezet en de code werkt weer.
Probleem is alleen dat deze sheet op meetrdere computers moet werken.. Moeten die dan allemaal hun instellingen veranderen? (Sommige werken met Excel 2007, de meeste nog met 2000),

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Je wilt niet overal standaard de boel op onveilig zetten; de naam zegt het al :+

Zorg dat je je code ondertekent - en dat iedereen jouw handtekening ook vertrouwt (is eenmalig per machine nodig, als je geen echte, centraal uitgedeelde, handtekening hebt. Gezien de vraagstelling is dat niet het geval :P [google=selfcert.exe]

Dat is trouwens al sinds (denk ik) Off2000 nodig, maar het wordt - IMHO terecht - steeds meer standaard aangezet.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Bedankt, ik ga uitvogelen hoe ik de boel kan ondertekenen.

Blijft mijn vraag hoe ik de programmacode kort kan houden. Ik heb nu:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, ActiveSheet.[A11:I11]) Is Nothing) Then
ActiveSheet.[J11] = Now()
ActiveSheet.[K11] = Environ("USERNAME")
End If
If Not (Intersect(Target, ActiveSheet.[A12:I12]) Is Nothing) Then
ActiveSheet.[J12] = Now()
ActiveSheet.[K12] = Environ("USERNAME")
End If
If Not (Intersect(Target, ActiveSheet.[A13:I13]) Is Nothing) Then
ActiveSheet.[J13] = Now()
ActiveSheet.[K13] = Environ("USERNAME")
End If

enzovoort (ik zal hem niet langer maken, dan krijg ik weer ruzie met de mods :) )
Dit moet toch korter kunnen?
Ik hoop het wel, want ik heb nu een nieuw/ander stuk code (voor dezelfde sheet) dat er ook bij moet en wat nog langer zou worden:

Select Case Range("K11").Value
Case Is = "1"
ActiveSheet.[L11] = "A"
End Select
Select Case Range("K11").Value
Case Is = "2"
ActiveSheet.[L11] = "B"
End Select
Select Case Range("K11").Value
Case Is = "3"
ActiveSheet.[L11] = "C"
End Select

ook dit rijtje gaat nog even door voor K11 en L11. Punt is dat ik hetzelfde ook moet hebben voor K12 en L12, K13 en L13, enzovoort. Ik zou dan een gigantische code krijgen, wat de sheet niet echt sneller/stabieler maakt. Hoe moet ik dit noteren?
Ik heb al geproebeerd:

Select Case Range("K11:K60").Value
Case Is = "1"
ActiveSheet.[L11:L60] = "A"
End Select
Select Case Range("K11:K60").Value
Case Is = "2"
ActiveSheet.[L11:L60] = "B"
End Select

enzovoort, maar dat werkt niet, hij gweeft een foutmelding..

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

- Code tags vergeten?
-: Het heeft geen enkele zin om celverwijzingen 'activesheet[a1]' hard te coderen. Gebruik ActiveSheet.Cells(rij,kolom)
- Rij en kolom haal je op uit het target object.
- Optellen en aftrekken moet je kunnen

Voorbeelden in de help . ;)

code:
1
2
3
4
5
'Pseudocode
OnWorksheetchange(target as range)
Als (target valt binnen het hele bereik) dan
         cells(targetrij, kolomK)=naam
         cells(targetrij, kolomJ)=datum

[ Voor 27% gewijzigd door Lustucru op 02-09-2008 14:01 ]

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


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Dan zou ik dit denken:

Select Case Range("K11:K15").Value
Case Is = "1"
ActiveSheet.Cells(L, [11:15]) = "A"
End Select

Maar helaas, dat issem niet..

en na je wijziging

'Pseudocode
OnWorksheetchange(target as range)
Als (target valt binnen het hele bereik) dan
cells(targetrij, kolomK)=naam
cells(targetrij, kolomJ)=datum

snap ik er helemaal niets meer van.
Wordt het dan
cells(11:60, K)=naam ?
werkt niet.
cells([11:60]],K)=naam
ook niet.

Snap ook niet wat je met
OnWorksheetchange(target as range)
Als (target valt binnen het hele bereik) dan
bedoelt.

------------------------------------------------------------------------------
Als je me zou kunnen helpen met dit stukje alleen:

Select Case Range("K11").Value
Case Is = "1"
ActiveSheet.[L11] = "A"
End Select

(deze wil ik dus uitschrijven voor rijen 11 t/m 60), dan zou ik daar zeer blij mee zijn.

[ Voor 76% gewijzigd door tbenschop2 op 02-09-2008 14:29 ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ik snap er zo zonder code tags, indenting, etc helemaal niets van qua syntax - en snap ook niet waar je vastloopt aangezien ik het zie dat Lustucru in "[Excel] automatisch datum aanmaken bij i..." + Lustucru in "[Excel] automatisch datum aanmaken bij i..." + de basics (en/of de voorbeelden in de online help vertalen naart je eigen situatie) = klaar.

'OnWorksheetchange(target as range)
Als (target valt binnen het hele bereik) dan' is natuurlijk pseudocode dat je even moet vertalen. De test of iets binnen het bereik valt staat pas honderd keer in dit topic dus ik snap wel dat lustucru die niet meer herhaald ;)

Edit: uitschrijven naar 50 rijen is hoe dan ook nogal onzinnig. Daar zijn (FOR) loops voor uitgevonden. Veel minder RSI- en foutgevoelig.

[ Voor 9% gewijzigd door F_J_K op 02-09-2008 14:40 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Sorry dan dat ik er geen reet van begrijp.

Ik heb nog nooit eerder geprogrammeerd, laat staan in VBA. Ik begrijp dus eigenlijk niet wat er staat, heb de code die ik wél werkend heb gekregen gewoon gekopieerd van websites. NAdeel is dan als je het anders wil, je toch moet begrijpen wat er staat. De kryptische omschrijvingen die ik krijg helpen mij helaas niet.

Ik heb de code ingekort en nu volledig gemaakt, in de hoop op wat bruikbare tips:
code:
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Range("K11").Value
      Case Is = "1"
      ActiveSheet.[L11] = "B"
      End Select
End Sub

Mijn vraag is dus: hoe zorg ik ervoor dat, zonder meer regels toe te voegen, bovenstaande code ook geldt voor K12 en L12, K13 en L13, enz. ?

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ik heb nog nooit eerder geprogrammeerd, laat staan in VBA. Ik begrijp dus eigenlijk niet wat er staat, heb de code die ik wél werkend heb gekregen gewoon gekopieerd van websites.
Serieus en niet lullig bedoeld: als het is bedoeld voor bedrijfsdoeleinden wil je het niet zonder te begrijpen inzetten als je niet snapt wat er staat. Geef de opdracht terug (of doe het met de hand) of ga eerst zorgen dat je de beginsel snapt (door te lezen, oefenen, proberen buiten dit probleem om) en ga dan pas verder.

Anders is het vragen om moeilijkheden - als niet nu dan over een paar maanden.

offtopic:
En ik ben de beroerdste niet om het eenmalig en na zoveel pogingen van jouw kant (deels) uit te schrijven, maar heb tot ver na het weekend daar helemaal geen tijd voor om me in de situatie te verdiepen :o


Simpelste snelle reactie op bovenstaande vraag: maak zoals ik zei dus een FOR loopje. Zie VBA -> F1 -> FOR -> voorbeeld. En gebruik geen letters maar nummers. Dat maakt automatisering heel veel makkelijker. Dus geen range() maar cells() gebruiken.

Quick en dirty:
Visual Basic:
1
2
3
4
5
6
7
8
9
Sub foo()

    Dim rij, kolom As Integer
    rij = 11
    For kolom = 11 To 13
        Debug.Print Cells(rij, kolom).Value
    Next kolom

End Sub

Zet er indien nodig nog een FOR loop omheen.

[ Voor 0% gewijzigd door F_J_K op 02-09-2008 15:27 . Reden: geen [code=vba], maar [code=vb] ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Bedankt FJK, ik ga het morgen meteen proberen, ben nu helemaal Excel-gaar. pfff!!!
Ben het met je eens dat je eigenlijk moet snappen wat er staat. Een klein beetje doe ik dat ook, en volgens mij is dit gewoon nog allemaal heel erg simpel dus kan er niet zoveel foutgaan. Ikzelf wil steeds een stapje meer, en dan heb je kennis nodig. Die heb ik niet, dus dat betekent zoeken en om hulp vragen (in die volgorde! ;) ).
Morgen ga ik er weer voor zitten en probeer ik de code eens rustig te analyseren. Hopelijk kom ik er dan uit.

Iedereen in ieder geval bedankt voor de hulp tot zover (m.n. Lustucru, BTM909 en FJK).

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Nou ja, als F_J_K je het bos instuurt moet ik je er dan maar weer uithalen? For next is hier geen oplossing:
Visual Basic:
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
'als er een willekeurige cel verandert in A11-I39
If Not (Intersect(Target, ActiveSheet.[A11:I39] Is Nothing) Then
'verander de cel op dezelfde regel in kolom 'j' in de datum van vandaag
         ActiveSheet.Cells(target.row,10) = Now()
End If
End Sub


en van het tweede voorbeeld snap ik niks. Eerst zet je in K de username en vervolgens ga je kijken of daar een getal in staat?
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
'als er een willekeurige cel verandert in K11-K39
If Not (Intersect(Target, ActiveSheet.[K11:K39] Is Nothing) Then
'is het een nummer?
    If IsNumeric(Target.Value) Then
       ' is het een getal tussen 0 en 27?
        If Target.Value > 0 And Target.Value < 27 Then
        'dan beschouw het als een ascii code voor het karakter in de cel een kolom verderop
        Target.Offset(0, 1) = Chr(Target.Value + 64)
        End If
    End If
End If
End Sub

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


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ah, dat zeg ik: ik had de inhoud niet helemaal bekeken. Het jouwe is hoe dan ook eleganter :P

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • tbenschop2
  • Registratie: Maart 2005
  • Laatst online: 10-02-2021
Het was inderdaad een beetje slordig uitgelegd van mij.
Ik zou graag twee functionaliteiten in 1 VBA code proppen.

functionaliteit 1: bij het wijzigigen van een cel moet in dezelfde rij de datum en de username komen te staan.
Dat is waarschijnlijk de eerste/bovenste code zoals Lustucru die in zijn laatste reply opperde (die ik overigens nog moet testen)

functionaliteit 2: de username die verschijnt door bovenstaande code wil ik vervolgens automatisch omzetten in een echte naam. Wij gebruiken nogal kryptische usernames, dus ik wil bijv. "pp" (username) omzetten in "Pietje Puk" (echte naam).

Voor de duidelijkheid: functionaliteit 1 en 2 moeten in één code (ze vullen elkaar aan).

Zelf had ik voor functionaliteit 2 het volgende bedacht, maar het werkt niet: (uitgangspunt: de username verschijnt in K[rij nummer], de echte naam komt ernaast, dus in L[rij nummer].
code:
1
2
3
4
5
6
Sub test1()
Select Case Range("K11:K60")
      Case Is = "pp"
      ActiveCell.[Offset(0, 1)] = "Pietje Puk"
      End Select
End Sub

of deze:
code:
1
2
3
4
5
6
Sub test1()
Select Case Range("K11:K60")
      Case Is = "pp"
      ActiveCell.[Range("K11:K60").Offset(0, 1)] = "Pietje Puk"
      End Select
End Sub

Waarom werken ze niet? Misschien omdat ze het alleen doen als je in K11 tot en met K60 tegelijk "pp" invult (en dus niet in de individuele rijen)?

[ Voor 27% gewijzigd door tbenschop2 op 03-09-2008 16:48 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Je laatste vraag kan je natuurlijk wel heel makkelijk zelf uitproberen he :).
Ik denk dat het probleem hem in je Select Case statement zit. Kijk eens bij [Google=excel vba Select Case] en probeer het dan nog eens. Hint: regel 3 in je 2e code block klopt volgens mij niet. Dit soort dingen los je op met a) debuggen, b) opzoeken hoe statements werken, en c) debuggen ;)

Nog een hint: uit de Excel VBA help (keyword: Find Method):
code:
1
2
3
4
5
6
7
8
9
10
With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

Dit vervangt alle getallen 2 in A1:A500 door een 5. Nu jij.

[ Voor 45% gewijzigd door Reptile209 op 03-09-2008 18:25 ]

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Leuk is dat. Komt er een gebruiker bij moet je je code aanpassen 8)7.
Gebruik een aparte tabel inlognaam - vollenaam en dan een v.lookup in je sheet.

En verdiep je nu eerst eens in debuggen voordat je nog maar één regel VBA in een sheet plakt, want dit gaat nergens meer over. Wat denk je dat 'Select Case Range("K11:K60")'
oplevert? Geen idee? dat is exact je probleem. ;)

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

Pagina: 1