Wat lief van MS!quote:Op woensdag 17 januari 2007 10:30 schreef Deetch het volgende:
[..]
omdat MS "klantvriendelijk" wil zijn voor gebruikers zonder enige voorkennis en de functies graag intuititef wil laten aanvoelen.
Juist. Hier op het werk hebben we nog steeds af en toe macro's nodig die in Word 95 zijn geschreven, in fraai Nederlands WordBasic dus, en nu heb ik pas geleden te taak gekregen om dat om te zetten naar VBA. Leuke klus.quote:Zodra je echter al programmeerkennis hebt of in een andere taal hebt gewerkt ben je dus mooi zuur.
Met Excel95 (geloof ik) was het zelfs zo erg dat de visual basic in excel ook vertaald was.
dan kreeg je dus macro met "indien .. dan .. anders" etc, gelukkig zijn ze daar snel van afgestapt.
Zo, da's handig!quote:Op woensdag 17 januari 2007 10:55 schreef Deetch het volgende:
Gratis vertaal plugin voor excel functies. Je krijgt een werkbalk met de functie in je geinstalleerde taal, de functie in een andere taal en een taalkeuze. Je kunt dus alle functies van en naar je geinstalleerde taal naar een andere taal vertalen.
http://members.chello.nl/jvolk/keepitcool/files/TranslateIT.zip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | If Not Intersect(Range("A1:A100"), Target) Is Nothing Then On Error GoTo wrong Dim vale As String For Each cell In Target If Not Len(cell.Value) = 10 And Not Len(cell.Value) = 0 Then vale = cell.Value cell.Value = Left$(vale, 2) & "-" & Mid$(vale, 3, 2) & "-" & Right$(vale, 4) vale = DateValue(cell.Value) End If Next cell End If Exit Sub wrong: MsgBox "De ingevulde waarde: '" & vale & "' is geen geldige datum!" End Sub |
Ja, daarom zei ik ook voer 't als datum in:quote:Op woensdag 17 januari 2007 09:23 schreef Frollo het volgende:
Hij wil het juist zonder streepjes invoeren, ik denk dat daar het probleem zit.
Want stel dat ik '112007' invoer, hoe moet Excel dan weten of ik a) 1 januari 2007 bedoel, b) een datum in november 2007 waarvan ik de dag vergeten ben in te voeren, of c) een elfde dag ergens in 2007 waarvan ik de maand vergeten ben?
Dat kun je uitproberen door het veld iets breder te maken. Als je de datum invoert en het wordt naar rechts uitgelijnd dan is het een datum, blijft het links staan dan is het tekst en niet goed dus.quote:Op woensdag 17 januari 2007 01:04 schreef Arcee het volgende:
Voer je de datum wel als datum in B3 in?
Dus bijvoorbeeld vandaag invoeren als 1/17/2007 en dat Excel 't dan afbeeldt als 17-01-2007 door dd-mm-jjjj bij celeigenschappen in te vullen.
Dus niét 17-01-2007 intypen, want dan maakt Excel er een tekst-type van.
1 |
Voer je de datum wel als echte datum in? Dus niét 31121947, maar 12/31/1947, of hoe die Nederlandse versie van Excel het ook maar wil hebben.quote:Op woensdag 17 januari 2007 13:22 schreef Meeldraad het volgende:
@ Arcees oplossing:
Celeigenschappen => aangepast => dd-mm-jjj. Dit is hoe ik het nu ook laat werken, maar dit leidt niet tot de automatische tussenvoeging van streepjes.
Wat je kunt zien als ik op zo'n cel sta:quote:Op woensdag 17 januari 2007 13:25 schreef Arcee het volgende:
Datums zijn als datum ingevoerd en worden correct met streepjes afgebeeld.
Dan was dit toch gewoon goed?quote:Op dinsdag 16 januari 2007 22:02 schreef Meeldraad het volgende:
Oké, via Celeigenschappen => aangepast => 00-00-0000 krijg ik wel automatisch streepjes, maar dan herkent ie het niet als datumwaarde. En als ik dan inderdaad overal waar in een rekencel B3 staat dit neerzet: DATUMWAARDE(TEKST.SAMENVOEGEN(LINKS(B3;2);"-";DEEL(B3;3;2);"-";RECHTS(B3;4)) dan rekent ie er mee, maar omdat overal te veranderen is echt, echt een ontzettend @#$$-werk (excuse my French).
ga naar extra->macro->visual basic editorquote:Op woensdag 17 januari 2007 13:22 schreef Meeldraad het volgende:
@ Ralphies oplossing:
Hoe maak ik een worksheet_onchange macro? Dit is hoe ik het geprobeerd heb: Extra => Macro => Nieuwe macro opnemen => naamgeven, OK => stopknop. Vervolgens in Macro's bewerken heb ik alles geselecteerd en jouw scriptje eroverheen geplakt. Daarna heb ik A1:A100 vervangen door B3 (aangezien er maar een cel is waarin je de geboortedatum moet invullen). Misschien heb ik een fout gemaakt, maar het resultaat is in ieder geval geen streepjes en de rekencellen rekenen er niet mee. Een voorbeeld van een rekencel is dit:
Waar heb je die datums die je invoert dan allemaal al staan?quote:Op woensdag 17 januari 2007 14:27 schreef Meeldraad het volgende:
@ Arcee
Klopt die oplossing was ook werkzaam, maar als je weet hoeveel verwijzingen ik dan handmatig zou moeten omzetten, daar wordt je niet blij van, komt nog eens bij dat de formules nog ondoorzichtiger worden dan ze al zijn en als er ergens toch nog fouten inzitten wordt het nog lastiger ze op te sporen. De formules moeten zo gestroomlijnd mogelijk zijn. En zoals gezegd lost het niet alle problemen op.
Daar maak je dan weer een aparte ALS voor. In jouw Nederlandse versie zou dat dan zo moeten worden:quote:Het invoeren van een datum mét streepjes leidt tot foute waarden.
1 2 3 4 | Application.Goto Reference:="R65536C[0]" Selection.End(xlUp).Select End Sub |
1 2 3 4 | Application.Goto Reference:="R1C[0]" If ActiveCell.Value = "" Then Selection.End(xlDown).Select End Sub |
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 | Dim Mark As Integer Dim Marker, Markcolor As String Marker = InputBox("Welke tekenreeks (getal of string) staat in de te markeren cel?", "Merkteken") If Marker = "" Then Exit Sub Markcolor = InputBox("Welke kleur markering? (rood, groen, blauw, geel, roze)", "Markerkleur", "rood") bool = Markcolor = "rood" Or Markcolor = "groen" Or Markcolor = "blauw" Or Markcolor = "geel" Or Markcolor = "roze" If bool = False Then Exit Sub If Markcolor = "rood" Then Mark = 3 If Markcolor = "groen" Then Mark = 4 If Markcolor = "blauw" Then Mark = 5 If Markcolor = "geel" Then Mark = 6 If Markcolor = "roze" Then Mark = 7 Do Until ActiveCell.Value = "" If ActiveCell = Marker Then ActiveCell.Interior.ColorIndex = Mark If CStr(ActiveCell.Value) = Marker Then ActiveCell.Interior.ColorIndex = Mark ActiveCell.Offset(1, 0).Range("a1").Select Loop End Sub |
ja, de cel geeft het nu als tekst weer. Om met deze tekst als datum te werken, moet je de functie DATUMWAARDE gebruiken, bijvquote:Op woensdag 17 januari 2007 14:27 schreef Meeldraad het volgende:
@ralfie
Oké gelukt, en inderdaad maakt het nu niet uit of ik ze met of zonder streepje invoer, uiteindelijk staan ze er zoals ik ze wil zien. A sight for sore eyes! Alleen de rekencellen doen er nog niks mee. Moet ik misschien een andere verwijzing gebruiken dan in mijn vorige post?
1 |
Zie m'n profiel. Je hebt zo te zien je PM niet geactiveerd.quote:Op donderdag 18 januari 2007 12:01 schreef Meeldraad het volgende:
PM maar een mailadres bij belangstelling.
Het probleem is dat een illegale datum door excel niet kan worden omgezet en dan kun je er in visual basic ook niks mee.Maar na wat experimenteren net iets uitgevonden. Cell.value2 geeft de ingevoerde waarde, ook als deze geen legale datum is. De aangepaste code wordt dan:quote:Op donderdag 18 januari 2007 12:01 schreef Meeldraad het volgende:
@ ralfie
Dat is nog een relatief kleine toevoeging... even testen....
Wauw, ik geloof dat dit een oplossing is waar ik mee kan leven! Het is niet zo te regelen dat de celeigenschap al op datum staat en dat je vervolgens via een macro het hele streepverhaal bewerkstelligt? (Zoals gezegd, ik wil de formules zo kort mogelijk houden)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | If Not Intersect(Range("A1:A100"), Target) Is Nothing Then On Error GoTo wrong Dim vale As String, length As Integer For Each cell In Target length = Len(cell.Value2) If length = 7 Or length = 8 And Not length = 0 Then If length = 7 Then vale = "0" & cell.Value2 Else vale = cell.Value2 End If cell.Value = DateValue(Left$(vale, 2) & "-" & Mid$(vale, 3, 2) & "-" & Right$(vale, 4)) End If Next cell End If Exit Sub wrong: MsgBox "De ingevulde waarde: '" & vale & "' is geen geldige datum!" End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ' Deze macro kijkt of de cel onder de active cell dezelfde waarde bevat. ' Zo ja dan wordt deze verwijderd, anders wordt er verder gegaan Do While ActiveCell.Value <> "" Curr = ActiveCell.Value ActiveCell.Offset(1, 0).Range("A1").Select Do Application.CutCopyMode = False Selection.Delete Shift:=xlUp Loop While ActiveCell.Value = Curr Loop End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ' ' Deze macro verwijderd duplicaten uit een ongesorteerde kolom ' Hierbij wordt bovenaan begonnen Do While ActiveCell.Value <> "" Check = ActiveCell.Value rij = ActiveCell.Row kol = ActiveCell.Column Do While ActiveCell.Value <> "" ActiveCell.Offset(1, 0).Range("a1").Select If ActiveCell.Value = Check Then Selection.Delete Shift:=xlUp Else: End If Loop 'activecell weer terug naar check cell en 1 cel naar beneden en do -loop Range("a1").Select ActiveCell.Offset(rij, kol - 1).Range("a1").Select Loop End Sub |
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 | Dim arr() As Integer Dim vals() As Variant Dim number As Integer number = ThisWorkbook.Sheets("blad1").UsedRange.Count ReDim arr(number, 2) ReDim vals(number) Dim x For Each cell In ThisWorkbook.Sheets("blad1").UsedRange If Not cell.Value = "" Then arr(x, 1) = cell.Column arr(x, 2) = cell.Row vals(x) = cell.Value x = x + 1 End If Next cell ThisWorkbook.Sheets("blad2").Activate Dim drow As Integer, dcol As Integer For y = 0 To x - 1 dcol = arr(y, 1) - 2 If dcol < 1 Then dcol = 1 drow = arr(y, 2) * 3 If arr(y, 1) = 1 Then drow = drow - 2 ElseIf arr(y, 1) = 2 Then drow = drow - 1 End If Cells(drow, dcol).Value = vals(y) Next y End Sub |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |