Tipp 0378 Datum suchen
Autor/Einsender:
Datum:
  Angie
23.04.2005 (Update)
Entwicklungsumgebung:   Excel 2000
Die Anzeige des Datums im Tabellenblatt richtet sich nach dem Zahlenformat der Zelle. Bei der Eingabe eines Datums, das von Excel als solches erkannt wird, wechselt das Zellformat vom Zahlenformat "Standard" zu einem vordefinierten Datumsformat. Standardmäßig wird das Datum in einer Zelle rechtsbündig ausgerichtet. Kann Excel das Datumsformat nicht erkennen, wird das Datum als Text eingegeben, der in der Zelle linksbündig angeordnet ist.
In einem Tabellenblattbereich, dessen Zellen mit dem Zellenformat 'Datum' formatiert sind, kann ein Datum mit der der Find-Methode gesucht werden. Die Eingabe des zu suchenden Datums erfolgt hier über einen benutzerdefinierten Dialog (UserForm) mit drei ComboBoxen für die Auswahl von Tag, Monat und Jahr (siehe dazu auch Tipp Datumseingabe prüfen).
Code im Codebereich der UserForm
 
Option Explicit

Private m_blnInit    As Boolean

Private m_strTitle   As String
Private m_dtmDate    As Date

Private m_blnCancel  As Boolean

Public Sub Init()
  Dim i As Integer

  With Me
    .Caption = m_strTitle
    .cmdCancel.Cancel = True
    .cmdOK.Default = True
  End With

  With Me.cboDay
    .Style = fmStyleDropDownList
    .Clear
    For i = 1 To 31
      .AddItem CStr(i)
    Next
    .Text = CStr(VBA.Day(Date))
  End With

  With Me.cboMonth
    .Style = fmStyleDropDownList
    .Clear
    For i = 1 To 12
      .AddItem Format$("1900- " & CStr(i) & "-01", "mmmm")
    Next
    .ListIndex = VBA.Month(Date) - 1
  End With

  With Me.cboYear
    .Style = fmStyleDropDownList
    For i = 1900 To 9999
      .AddItem CStr(i)
    Next
    .Text = CStr(VBA.Year(Date))
  End With

  m_blnInit = True
End Sub

Public Property Let gTitle(ByVal strTitle As String)
  m_strTitle = strTitle
End Property

Public Property Get gDate() As Date
  gDate = m_dtmDate
End Property

Public Property Get gCancel() As Boolean
  gCancel = m_blnCancel
End Property

Private Sub UserForm_Activate()
  If Not m_blnInit Then Unload Me
End Sub

Private Sub cboDay_Change()
  Call CheckDate
End Sub

Private Sub cboMonth_Change()
  Call CheckDate
End Sub

Private Sub cboYear_Change()
  Call CheckDate
End Sub

Private Sub cmdOK_Click()
  Me.Hide
End Sub

Private Sub cmdCancel_Click()
  m_blnCancel = True
  Me.Hide
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, _
            CloseMode As Integer)
  If CloseMode = vbFormControlMenu Then
    Cancel = True
    m_blnCancel = True
    Me.Hide
  End If
End Sub

Private Sub CheckDate()
  Dim strDate   As String
  Dim dtmDate   As Date
  Dim blnIsDate As Boolean

  Dim strMsg    As String

  strDate = Me.cboYear.Text & "-" & _
            CStr(Me.cboMonth.ListIndex + 1) & "-" & _
            Me.cboDay.Text

  If IsDate(strDate) Then
    m_dtmDate = CDate(strDate)
    blnIsDate = True
  End If

  If blnIsDate Then
    Me.lblMsg.Caption = Format$(m_dtmDate, "Long Date")
  Else
    Me.lblMsg.Caption = "Ungültiges Datum!"
  End If

  Me.cmdOK.Enabled = blnIsDate
End Sub
 
Code im Codebereich des Moduls
 
Option Explicit

Public Sub FindDateInWorksheet_1()
  Const cMsgTitle As String = _
        "Datum suchen mit der Find-Methode (1. Zelle)"

  Dim objInputForm  As Object
  Dim blnCancel     As Boolean

  Dim dtmDate       As Date
  Dim strMsg        As String

  Set objInputForm = New frmDateInputCBO

  With objInputForm
    .gTitle = cMsgTitle
    .Init
    .Show
    DoEvents
    blnCancel = .gCancel
    If Not blnCancel Then
      dtmDate = .gDate
    End If
  End With

  Unload objInputForm
  Set objInputForm = Nothing

  If Not blnCancel Then
    Dim rngToSearch As Range
    Dim rngCell     As Range

    Set rngToSearch = ActiveWorkbook.Worksheets(1).UsedRange
    With rngToSearch
      Set rngCell = .Find(What:=dtmDate, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByColumns, _
            SearchDirection:=xlNext, MatchCase:=False)

      If Not rngCell Is Nothing Then
        rngToSearch.Parent.Activate
        rngCell.Activate
      Else
        strMsg = "Das Datum '" & _
              Format$(dtmDate, "dd. mmmm yyyy") & _
              "' wurde im Tabellenblatt '" & _
              rngToSearch.Parent.Name & "' nicht gefunden!"
      End If
    End With

    If Len(strMsg) > 0 Then
      MsgBox strMsg, vbOKOnly + vbInformation, cMsgTitle
    End If
  End If
End Sub
 
Links zum Thema
Datumseingabe prüfen
Datumszuweisung in Tabellenzelle

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (30,2 kB) Downloads bisher: [ 1126 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 9. Juli 2011