[VBA] Vergelijken van 2 cellen lukt niet.

Pagina: 1
Acties:
  • 181 views sinds 30-01-2008
  • Reageer

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 20-08 23:09
Hallo, ik heb in excel 97 een macro geschreven om commentaar uit een logboek te halen en in een bestand met een grafiek te schrijven. Dat werkte altijd helemaal en nu werkt het comment gedeelte helaas niet meer. Dit komt doordat ik genoodzaakt was de instellingen van mn comp naar nederlands te veranderen, dit vanwege wat datum problemen.

Mn date format is nu dd-mm-yyyy

Nu werd het logboek altijd doorzocht op passend commentaar, hiervoor golden 2 voorwaarden, namelijk dat de datum moet overeenkomen en de naam van de grafiek.

Hiervoor gebruikte ik oa dit stukje code:

Visual Basic:
1
2
3
4
5
6
7
8
9
For n = 1 To intAantalRijen
     
    If logboek.Worksheets("logboek").Cells(n, 1) = naarbestand.Worksheets(NieuweNaam).Cells(2, 2) And logboek.Worksheets("logboek").Cells((n + 2), 3).Value = naarbestand.Worksheets(NieuweNaam).Cells(6, 2).Value Then
    MsgBox "gelukt"

    kopieer info logboek to bestand met grafiek etc etc
end if

next n


Nu heb ik de inhoud van de 2 cellen vergeleken (de eerste voorwaarde) en het geprobeerd zonder de tweede voorwaarde, de inhoud is identiek maar toch pakt hij het niet. Eerst had hij er nooit problemen mee.

Ik heb ook al in het logboek de format van de datum veranderd in custom (dd-mm-yyyy) net zoals hij in het grafiek bestand staat. Maar dit helpt ook niet. Eerst stond de datum er gewoon als tekst in en toen werkte het normaal.

Als laatste heb ik ook al geprobeerd de format van de datum in het grafiek bestand te wijzigen naar tekst, als ik dat doe voordat de datum er in geplaatst wordt maakt hij er alsnog dd/mm/yyyy van :? en anders maakt hij van de oude datum een getal.

Dat doe ik met:
Visual Basic:
1
naarbestand.Worksheets(1).Cells(2, 2).NumberFormat = "@"


En toen was mn inspiratie op :), ik hoop dat jullie me nog wat verder kunnen helpen, alvast bedankt!

  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 21-08 16:52

Tukk

De α-man met het ẞ-brein

Voor wat inspiratie:
Had excel niet twee values voor een cell, 1 met opmaak en 1 zonder.
Volgens mij zoek je de .Value2

Dan kun je datumformaat onafhankelijk werken..

[ Voor 18% gewijzigd door Tukk op 10-11-2005 11:06 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Het lijkt erop dat je appels en peren aan het vergelijken bent. ;)

Doe eens een debug.print voor de waarden die je wilt vergelijken en zoek de verschillen. Vervolgens kun je het waarschijnlijk oplossen door eerst alles om te zetten naar hetzelfde gegevenstype dmv cdate() of door je tekstwaarden tussen ## te zetten, zodat het letterlijke datumwaarden worden.

offtopic:
de enige juiste oplossing is natuurlijk om de amerikanen er van te overuigen dat miles, gallons en maand-dag notatie echt volkomen achterhaalde folklore is

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


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 20-08 23:09
geprobeerd, maar het werkt helaas niet. Toch duikt hij de for loop wel in, als ik van elke rij de value weergeef met behulp van msgbox werkt het ook gewoon, en de waarden zijn exact hetzelfde, zelfs als de opmaak hetzelfde is gaat hij niet de if loop in :?

edit: dit is btw reactie op de eerste reactie, ander ga ik niet uitzoeken ;)

kan je misschien een voorbeeld geven van hoe ik cdate zou moeten gebruiken, want als ik gewoon
if cdate(waarde1) = cdate(waarde2) probeer geeft hij een mismatch.

Dit komt ook doordat waarde1 niet altijd een datum is, het logboek heeft namelijk de volgende opbouw:

datum
shotnr
1
2
3

datum
shotnr
1
2
3

etc

lijkt me lastig voor cdate om het allemaal om te gaan zetten naar data :). Als ik het alleen bij waarde2 doe krijg ik dezelfde error.

Van de ## tekens ben ik niet zeker hoe ik deze moet gebruiken. Zelfde geld voor debug.print, lijkt verder bij mij niets te doen. (werk niet enorm veel met vba of uberhaupt een programmeer taal, dus vergeef me als ik soms wat onwetend overkom (dat is dan trouwens ook zo ;) ) )

edit: overigens werkt het overige statement wel, als ik alleen voorwaarde 2 gebruik (normale strings als values) werkt het wel. Alleen het probleem is dat de combinatie van voorwaarde 1 en 2 uniek is, anders niet.

[ Voor 77% gewijzigd door DarkShadow op 10-11-2005 12:06 ]


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 20-08 23:09
Klein schopje, nog iemand met een idee, het is me niet gelukt er uit te komen...

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 20-08 23:09
Laat maar zitten, ik heb het inmiddels, niet door cdate, maar cstr :). Ik verander de opgemaakte datum gewoon lekker terug naar string en zorg ervoor dat alles in het logboek ook als general staat.

dus nu is het if waarde1 = cstr(waarde2) then
kopieer
end if
Pagina: 1