PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAVillkorssats för datumkontrollVillkorssats för datumkontroll
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2010-06-03 13:59
 

Jag behöver göra en datumkontroll. Om ett datum har passerat dagens datum ska ett villkor uppfyllas. I detta fall ska en kommentar infogas i en cell. Jag vet hur jag lägger in en automatisk kommenter, men inte hur jag skriver villkoret för datumkontrollen. Datumet har formatet åååå-mm-dd.

Denna kontroll ska dessutom ske i för flera rader i en kolumn. Men jag antar att man får skriva villkorssatsen för varje cell?

Tacksam för hjälp!

//Gustav\\

Nytt inlägg
 2010-06-07 09:08
 
 Ändrad av Andreas Gustafsson  på 2010-06-07 09:08:54

Hej

Du kan använda dig av en metod med en loop över de rader du vill gå igenom. Typ:

'går igenom rad 1 till 100 i kolumn A och B och jämför datum. Skriver resultatet till kolumn C
Public Sub CompareDates()
    Dim i As Long
    For i = 1 To 100
        If CheckDate(Blad1.Cells(i, 1), Blad1.Cells(i, 2)) Then
            Blad1.Cells(i, 3) = "Datum 2"
        Else
            Blad1.Cells(i, 3) = "Datum 1"
        End If
    Next
End Sub


'Returnerar sant om date2 är större än date1
Public Function CheckDate(Date1 As Date, date2 As Date) As Boolean
    If date2 > Date1 Then
        CheckDate = True
    Else
        CheckDate = False
    End If
End Function

 

/Andreas


Andreas Gustafsson

Excelforum drivs av Excelspecialisten som bedriver utveckling av program, utbildning samt support och hjälp i Excel och VBA.

www.excelspecialisten.se

Nytt inlägg
 2010-06-10 12:17
 

Hej,

Testade dina förslag, men får det inte till att funka.

Så här ser min befintliga kod ut:

Public Com1

Private Sub Worksheet_Change(ByVal Target As Range)

Com1 = Range("X23").Value
On Error Resume Next
If Target.Address = "$U$30" Then

If Target.Value = 1 Then
Target.Offset(0, -10).AddComment
Target.Offset(0, -10).Comment.Text Com1
Target.Offset(0, -10).Comment.Visible = True

Else: Target.Offset(0, -10).ClearComments

End If
End If

End Sub
Koden infogar en kommentar om värdet i U30 är = 1. Jag vill dock att kommentaren ska infogas om datumet i U30 har passerat dagens datum (åååå-mm-dd). Detta vill jag även ska funka från rad 30 till 60, i kolumn U.

Är det möjligt? Jag är ganska grön......

Tack!

//Gustav

Nytt inlägg
 2010-06-11 16:31
Accepterat svar 

Menar du så här?

Private Sub Worksheet_Change(ByVal Target As Range)
    Com1 = Range("X23").Value
    On Error Resume Next
    If Target.Column = 21 And Target.Row >= 30 And Target.Row <= 60 Then
        If IsDate(Target.Value) Then
            If DateValue(Target.Value) > Now Then
                Target.Offset(0, -10).AddComment
                Target.Offset(0, -10).Comment.Text Com1
                Target.Offset(0, -10).Comment.Visible = True
               
            Else: Target.Offset(0, -10).ClearComments
           
            End If
        Else
            Target.Offset(0, -10).ClearComments
        End If
    End If
End Sub


################# Anna Degerman Rosén #################

Anna Degerman Rosén

Excelforum drivs av Excelspecialisten som bedriver utveckling av program, utbildning samt support och hjälp i Excel och VBA.

www.excelspecialisten.se

Nytt inlägg
 2010-06-14 10:41
 

Ja, nu funkar det!

Tack så jättemycket!

Hur bär man sig åt för att lära sig VBA från grunden? Känner mig ganska grön.

//Gustav\\

Nytt inlägg
 2010-06-14 11:06
 

Hur gör man för att kontrollen ska ske när man öppnar dokumentet?

Nu sker kontrollen bara när jag skriver in ett nytt datum.

//Gustav\\

Nytt inlägg
 2010-06-14 16:09
 
 Ändrad av Anna   på 2010-06-14 16:10:50

Om koden skall köras när du öppnar arbetsboken så måste du lägga in kod i Workbook_Open i ThisWorkbook. Jag antar att du då vill gå igenom alla rader mellan 30 och 60 när du öppnar. Då kan du t.ex. lägga in den här koden:

Private Sub Workbook_Open()
    For r = 30 To 60
        Blad1.Cells(r, 21) = Blad1.Cells(r, 21)
    Next r
End Sub

Obs! Byt ut Blad1 mot det blad som du har lagt den andra koden i.

Tips på VBA-kurs: http://excel-specialisten.se/Utbildning/VBAGrund/tabid/212/language/sv-SE/Default.aspx Där lär man sig från grunden och lär sig "rätt" från början. Nackdelen med ovanstående kod och även koden som du har i ditt blad är att den är "hårdkodad" så om du t.ex. vill utöka ditt område med fler rader eller byta kolumn U mot något annat så måste du gå in i koden och ändra alla rad- och kolumnhänvisningar. Det är väldigt lätt gjort att man missar det på något ställe.

Lycka till! :)

 

 


################# Anna Degerman Rosén #################

Anna Degerman Rosén

Excelforum drivs av Excelspecialisten som bedriver utveckling av program, utbildning samt support och hjälp i Excel och VBA.

www.excelspecialisten.se

Nytt inlägg
 2010-06-15 08:45
 

Tack!

Nu funkar det precis som jag vill. Förutom då att den är lite väl "hårdkodad".

//Gustav\\

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAVillkorssats för datumkontrollVillkorssats för datumkontroll

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter