2017-03-05 5 views
-2

Guten Tag, ich bin ein Neuling in der VBA-Programmierung. brauchen Hilfe von Experten :)VBA - Finden Sie die nächste leere Zeile

Nachdem ich das Datum eingeben, und klicken Sie auf die Schaltfläche generieren wird der Code das Datum auf dem Excel finden, aber im mit diesem Problem fertig und hier sind meine Codes ..

 Dim Rng As Range 
     Dim FindDate As Date 

     FindDate = txtDate.Value 

     If Trim(FindDate) <> "" Then 
      With Sheets("Sheet2").Range("B:B") 
       Set Rng = .Find(What:=FindDate, After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=xlWhole, _ 
           SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True) 

        If Not Rng Is Nothing Then 
         Application.Goto Rng, True 
        Else 
         MsgBox "Nothing found" 
        End If 
      End With 
     End If 

Mein nächstes Problem ist, ich brauche die leere Zelle neben dem Datum wählen .. Hier ist ein Bildschirm

Schuss ist

+0

Wenn das Datum gefunden wird, wird 'Rng' auf die Zelle gesetzt, in der die Übereinstimmung liegt. Sie können 'rng.Row' und 'rng.Column' referenzieren, wenn Sie die Werte sehen wollen, oder einfach etwas wie Cells (rsg.row, rng.column) .value = "Schauen Sie nach links" verwenden. Oder Sie können einen 'Offset' zu 'Rng' verwenden. –

Antwort

0

um Ihre Frage zu beantworten, wäre der einfachste Weg sein:

Allerdings sollten Sie sich bewusst sein, dass die Find() Funktion bei der Verwendung von Daten ein wenig unzuverlässig sein kann. Siehe diesen Beitrag für weitere Informationen und Links: VBA, goto cell with a certain value (type: date). Ihr Fall ist besonders gefährdet, da das Datum über eine TextBox eingegeben wird.

Ich muss sagen, Ihr Code sieht schrecklich ähnlich zu den OP's dieses Beitrags. Sie sollten Quellcode wirklich gutschreiben, wenn Sie es nicht selbst geschrieben haben.

Wenn ich Sie wäre, würde ich Ihren Textbox-Wert in eine konvertieren und dann die Zelle Werte (unter Verwendung der .Value2 -Eigenschaft, die Datumswerte als Longs bietet) für die passende Long. Code ist nicht viel länger und könnte wie folgt aussehen:

Dim src As Range 
Dim findDate As Date 
Dim findVal As Long 
Dim cell As Range 

'Define the source data range 
With Sheet2 
    Set src = .Range(.Cells(1, "B"), .Cells(.Rows.Count, "B").End(xlUp)) 
End With 

'Acquire search date and convert to long 
findDate = CDate(UserForm1.txtDate.Value) 
findVal = CLng(findDate) 

'Search for date 
For Each cell In src.Cells 
    If cell.Value2 = findVal Then 
     Application.Goto cell, True 
     'Select the next cell to the right 
     cell.Offset(, 1).Select 
    End If 
Next 
0

Sie konnte

  • eine Function den gewünschten Bereich zurückkehrt, um zu versuchen

    Function SetRange(FindDate As Date) As Range 
        If Trim(FindDate) <> "" And IsDate(FindDate) Then 
         With Sheets("Sheet2") '<--| reference wanted sheet 
          With .Range("B1", .cells(.Rows.Count, 2).End(xlUp)) '<--| reference its column "B" range from row 1 down to last not empty row 
           On Error Resume Next '<--| if subsequent 'Find()' avoid possible subsequent statement error to stop the Function 
           Set SetRange = .Find(What:=FindDate, After:=.cells(.cells.Count), LookIn:=xlValues, LookAt:=xlWhole, _ 
              SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True).Offset(, 1) '<--| try finding the passed 'FindDate' in referenced range and offset 1 column to the right 
          End With 
         End With 
        End If 
    End Function 
    
  • verwenden und haben Ihre „Haupt "sub überprüfen Sie es gegen Nothing bevor Sie es verwenden:

    Option Explicit 
    
    Sub Main() 
        Dim Rng As Range 
    
        Set Rng = SetRange(txtDate.Text) 
        If Not Rng Is Nothing Then Rng.Select 
    End Sub 
    
+0

@BartD, wenn meine Antwort Ihre Frage löst, dann akzeptieren Sie sie bitte, indem Sie auf das Häkchen neben der Antwort klicken, um es von ausgegraut auf ausgefüllt umzuschalten. Danke – user3598756

+0

@BartD, eine Chance, Feedback von Ihnen zu bekommen? – user3598756

Verwandte Themen