Avatar billede pejsen Nybegynder
07. september 2011 - 22:40 Der er 8 kommentarer og
1 løsning

Find dags dato (Format "dd-mmm")

Hej

Jeg kan ikke få nedenstående kode til at finde "dags Dato" i kolonne C.
Det virker godt nok, når jeg søger manuelt via "Find og vælg"

Der er i C4 angivet datoen "02-01-2011"
I C5 er formlen = C4+1 (Formater celler = brugerdefineret "dd-mmm")
I C6 er formlen = C5+1 (Formater celler = brugerdefineret "dd-mmm")
I C7 er formlen = C6+1 (Formater celler = brugerdefineret "dd-mmm")
osv... ned til C368 = C367+1 (Formater celler = brugerdefineret "dd-mmm")

Hvad gør jeg forkert???


Dim sh1 As Worksheet
Set sh1 = Ark1
sh1.Select
ActiveWindow.Zoom = 70
Application.Cells(4, 3).Select


On Error GoTo ErrHandler

Dim strdate As String
Dim FoundCell As Range
Dim lReply As Long


strdate = Format(Date, "dd-mmm")

    With sh1.Range("C:C")
        Set FoundCell = .Find(What:=strdate, _
        After:=.Cells(.Cells.Count), _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False, _
        SearchFormat:=False)
       
If Not FoundCell Is Nothing Then
        Application.Goto FoundCell, True
        FoundCell.EntireRow.Select
        ActiveWindow.ScrollRow = ActiveCell.Row
       
        Else
        lReply = MsgBox("Date cannot be found. Try Again", vbYesNo)
                If lReply = vbYes Then Run "Workbook_Open":
       
           
    End If
    End With


Exit Sub
Avatar billede Slettet bruger
08. september 2011 - 15:17 #1
Er det absolut en nødvendighed for dig at bruge VBA til det?

Hvad er der i vejen med

=HVIS(CELLE("format";C4)="D2"; "Format = dd-mmm";"")

Hans
Avatar billede Tryphon Nybegynder
08. september 2011 - 16:22 #2
Ændr følgende linjer:

Dim strDate as string TIL Dim strDate as Date
strdate = Format(Date, "dd-mmm") TIL strDate = Date

i din FIND skal du ændre
LookIn:=xlValues TIL LookIn:=xlFormulas.

Så tror jeg, at den er der.
Avatar billede pejsen Nybegynder
08. september 2011 - 19:14 #3
@Tryphon

Nedenstående er rettet til, efter dine henvisninger. Men det fungere stadig ikke. FoundCell bliver = Nothing

Husk, at i den celle(C252) hvor dags dato fremkommer. Står der følgende i formelinjen: =+C251+1 -> Cellen er formateret til datoformat "dd-mmm"
Imorgen vil datoen(09-sep) stå i celle(C253)- formelinjen: =+C252+1

Dim FoundCell As Range
Dim lReply As Long
Dim FindDate As Date
FindDate = Date

    With sh1.Range("C:C")
        Set FoundCell = .Find(What:=FindDate, _
        After:=.Cells(.Cells.Count), _
        LookIn:=xlFormulas, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False, _
        SearchFormat:=False)
Avatar billede pejsen Nybegynder
08. september 2011 - 19:16 #4
@Hans

Det skal være VBA. Makroen er placeret under "Private Sub Workbook_Open()"
Avatar billede Tryphon Nybegynder
08. september 2011 - 20:11 #5
Jeg havde overset, at du beregner datoen med en formel. Er der nogen speciel grund til, at du gør det?

Jeg kan ikke få den til at søge, hvis der datoen bliver beregnet. Løsningen virker, hvis datoen er skrevet i cellen.

Der er andre, der har haft problemet uden at få det løst.

http://www.mrexcel.com/forum/showthread.php?p=694629.

Her blev løsningen at loope gennem datoerne og afbryde loopet, når dato blev fundet.

Jeg vil foreslå, at du erstatter dine formler med værdier. Hvis du skal bruge flere datoer, så træk ned med musen og lad Excel automatisk lægge en til for hver ny dag.

Måske kan du også finde lidt inspiration her
http://www.cpearson.com/excel/DateTimeVBA.htm#Finding, selvom den ikke er meget oplysende.
Avatar billede pejsen Nybegynder
08. september 2011 - 23:49 #6
Så kører den!! :-)

Tak for indput

Dim FoundCell As Range
Dim strdate As String
Dim lReply As Long
strdate = Format(Date, "dd-mmm")
   
    With sh1.Range("C:C")
        Set FoundCell = .Find(What:=Format(strdate, Range("C5").NumberFormat), _
        After:=[C4], _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False, _
        SearchFormat:=False)

        If Not FoundCell Is Nothing Then
            Application.Goto FoundCell, True
            FoundCell.EntireRow.Select
            ActiveWindow.ScrollRow = ActiveCell.Row
       
        Else
            lReply = MsgBox("Date cannot be found. Try Again", vbYesNo)
            If lReply = vbYes Then Call Workbook_Op
Avatar billede pejsen Nybegynder
08. september 2011 - 23:50 #7
@Tryphon

Smid et svar! :-)
Avatar billede Tryphon Nybegynder
09. september 2011 - 09:46 #8
OK. Ændrede du datoen til værdi eller virker din kode med en formelberegning af datoen?
Avatar billede pejsen Nybegynder
10. september 2011 - 00:03 #9
Koden virker med formelberegning af datoen:

C4 = 02-01-2011
C5= C4+1
C6= C5+1
C7= C6+1
.....
C367 = C366+1

C4:C367 er i format "dd-mmm"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester