Clever-Excel-Forum

Normale Version: Datum Typen unverträglich
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo verehrtes Forum,

ich habe mit dem unten aufgeführten Code meine Probleme.
Ab der Zeile Y=... wird der Laufzeitfehler '13' Typen unverträglich ausgegeben.

Weiß jemand von Euch Rat oder eine andere Lösung?

Vielen dank im Voraus.

Sub Test()
Dim Eingabe As String
Dim i As Long
On Error Resume Next
Eingabe = InputBox("Bitte geben Sie ein Datum ein")
If IsDate(Eingabe) Then
MsgBox "Es handelt sich um ein gültiges Datum: " & Eingabe
Else
MsgBox "Das ist kein gültiges Datum: " & Eingabe, vbCritical
End If
On Error GoTo 0
  
Datum = CDate(Eingabe)

    Set WS = Worksheets("UE")
    Set WS1 = Worksheets("UA")
   
Y = Application.Match(Datum, WS.Range("B3:B33"), 0) + 2
Z = Application.Match(Datum, WS1.Range("B3:B33"), 0) + 2

 MsgBox Y
 MsgBox Z
 
   
    For i = 4 To 5
        If WS.Cells(Y, i) <> "" Then
        If WS1.Cells(Z, i) <> "" Then
        Sheets("Bereich").OLEObjects("Label" & i).Object.Caption = WS.Cells(Y, i) & "/" & WS1.Cells(Z, i)
        End If
        End If
       
    Next i
 
    End Sub
Hallo

mal abgesehen davon, dass du nicht alle Variablen deklariert hast....

probiere es mal so


Code:
Y = Application.Match(CDbl(datum), WS.Range("B3:B33"), 0) + 2
Z = Application.Match(CDbl(datum), WS1.Range("B3:B33"), 0) + 2


MfG Tom
Moin!
Grob dürfte da ein .Row hinter .Match() fehlen.

Frage:
Warum deklarierst Du nur die Hälfte Deiner Variablen?
Dann kannst Du es gleich sein lassen.
Besser wäre Option Explicit
http://www.online-excel.de/excel/singsel_vba.php?f=4

Gruß Ralf
Code:
Sub M_snb_0()
   On Error Resume Next
  
   Sheets("UE").Cells(Day(InputBox("")) + 2, 3) = "OK"
End Sub

Weil du die Tagen in B3:B33 hast ist 'match' überflüssig.
VBA evaluiert selbst ob die String im Inputbox ein Datumswert ist.
@Crazy Tom: danke, hat leider nicht so geklappt. Das gab jetzt nen anderen Fehler

@rpp63: Danke für den Tipp. Ich bin noch Anfänger und die Variablen machen mir noch zu schaffen.

@snb: Der Code sieht vielversprechend aus. Ich möchte aber den Wert der Zelle entnehmen und nichts in eine Zelle einfügen.
          Wie würde dein Code dann aussehen?
Hallo

deine Frage war warum es zu dem Laufzeitfehler 13 bei Y kommt...
den Fehler gibt es in meinem Code nicht
also ist "klappt nicht" wohl nicht wahr, oder?
für alles andere was nicht "klappt" wäre dann eine Beispieldatei von Vorteil

MfG Tom
Danke an alle.
Dies ist der Code, den ich mit Eurer Hilfe erstellen konnte.
Weiß jemand von Euch wie ich den für mehrere Tage, also einen Datumsbereich programmieren kann?
Es sollten dann also in den Sheets UE und UA die i für mehrere Tage addiert werden.


Sub Testfinal()
Dim i As Long
      
datum = InputBox("")
For i = 4 To 10
Sheets("Bereich").OLEObjects("Label" & i).Object.Caption = Sheets("UE").Cells(Day(datum) + 2, i) & "/" & Sheets("UA").Cells(Day(datum) + 2, i)
      
Next i
 
End Sub
Hallöchen,

in Deinem Code tust Du ein Label im Blatt Bereich ändern.
In der Frage schreibst Du, dass Du in den Blättern UE und UA die i für mehrere Tage addieren willst. Jetzt wäre interessant zu wissen, wo die i auf diesen Blättern hingeschrieben werden sollen und welche i da addiert werden sollen. Deine Schleife fängt ja mit i=4 an und geht bis 10. Im Minimum wären das also 4, im Maximum 4+5+6+7+8+9+10 = 49 Pro Durchlauf. Wenn Du ein neues Datum eingibst, werden die Zahlen dann dazu gezählt?

Im Prinzip ginge das so. Angenommen, die Zahl kommt in A1, dann würde ich in der Schleife dann die i dazuzählen, z.B.
Cells(1,1).Value = Cells(1,1).Value +i

Nach dem ersten Durchlauf steht dort dann 49, nach dem zweiten 98 usw.

*****************************************
Oder willst Du die Schleife für mehrere Tage durchlaufen lassen und das Label im Blatt Bereich entsprechend ändern?

Da in Deiner Schleife der Monat und das Jahr keine Rolle spielt, reicht eventuell bei der Eingabe schon 17 und 4 Smile also der jeweilige Tag des Monats und Du brauchst ihn nicht erst zu berechnen

Ich baue es jetzt mal nach dem bisherigen VBA-Kenntnisstand aus diesem Thread auf.
Du nimmst dann eventuell zwei Inputboxen und zwei variable - datum1 und datum2. Kann man später auch mit einer Inputbox lösen Smile

Dann machst Du eine zweite Schleife,
For j = datum1 to datum2

In der anderen Schleife ersetzt Du dann Day(datum) durch j


Falls Du doch an der Eingabe des Datums festhälst, dann kannst Du In der Schleife mit dem For j ... den Tag extrahieren, also
For j = Day(datum1) to Day(datum2)