Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel] huidige tijd eenmalig in een cel zetten

Pagina: 1
Acties:

  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
De situatie:
In excel moet ik constant een verticale lijst bij houden van artikelnummers welke ik aanmaak of wijzig. Nou wil ik graag weten hoe laat ik dat in die cellen heb gezet. Op 1 rij kunnen niet EN aanmaken EN wijzigen staan, maar er staat dus een ticketnummer op elke rij, en of hij staat dus in de kolom aangemaakt of gewijzigd.

Daarvoor wil ik graag in elke cel rechts van de kolom "aangemaakt" en "gewijzigd" een kolom "tijd" maken waar de tijd in komt te staan dat er een waarde is gezet in 1 van deze 2 cellen op die rij.

Met de functie NU() kun je de huidige tijd erin zetten, met een ALS functie kan dat op het moment dat de cellen ernaast gewijzigd worden. Maar deze tijd wordt geupdate elke keer als er ergens iets gewijzigd wordt in de excel sheet.

Hoe los ik dit op? Kan ik ergens uit zetten dat de cel automatisch update als er een cel wordt aangepast die niet de 2 cellen is die hij in de gaten houdt?

Alvast bedankt!

There are only 10 types of people in the world: those who understand binary and those who don't.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Hoe heb je precies gezocht op wat je nodig had?

Toen ik ging [google=excel one time current time] vond ik meteen de volgende tip
Adding the Current Time using a Keyboard Shortcut

1. Click on the cell where you want the time to go.

2. Press and hold down the Ctrl and the Shift keys on the keyboard.

3. Press and release the colon key ( : ) on the keyboard without releasing the Ctrl and Shift keys.
;)

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.


  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
Ik heb gezocht en weinig gevonden. Wat jij zegt staat ook in de help van excel zelf, maar is dus enkel een manier om het handmatig op te lossen.

Ik vraag me af of dit met een macro opgelost moet worden (waar ik dan weer helemaal niks van weet) of dat het gewoon kan zoals ik wil, dat een cel enkel geupdate wordt als een bepaalde andere cel wordt gewijzigd, en niet bij de hele form-refresh.

There are only 10 types of people in the world: those who understand binary and those who don't.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Via een event kun je dit oplossen, met formules normaal gesproken niet volgens mij (afgezien van vage trucs, bijvoorbeeld met manual calculation en circelverwijzingen). Met VBA is het iets als:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim area As Range
    For Each area In Target.Areas
        If (area.column < 3) And ((area.column + area.Columns.Count) <= 3) Then
            Dim r As Long
            For r = area.Row To area.Row + area.Rows.Count - 1
                Me.Cells(r, 3) = Now()
            Next r
        End If
    Next area
End Sub

De check om niet veranderen is nu per area, misschien dat je dat anders wil, aan de andere kant komt dat vast toch niet voor. Verder werkt undo niet nadat er met VBA iets verandert is, wat wel vrij onhandig is..

[ Voor 8% gewijzigd door pedorus op 17-07-2009 18:38 . Reden: code mooier gemaakt ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
code:
1
Private Sub Worksheet_Change(ByVal Target As Range)

Functie naam


code:
1
For i = 1 To Target.Areas.Count

Voor elke waarde van 1 tot Target.Areas.Count
Deze snap ik niet helemaal. Waar komt i vandaan?
Target.Areas.Count = het geselecteerde aantal cellen? dat is altijd 1, de cel die je vult toch.


code:
1
Dim area As Range

area = Range
Range houdt in Hoeveel cellen geselecteerd zijn?


code:
1
        Set area = Target.Areas(i)

Het gebied waarop je de macro wil toepassen.


code:
1
2
3
4
        If (area.column < 3) And ((area.column + area.Columns.Count) <= 3) Then 
            For r = area.Row To area.Row + area.Rows.Count - 1 
                Me.Cells(r, 3) = Now() 
            Next r



En verder snap ik niet helemaal wat er gebeurd. Ook snap ik niet helemaal dus wat de variabelen zijn die je in eerste instantie mee geeft aan de functie.

zou je wellicht dit toe kunnen lichten?

edit: het is dus niet dat ik niks van programmeren weet, maar VB ken ik niet, en i.c.m. excel al helemaal niet.

[ Voor 5% gewijzigd door JaWSnl op 17-07-2009 19:19 ]

There are only 10 types of people in the world: those who understand binary and those who don't.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
JaWSnl schreef op vrijdag 17 juli 2009 @ 19:16:
code:
1
Private Sub Worksheet_Change(ByVal Target As Range)

Functie naam
Inderdaad. Deze functie moet in de juiste Sheet staan, dan wordt hij automatisch aangeroepen.
JaWSnl in "[Excel] huidige tijd eenmalig in een cel..."
code:
1
For i = 1 To Target.Areas.Count

Voor elke waarde van 1 tot Target.Areas.Count
Deze snap ik niet helemaal. Waar komt i vandaan?
Target.Areas.Count = het geselecteerde aantal cellen? dat is altijd 1, de cel die je vult toch.
He, das nog de oude versie.. :) Maar je krijgt meerdere areas in Excel als je Ctrl inhoudt en meerdere vlakken/cellen selecteert, en die kun je tegelijkertijd wijzigen als je ctrl-enter gebruikt.
code:
1
Dim area As Range

area = Range
Range houdt in Hoeveel cellen geselecteerd zijn?
Niet helemaal. Een range is een gebiedje. Een area is een gebiedje dat altijd een rechthoek is, waarvoor Excel ook weer een Range-object gebruikt. Het is dus mogelijk om met ctrl meerdere rechthoekige gebieden te selecteren.
code:
1
2
3
4
        If (area.column < 3) And ((area.column + area.Columns.Count) <= 3) Then 
            For r = area.Row To area.Row + area.Rows.Count - 1 
                Me.Cells(r, 3) = Now() 
            Next r
Hier wordt gekeken of de beginkolom onder de 3 ligt (dus A of B is), en, zo ja, of kolom C niet ook in het gebiedje ligt ("((area.column + area.Columns.Count) <= 3)"). Zo ja, dan worden alle rijen van het gebiedje afgegaan (for r=...;...; next r). Deze zijn gewijzigd in kolom A en/of B, dus in kolom C wordt de huidige tijd gezet (me.cells(...)=...).

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
Ik ga nog iets anders proberen. Ik neem een macro op van hoe ik de tijd erbij plaats ernaast. Ik plaats elk artikelnummer erin door te plakken met ctrl-v, in dit geval zorg ik dus dat de macro gebeurd als ik ctrl-v indruk. Dan zal dus onderstaande macro worden uitgevoerd zodra er geplakt wordt, ik hoop direct na het plakken.

De macro (in c :S)

code:
1
2
3
4
5
6
7
8
if (row_1_of_this_column == "aangemaakt") {
   ga_2_naar_rechts;
   add_current_time;
}
else if (row_1_of_this_column == "gewijzigd") {
   ga_1_naar_rechts;
   add_current_time;
}


De reden dat ik moet checken wat er op rij 1 staat is dat er meerdere kolommen naast elkaar zitten (voor elke dag van de week 1). Ik kan wel er vanuit gaan dat ik weet op welke rijen alles staat maar das minder dynamisch.

Hoe is dit nou simpel vast te leggen in VB?

- Wat is het commando voor "x cellen naar rechts"?
- Met welke code check ik wat er op rij x van die kolom staat?
- Tijd invoegen is gewoon Now().

Graag commentaar :)

[ Voor 3% gewijzigd door JaWSnl op 17-07-2009 22:01 ]

There are only 10 types of people in the world: those who understand binary and those who don't.


  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
Goed inmiddels heb ik het gevonden:

code:
1
2
3
4
5
6
7
8
9
10
11
If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Aangemaakt" Then
    ActiveCell.Offset(0, 2) = Now()
    ActiveCell.Offset(0, 2).NumberFormat = "hh:mm"
Else
    If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Gewijzigd" Then
        ActiveCell.Offset(0, 1) = Now()
        ActiveCell.Offset(0, 1).NumberFormat = "hh:mm"
    End If
End If
    
ActiveCell.Offset(1, 0).Select


Nou heb ik nog een probleem. Ik gebruik nu de ctrl-v hiervoor, omdat ik wil dat hij na het plakken dit uitvoert... Alleen wordt er nu niet meer geplakt. Waar komt dat nou door? Voert hij de originele ctrl-v niet meer uit, alleen de zelf gemaakte?

Edit:
En nu ook opgelost. Gewoon ActiveSheet.Paste toegevoegd aan het begin. Het gehele resultaat nog een keer:
code:
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 Tijd()
'
' Tijd Macro
'
' Keyboard Shortcut: Ctrl+v
'
    On Error Resume Next
    
    ActiveSheet.Paste
    
    ActiveCell.Font.ColorIndex = 0
    
    If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Aangemaakt" Then
        ActiveCell.Offset(0, 2) = Now()
        ActiveCell.Offset(0, 2).NumberFormat = "hh:mm"
    Else
        If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Gewijzigd" Then
            ActiveCell.Offset(0, 1) = Now()
            ActiveCell.Offset(0, 1).NumberFormat = "hh:mm"
        End If
    End If
    
    ActiveCell.Offset(1, 0).Select
    
End Sub

[ Voor 53% gewijzigd door JaWSnl op 17-07-2009 23:54 ]

There are only 10 types of people in the world: those who understand binary and those who don't.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Kijk, dat ziet er al veel beter uit dan die post daarvoor ;)
JaWSnl schreef op vrijdag 17 juli 2009 @ 23:22:
code:
13
    If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Aangemaakt" Then
Ook wel:
Visual Basic:
13
    If ActiveSheet.Cells(ActiveCell.Column) = "Aangemaakt" Then
code:
16
17
    Else
        If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Gewijzigd" Then
Of gewoon:
Visual Basic:
16
    ElseIf ActiveSheet.Cells(ActiveCell.Column) = "Gewijzigd" Then

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
pedorus schreef op zaterdag 18 juli 2009 @ 00:34:
Kijk, dat ziet er al veel beter uit dan die post daarvoor ;)

[...]

Ook wel:
Visual Basic:
13
    If ActiveSheet.Cells(ActiveCell.Column) = "Aangemaakt" Then


[...]

Of gewoon:
Visual Basic:
16
    ElseIf ActiveSheet.Cells(ActiveCell.Column) = "Gewijzigd" Then
Ik probeer de code die jij zegt, maar die werkt niet. Is het niet zo dat je hier checkt of alle cellen in de hele kolom "gewijzigd" bevatten?
In dit geval overigens staat gewijzigd of aangemaakt altijd op de 2e rij.


Even voor de duidelijkheid nog de huidige code:
code:
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
Sub Tijd()
'
' Tijd Macro
'
' Keyboard Shortcut: Ctrl+v
'
    On Error Resume Next
    
    ActiveSheet.Paste
    
    ActiveCell.Font.ColorIndex = 0
    ActiveCell.Interior.ColorIndex = xlWhite
    ActiveCell.BorderAround.LineStyle = xlContinuous
    ActiveCell.BorderAround.ColorIndex = xlBlack
    ActiveCell.BorderAround.Weight = xlMedium
    ActiveCell.BorderAround.Color = xlBlack

    If ActiveCell = "" Then
    Else
        If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Aangemaakt" Then
            ActiveCell.Offset(0, 2) = Now()
            ActiveCell.Offset(0, 2).NumberFormat = "hh:mm"
            ActiveCell.Offset(1, 0).Select
        Else
            If ActiveCell.Offset((ActiveCell.Row - 2) * -1, 0) = "Gewijzigd" Then
                ActiveCell.Offset(0, 1) = Now()
                ActiveCell.Offset(0, 1).NumberFormat = "hh:mm"
                ActiveCell.Offset(1, 0).Select
            End If
        End If
    End If
End Sub


Alleen werkt het nu niet om een border om die cel heen te maken. Elke cel waar iets geplakt wordt heeft een aantal standaard eigenschappen, maar zodra er iets in geplakt wordt, moet dat ook zo blijven.
Tekst kan wit geplakt worden, dan wordt het zwart gemaakt dat werkt.
Tekst kan met een zwarte cell-vulling geplakt worden, dan wordt dat wit gemaakt.
Maar tekst wordt meestal zonder omlijning geplakt, en die moet dan wel weer getoond worden.

Hoe toon ik een lijn eromheen zonder voor elk stukje lijn apart een lap tekst te moeten schrijven?

There are only 10 types of people in the world: those who understand binary and those who don't.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
JaWSnl schreef op zaterdag 18 juli 2009 @ 01:10:
Ik probeer de code die jij zegt, maar die werkt niet. Is het niet zo dat je hier checkt of alle cellen in de hele kolom "gewijzigd" bevatten?
Ehh, nee. Je zoekt blijkbaar op rij 2 (ActiveSheet.Cells(ActiveCell.Column, 2)) ipv op rij 1 wat ik eerst dacht. Had de formule niet uitgerekend... :) (overigens: (x-2)*-1==2-x)

Voor die border: Als de eigenschappen van de cel toch al goed staan, waarom doe je dan geen paste special? (bijv. ActiveCell.PasteSpecial xlPasteAllExceptBorders of zie help voor meer opties.)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
Thnx dat heeft allemaal gewerkt :)

Weer een nieuw probleem: Bij het plakken van een stuk tekst dat uit excel gekopieerd is werkt dit nu... maar als ik tekst van buiten excel wil plakken doet hij het niet, dit komt nu door de paste special want met de gewone paste doet hij het wel. Op google vind ik geen antwoord :(

Nog theorieen?

There are only 10 types of people in the world: those who understand binary and those who don't.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
JaWSnl schreef op zaterdag 18 juli 2009 @ 12:18:
Thnx dat heeft allemaal gewerkt :)

Weer een nieuw probleem: Bij het plakken van een stuk tekst dat uit excel gekopieerd is werkt dit nu... maar als ik tekst van buiten excel wil plakken doet hij het niet, dit komt nu door de paste special want met de gewone paste doet hij het wel. Op google vind ik geen antwoord :(

Nog theorieen?
Dat komt omdat je on error resume next gebruikt. Er zijn eigenlijk 2 soorten plakken in excel, een interne en een externe, en je roept de verkeerde aan, dus dat zal vast zonder die resume een foutmelding geven, die je nu dus niet ziet. Aan de andere kant, kun je nu de externe versie (iets als ActiveSheet.PasteSpecial "Text") er achteraan gooien, dan werkt er vast een wel... Verder zou ik zeggen, gebruik de help en/of pak er een goed boek bij; staat dit vast ook in ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • JaWSnl
  • Registratie: Maart 2007
  • Laatst online: 13-06 15:18
Nu werkt het precies zoals gewenst :) thnx voor de input.

There are only 10 types of people in the world: those who understand binary and those who don't.

Pagina: 1