Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1328to1332
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Formelübertrag in VBA

Formelübertrag in VBA
04.09.2013 09:53:51
Alex
Guten Morgen,
kann mir jemand beim Umschreiben dieser Formel:
=WENN(24*MAX(MIN(D11;D14)-MAX(D10;D13))>0;"Überschneidung";"")
in VBA helfen?
In Zellen D10 und D11 stellt den 1. Zeitraum dar.
Zellen D13 und D14 den 2. Zeitraum.
Überschneiden sich beide Zeiträume meldet die Formel Überschneidung.
von 12:00
bis 16:00
Überschneidung
von 10:00
bis 14:00
Gut wäre, wenn anstelle "Überschneidung" eine MsBox mit "Überschneidung" erscheint.
Mein Versuch
ergibt Fehler Objektvariable oder With-Blockvariable nicht festgelegt:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Min As WorksheetFunction
Dim Max As WorksheetFunction
If (24 * Max(, Min(Range("B2"), Range("D2")) - Max(Range("A2"), Range("C2")))) > 0 Then
If MsgBox(Prompt:="Zeitraumüberschneidung", _
Buttons:=vbOKOnly, _
Title:="Achtung") = vbOK Then
End If
End If
End Sub
Danke für jede Hilfe
Gruß
Alex

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formelübertrag in VBA
04.09.2013 10:20:22
Rudi
Hallo,
lass das 2. If/ End If weg.
If 24 * Max(Min(Range("B2"), Range("D2")) - Max(Range("A2"), Range("C2"))) > 0 Then
MsgBox Prompt:="Zeitraumüberschneidung", _
Buttons:=vbOKOnly, _
Title:="Achtung"
End If

Gruß
Rudi

Formelübertrag in VBA
04.09.2013 10:54:09
Alex
Hallo Rudi,
Danke für deine schnelle Antwort.
Ich habe das so umgesetzt wie du es gesagt hast, jedoch die Fehlermeldung erscheint immer noch.
Dabei wird die If - Zeile gelb markiert.
Ich hab mal eine Beispieldatei angehängt, dann siehst du das besser.
https://www.herber.de/bbs/user/87143.xlsm
Vielen Dank bisher,
Gruß
Alex

Anzeige
AW: Formelübertrag in VBA
04.09.2013 11:05:03
Rudi
Hallo,
Private Sub Worksheet_Change(ByVal Target As Range)
With WorksheetFunction
If 24 * .Max(.Min(Range("B2"), Range("D2")) - .Max(Range("A2"), Range("C2"))) > 0 Then
MsgBox Prompt:="Zeitraumüberschneidung", _
Buttons:=vbOKOnly, _
Title:="Achtung"
End If
End With
End Sub

Gruß
Rudi

Fehlermeldung weg, aber komisch ist...
04.09.2013 11:30:34
Alex
Hallo Rudi,
Fehlermeldung ist jetzt weg. Sehr gut.
Nur Meldet der Code nicht eine Zeitraumüberschneidung,
sondern sobald ich in die erste Zelle ("D10")einen Uhrzeitwert schreibe,
meldet sich die MsgBox.
Nur wenn ich die anderen Zellen (D11, D13, D14) ausfülle, erscheint nichts mehr.
Hab noch mal eine aktualisierte Datei angehängt.
Die nebenstehende Formel meldet eine Überschneidung erst,
wenn beide Zeitbereiche ausgefüllt wurden.
https://www.herber.de/bbs/user/87144.xlsm
Danke nochmal,
Gruß
Alex

Anzeige
AW: Fehlermeldung weg, aber komisch ist...
04.09.2013 12:33:00
Rudi
Hallo,
die Bereiche im Code sollte schon mit denen in der Formel übereinstimmen.
Private Sub Worksheet_Change(ByVal Target As Range)
With WorksheetFunction
If .Count(Range("D10:D14")) = 4 Then
If 24 * .Max(.Min(Range("D11"), Range("D14")) - .Max(Range("D10"), Range("D13"))) > 0  _
Then
MsgBox Prompt:="Zeitraumüberschneidung", _
Buttons:=vbOKOnly, _
Title:="Achtung"
End If
End If
End With
End Sub

Gruß
Rudi

Danke Rudi...
04.09.2013 13:10:46
Alex
Hallo Rudi,
"die Bereiche im Code sollte schon mit denen in der Formel übereinstimmen."
...natürlich, sorry... hab mich verdaddelt...
Hast mir sehr geholfen, Vielen Dank, jetzt läufts wie gewünscht...
Gruß
Alex

Anzeige
Traue mich gar nicht zu fragen, aber...
04.09.2013 18:32:10
Alex
Hallo (Rudi) und Co.
...ist das mit dem Code von Rudi auch für mehr als 2 Zeiträume möglich?
Habe mal noch eine Beispielmappe angehängt.
Der Code steht in Mod. von Tab1 und vergleicht die
Zeiträume 1 und 2 und prüft eine Überschneidung ab.
Wäre mir echt sehr geholfen, wenn das mit mehreren Zeiträumen auch geht.
https://www.herber.de/bbs/user/87156.xlsm
Gruß
Alex

AW: Traue mich gar nicht zu fragen, aber...
04.09.2013 19:56:11
Rudi
Hallo,
warum sollte das nicht gehen?
Was willst du genau? Immer nur 2 aufeinander folgende oder jeden mit jedem vergleichen?
Gruß
Rudi

Anzeige
AW: Traue mich gar nicht zu fragen, aber...
04.09.2013 20:31:00
Alex
puhhh...
dachte schon du bist sauer... weil ich das so step by step mache.
Ich mach mal die Megawunschvorstellung:
Das große Ziel ist eine Datei die meine Frau auf der Arbeit bearbeiten muss.
Sie muss Arbeitszeiten für Kollegen eintragen und es darf keine Zeitüberschneidungen geben...
Das erste Ziel wäre in einer Spalte jeder mit jedem, aber die Anzahl der Einträge variiert.
Und das große Ziel wäre, das es für jeden Tag im Monat (sprich in 31 Spalten) geschieht (aber nur die Zeiträume innerhalb einer Spalte/Tages werden verglichen).
Wenn du willst, kann ich auch ein Abbild der Realdatei hochladen.
Danke für deine Unterstützung,
Gruß
Alex

Anzeige
AW: Traue mich gar nicht zu fragen, aber...
05.09.2013 09:18:37
Rudi
Hallo,
Wenn du willst, kann ich auch ein Abbild der Realdatei hochladen.
das ist sinnvoll.
Gruß
Rudi

AW: Na dann mal...
05.09.2013 15:42:58
Rudi
Hallo,
in ein Modul:
Function CheckTimes(lngCol As Long) As Boolean
Dim arrVon(1 To 30), arrBis(1 To 30), i As Integer, j As Integer
For i = 17 To 300
If Cells(i, 1) = "von:" Then
j = j + 1
arrVon(j) = Cells(i, lngCol)
arrBis(j) = Cells(i + 1, lngCol)
End If
Next
For i = 1 To 30
If arrVon(i)  "" And arrBis(i)  "" Then
If arrVon(i) > arrBis(i) Then
CheckTimes = True
Exit Function
End If
For j = i + 1 To 30
If arrVon(j)  "" Then
If arrVon(j) >= arrVon(i) And arrVon(j)  "" Then
If arrBis(j) = arrBis(i) Then
CheckTimes = True
Exit Function
End If
End If
Next
End If
Next
End Function
Im Tabellenmodul:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Select Case Target.Column
Case 2 To 32
If CheckTimes(Target.Column) Then
With Target.Font
.Color = 255
.Bold = True
End With
Target.Select
MsgBox "Überschneidung!!!"
Else
With Target.Font
.ColorIndex = xlAutomatic
.Bold = False
End With
End If
End Select
End If
End Sub
Gruß
Rudi

Anzeige
Duuu bist....
05.09.2013 18:03:42
Alex
....der GRÖßTE, Mann!!!
Weißt du, wie sehr du mir geholfen hast?
Ich würde dir am liebsten n Bier spendieren - was heißt eins... Kästenweise hast du verdient.
Vielleicht können wir das ja mal realisieren - ich komme aus Nordbayern. ;-)
Mann, Rudi - ich liebe dieses Forum... ehrlich.
Ich weiß, das hat dir viel Mühe gemacht.
1000 Dank!
Ich teste mal n bisschen...
bis denn dann
Alex (der fröhliche)

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige