Anzeige
Archiv - Navigation
1556to1560
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
Arbeitstage dazu addieren
03.05.2017 13:56:39
Christian
Moin alle zusammen,
bekomme beim Ausführen des Codes die Fehlermeldung "Typenunverträglichkeit"
Beispieldatei ist angefügt. Tabellenblatt Grafik, oben auf den Button Clusterstarttermine klicken (ZUSATZ, der Speicherplatz reicht nicht aus um meine Beispieldatei anzufügen)!!
Ich weiss nicht ob der Code und die Erklärung reicht um hier einen Typenunverträglichkeit rauslesen zu können.
Die Tage sollen dem neuen Startwert hinzuaddiert werden. Der neue Startwert wird dann mit den alten Datumswerts in einer anderen Tabelle ausgetauscht.

Dim Arbeitstage1 As Long
Dim Arbeitstage3 As Long
Dim Arbeitstage4 As Long
Dim Arbeitstage5 As Long
Dim Datum1 As Date
Dim Datum3 As Date
Dim Datum4 As Date
Dim Datum5 As Date
'Arbeitstage1 = Zahlenwert der hinzuaddiert werden soll
'TextCF_1_neu = Ausgangsdatum
Arbeitstage1 = Me.TextCF1_Damage.Value 'Anzahl Tage
Datum1 = WorksheetFunction.NetworkDays_Intl(Me.TextCF_1_neu.Value, Arbeitstage1, tblKalender. _
Range("B2:B100"))
Arbeitstage3 = Me.TextCF3_Damage.Value 'Anzahl Tage
Datum3 = WorksheetFunction.NetworkDays_Intl(Me.TextCF_3_neu.Value, Arbeitstage3, tblKalender. _
Range("B2:B100"))
Arbeitstage4 = Me.TextCF4_Damage.Value 'Anzahl Tage
Datum4 = WorksheetFunction.NetworkDays_Intl(Me.TextCF_4_neu.Value, Arbeitstage4, tblKalender. _
Range("B2:B100"))
Arbeitstage5 = Me.TextCF5_Damage.Value 'Anzahl Tage
Datum5 = WorksheetFunction.NetworkDays_Intl(Me.TextCF_5_neu.Value, Arbeitstage5, tblKalender. _
Range("B2:B100"))
'Übertrag in die Tabelle tblReal, Reale Planungswerte
For i = 1 To 4
For j = 2 To tblReal.Cells(Rows.Count, 2).End(xlUp).Row
If tblReal.Cells(j, 2).Value = CInt(TextBoxMSN.Value) Then
tblReal.Cells(j, 6) = Datum1
tblReal.Cells(j, 14) = Datum3
tblReal.Cells(j, 18) = Datum4
tblReal.Cells(j, 22) = Datum5
End If
Next j
Next i
Unload Me
Viele Grüße
Christian

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitstage dazu addieren
03.05.2017 14:17:07
ChrisL
Hi Christian
Die Beispieldatei fehlt.
Syntax:
NETWORKDAYS.INTL(start_date, end_date, [weekend], [holidays])
https://support.office.com/en-us/article/NETWORKDAYS-INTL-function-a9b26239-4f20-46a1-9ab8-4e925bfd5e28
So wie ich sehe verwendest du aber:
NETWORKDAYS.INTL(String, Long, Range)
anstelle
NETWORKDAYS.INTL(Date, Date, Wert 1-17)
Den String aus der Textbox bekommst du wie folgt in ein Datum umgewandelt:
CDate(TextBox)
cu
Chris
AW: Arbeitstage dazu addieren
03.05.2017 14:18:52
Christian
Die Beispieldatei kann ich leider nicht anfügen, der Server erlaubt die Dateigröße nicht. Aber dein Lösungsansatz klingt schon mal gut, den teste ich gleich mal aus :)
Vielen Dank schon mal
Anzeige
AW: Arbeitstage dazu addieren
03.05.2017 14:33:21
Christian
Habe deine Ansätze verarbeitet wobei ich wohl etwas übersehen habe, bekomme weiter die Meldung:
Die Feiertage ziehe ich aus einer anderen Tabelle.

Private Sub CommandButton1_Click()
Dim Arbeitstage1 As Long
Dim Arbeitstage3 As Long
Dim Arbeitstage4 As Long
Dim Arbeitstage5 As Long
Dim Datum1 As Date
Dim Datum3 As Date
Dim Datum4 As Date
Dim Datum5 As Date
Dim StartDatum1 As Date
Dim StartDatum3 As Date
Dim StartDatum4 As Date
Dim StartDatum5 As Date
'Arbeitstage1 = Zahlenwert der hinzuaddiert werden soll
'TextCF_1_neu = Ausgangsdatum
StartDatum1 = CDate(Me.TextCF_1_neu.Value)
Arbeitstage1 = CDate(Me.TextCF1_Damage.Value) 'Anzahl Tage
Datum1 = WorksheetFunction.NetworkDays_Intl(StartDatum1, Arbeitstage1, tblKalender.Range("B2: _
B100"))
StartDatum3 = CDate(Me.TextCF_3_neu.Value)
Arbeitstage3 = CDate(Me.TextCF3_Damage.Value) 'Anzahl Tage
Datum3 = WorksheetFunction.NetworkDays_Intl(StartDatum3, Arbeitstage3, tblKalender.Range("B2: _
B100"))
StartDatum4 = CDate(Me.TextCF_4_neu.Value)
Arbeitstage4 = CDate(Me.TextCF4_Damage.Value) 'Anzahl Tage
Datum4 = WorksheetFunction.NetworkDays_Intl(StartDatum4, Arbeitstage4, tblKalender.Range("B2: _
B100"))
StartDatum5 = CDate(Me.TextCF_5_neu.Value)
Arbeitstage5 = CDate(Me.TextCF5_Damage.Value) 'Anzahl Tage
Datum5 = WorksheetFunction.NetworkDays_Intl(StartDatum5, Arbeitstage5, tblKalender.Range("B2: _
B100"))
'Übertrag in die Tabelle tblReal, Reale Planungswerte
For i = 1 To 4
For j = 2 To tblReal.Cells(Rows.Count, 2).End(xlUp).Row
If tblReal.Cells(j, 2).Value = CInt(TextBoxMSN.Value) Then
tblReal.Cells(j, 6) = Datum1
tblReal.Cells(j, 14) = Datum3
tblReal.Cells(j, 18) = Datum4
tblReal.Cells(j, 22) = Datum5
End If
Next j
Next i
Unload Me
End Sub

Anzeige
AW: Arbeitstage dazu addieren
03.05.2017 14:54:55
ChrisL
Hi Christian
Dim Arbeitstage ist bei dir Typ Long. Teste mal mit Date.
Und probiere mal mit einem Komma mehr, weil der 3. Parameter ist Weekend und nicht holidays
WorksheetFunction.NetworkDays_Intl(StartDatum1, CDate(Arbeitstage1), , tblKalender.Range("B2: _
B100"))
cu
Chris
AW: Arbeitstage dazu addieren
03.05.2017 15:03:29
Christian
Hey Chris,
vielen Dank für deine Unterstützung, das Programm läuft jetzt bis zur If Abzweigung

For i = 1 To 4
For j = 2 To tblReal.Cells(Rows.Count, 2).End(xlUp).Row
If tblReal.Cells(j, 2).Value = CInt(TextBoxMSN.Value) Then
tblReal.Cells(j, 6) = Datum1
tblReal.Cells(j, 14) = Datum3
tblReal.Cells(j, 18) = Datum4
tblReal.Cells(j, 22) = Datum5
End If
Next j
Next i
Anwendungs- oder Objektdefinierte Fehler. Woran könnte das liegen? Die Felder in der Tabelle haben das Zellenformat Datum
Viele Grüße
Christian
Anzeige
AW: Arbeitstage dazu addieren
03.05.2017 16:00:40
ChrisL
Hi Christian
Aus der Ferne schwer zu sagen, der Fehler ist sehr allgemein. Vielleicht was banales wie z.B. tblReal oder TextBoxMSN gibt es nicht.
N.b. das Zellenformat tut nichts zur Sache. Entscheidend ist der Wert, welcher hinter dem Format steckt.
Eine kleine Beispieldatei (nur so dass man das Problem rekonstruieren kann) wäre sehr hilfreich.
cu
Chris
AW: Arbeitstage dazu addieren
03.05.2017 17:10:58
Christian
Moin Chris,
erst Mal vielen Dank für deine Mühe. Ich habe jetzt mal eine Beispiel Datei erstellt, welche genau da stopt wo ich das Problem habe.
https://www.herber.de/bbs/user/113282.xlsm
Viele Grüße
Christian
Anzeige
AW: Arbeitstage dazu addieren
04.05.2017 09:00:45
ChrisL
Hi Christian
Im erwähnten Codeteil erscheint bei mir kein Fehler. Hier der Test-Code:
Sub t()
Dim i As Byte, j As Long, MSN As Integer
Dim Datum1 As Date, Datum3 As Date, Datum4 As Date, Datum5 As Date
'****** Dummy Daten zum Test *******
Datum1 = CDate("1.1.17")
Datum3 = CDate("1.2.17")
Datum4 = CDate("1.4.17")
Datum5 = CDate("1.5.17")
MSN = 249
For i = 1 To 4
For j = 2 To tblReal.Cells(Rows.Count, 2).End(xlUp).Row
If tblReal.Cells(j, 2).Value = CInt(MSN) Then
tblReal.Cells(j, 6) = Datum1
tblReal.Cells(j, 14) = Datum3
tblReal.Cells(j, 18) = Datum4
tblReal.Cells(j, 22) = Datum5
End If
Next j
Next i
End Sub

Die Schleife i = 1 To 4 ergibt keinen Sinn. Schöner wäre z.B. folgendes Vorgehen:
Sub tt()
Dim MSN As Integer, findZeile As Long
Dim Datum1 As Date, Datum3 As Date, Datum4 As Date, Datum5 As Date
'****** Dummy Daten zum Test *******
Datum1 = CDate("1.1.17")
Datum3 = CDate("1.2.17")
Datum4 = CDate("1.4.17")
Datum5 = CDate("1.5.17")
MSN = 249
With tblReal
If WorksheetFunction.CountIf(.Columns(2), MSN) = 0 Then
MsgBox "Nummer ist nicht vorhanden"
Else
findZeile = Application.Match(MSN, .Columns(2), 0)
.Cells(findZeile, 6) = Datum1
.Cells(findZeile, 14) = Datum3
.Cells(findZeile, 18) = Datum4
.Cells(findZeile, 22) = Datum5
End If
End With
End Sub

cu
Chris
Anzeige
AW: Arbeitstage dazu addieren
04.05.2017 09:38:41
Christian
Moin Chris,
sieht schon mal super aus, leider komme ich damit nicht ganz klar. Die MSN als Variable verwirrt mich ein wenig weil ich Sie ja bereits im Textfeld Me.TextBoxMSN übergebe ergo findet er Sie auch nicht und gibt mir die MsgBox aus "Nummer ist nicht vorhanden"
Folgender Code nach Anpassung von mir.

Private Sub ComboBox1_Change()
Me.TextBoxMSN = Me.ComboBox1.Column(0)
'Sverweis aus Tabelle Planung
Me.TextCF_1 = Format(WorksheetFunction.VLookup(Me.ComboBox1.Column(0), _
tblPlan.Range("B1:V32"), 5, False), "DD.MM.YYYY")
Me.TextCF_2 = Format(WorksheetFunction.VLookup(Me.ComboBox1.Column(0), _
tblPlan.Range("B1:V32"), 9, False), "DD.MM.YYYY")
Me.TextCF_3 = Format(WorksheetFunction.VLookup(Me.ComboBox1.Column(0), _
tblPlan.Range("B1:V32"), 13, False), "DD.MM.YYYY")
Me.TextCF_4 = Format(WorksheetFunction.VLookup(Me.ComboBox1.Column(0), _
tblPlan.Range("B1:V32"), 17, False), "DD.MM.YYYY")
Me.TextCF_5 = Format(WorksheetFunction.VLookup(Me.ComboBox1.Column(0), _
tblPlan.Range("B1:V32"), 21, False), "DD.MM.YYYY")
Me.CF1_Damage.Enabled = True
Me.CF3_Damage.Enabled = True
Me.CF4_Damage.Enabled = True
Me.CF5_Damage.Enabled = True
On Error GoTo Datumheute
TextCF_1_neu = Me.TextCF_1.Value
TextCF_3_neu = Me.TextCF_3.Value
TextCF_4_neu = Me.TextCF_4.Value
TextCF_5_neu = Me.TextCF_5.Value
Exit Sub
Datumheute:
TextCF_1_neu = Date
TextCF_3_neu = Date
TextCF_4_neu = Date
TextCF_5_neu = Date
End Sub
Private Sub CommandButton1_Click()
Dim i As Byte, j As Long, findZeile As Long
Dim Datum1 As Date, Datum3 As Date, Datum4 As Date, Datum5 As Date
Dim MSN As Integer
Dim Arbeitstage1 As Long
Dim Arbeitstage3 As Long
Dim Arbeitstage4 As Long
Dim Arbeitstage5 As Long
Dim StartDatum1 As Date
Dim StartDatum3 As Date
Dim StartDatum4 As Date
Dim StartDatum5 As Date
'Arbeitstage1 = Zahlenwert der hinzuaddiert werden soll
'TextCF_1_neu = Ausgangsdatum
StartDatum1 = CDate(Me.TextCF_1_neu.Value)
Arbeitstage1 = CDate(Me.TextCF1_Damage.Value) 'Anzahl Tage
Datum1 = WorksheetFunction.NetworkDays_Intl(StartDatum1, CDate(Arbeitstage1), , tblKalender. _
Range("B2:B100"))
StartDatum3 = CDate(Me.TextCF_3_neu.Value)
Arbeitstage3 = CDate(Me.TextCF3_Damage.Value) 'Anzahl Tage
Datum3 = WorksheetFunction.NetworkDays_Intl(StartDatum3, CDate(Arbeitstage3), , tblKalender. _
Range("B2:B100"))
StartDatum4 = CDate(Me.TextCF_4_neu.Value)
Arbeitstage4 = CDate(Me.TextCF4_Damage.Value) 'Anzahl Tage
Datum4 = WorksheetFunction.NetworkDays_Intl(StartDatum4, CDate(Arbeitstage4), , tblKalender. _
Range("B2:B100"))
StartDatum5 = CDate(Me.TextCF_5_neu.Value)
Arbeitstage5 = CDate(Me.TextCF5_Damage.Value) 'Anzahl Tage
Datum5 = WorksheetFunction.NetworkDays_Intl(StartDatum5, CDate(Arbeitstage5), , tblKalender. _
Range("B2:B100"))
'Übertrag in die Tabelle tblReal, Reale Planungswerte
With tblReal
If WorksheetFunction.CountIf(.Columns(2), MSN) = 0 Then
MsgBox "Nummer ist nicht vorhanden"
Else
findZeile = Application.Match(MSN, .Columns(2), 0)
.Cells(findZeile, 6) = Datum1
.Cells(findZeile, 14) = Datum3
.Cells(findZeile, 18) = Datum4
.Cells(findZeile, 22) = Datum5
End If
End With
End Sub
Viele Grüße
Christian
Anzeige
AW: Arbeitstage dazu addieren
04.05.2017 09:42:24
ChrisL
Hi Christian
Ja die MSN Variable war nur zum Testen.
MSN = CInt(TextBoxMSN.Value)
cu
Chris
AW: Arbeitstage dazu addieren
04.05.2017 09:55:26
Christian
Moin Chris,
stimmt aber wieder etwas gelernt. Leider bekomme ich jetzt wieder an der gleichen Stelle die Fehlermeldung "Anwendungs- oder objektdefinierter Fehler"
Aber er findet jetzt auf jeden Fall die MSN

Private Sub CommandButton1_Click()
Dim i As Byte, j As Long, findZeile As Long
Dim Datum1 As Date, Datum3 As Date, Datum4 As Date, Datum5 As Date
Dim MSN As Integer
MSN = CInt(TextBoxMSN.Value)
Dim Arbeitstage1 As Long
Dim Arbeitstage3 As Long
Dim Arbeitstage4 As Long
Dim Arbeitstage5 As Long

With tblReal
If WorksheetFunction.CountIf(.Columns(2), MSN) = 0 Then
MsgBox "Nummer ist nicht vorhanden"
Else
findZeile = Application.Match(MSN, .Columns(2), 0)
.Cells(findZeile, 6) = Datum1
.Cells(findZeile, 14) = Datum3
.Cells(findZeile, 18) = Datum4
.Cells(findZeile, 22) = Datum5
End If
End With
End Sub
Viele Grüße
Christian
Anzeige
AW: Arbeitstage dazu addieren
04.05.2017 11:23:17
ChrisL
Hi Christian
Wie gesagt, ich kann deinen Fehler mit der Beispieldatei nicht rekonstruieren.
Der erste Teil funktioniert bei mir gar nicht u.a. weil Arbeitstage kein Datum ist, aber das hast du ja scheinbar schon gelöst.
Sofern TextBoxMSN auch tatsächlich einen Wert hat, dann funktioniert folgender Code.
Private Sub CommandButton1_Click()
Dim findZeile As Long
Dim MSN As Integer
MSN = CInt(TextBoxMSN.Value)
'Dim Arbeitstage1 As Long
'Dim Arbeitstage3 As Long
'Dim Arbeitstage4 As Long
'Dim Arbeitstage5 As Long
Dim Datum1 As Date
Dim Datum3 As Date
Dim Datum4 As Date
Dim Datum5 As Date
'Dim StartDatum1 As Date
'Dim StartDatum3 As Date
'Dim StartDatum4 As Date
'Dim StartDatum5 As Date
'Dim i As Integer
'Dim j As Integer
'Arbeitstage1 = Zahlenwert der hinzuaddiert werden soll
'TextCF_1_neu = Ausgangsdatum
'StartDatum1 = CDate(Me.TextCF_1_neu.Value)
'Arbeitstage1 = CDate(Me.TextCF1_Damage.Value) 'Anzahl Tage
'Datum1 = WorksheetFunction.NetworkDays_Intl(StartDatum1, CDate(Arbeitstage1), , tblKalender. _
Range("B2:B100"))
'StartDatum3 = CDate(Me.TextCF_3_neu.Value)
'Arbeitstage3 = CDate(Me.TextCF3_Damage.Value) 'Anzahl Tage
'Datum3 = WorksheetFunction.NetworkDays_Intl(StartDatum3, CDate(Arbeitstage3), , tblKalender. _
Range("B2:B100"))
'StartDatum4 = CDate(Me.TextCF_4_neu.Value)
'Arbeitstage4 = CDate(Me.TextCF4_Damage.Value) 'Anzahl Tage
'Datum4 = WorksheetFunction.NetworkDays_Intl(StartDatum4, CDate(Arbeitstage4), , tblKalender. _
Range("B2:B100"))
'StartDatum5 = CDate(Me.TextCF_5_neu.Value)
'Arbeitstage5 = CDate(Me.TextCF5_Damage.Value) 'Anzahl Tage
'Datum5 = WorksheetFunction.NetworkDays_Intl(StartDatum5, CDate(Arbeitstage5), , tblKalender. _
Range("B2:B100"))
'Übertrag in die Tabelle tblReal, Reale Planungswerte
With tblReal
If WorksheetFunction.CountIf(.Columns(2), MSN) = 0 Then
MsgBox "Nummer ist nicht vorhanden"
Else
findZeile = Application.Match(MSN, .Columns(2), 0)
.Cells(findZeile, 6) = Datum1
.Cells(findZeile, 14) = Datum3
.Cells(findZeile, 18) = Datum4
.Cells(findZeile, 22) = Datum5
End If
End With
Unload Me
End Sub

Ansonsten markiere die Frage offen, weil ich kann keine Probleme lösen, die ich nicht sehe.
cu
Chris
Anzeige
AW: Arbeitstage dazu addieren
04.05.2017 11:49:29
Christian
Moin Chris,
Ja, das Textfeld beeinhaltet den Wert MSN. Aus der Liste wird der Wert in das Feld geschrieben. Die geplanten Startwerte erscheinen (Term. Startwerte). In den Textfeldern (Neue Startwerte) werden die geplanten Startwerte als Platzhalter eingelesen. Jetzt hat der Nutzer die Möglichkeit Störungen welche einen Verzug des Startwerts verursachen über weitere Listenfelder auszuwählen.
Beispielsweise im ersten Textfeld der Störungen Test2 mit einen Wert von 2 Tagen. Dieser Wert soll in Arbeitstagen umgerechnet werden und dem Datum in CF-1 hinzugefügt werden.
Und ich glaube ich sehe jetzt auch schon meinen Fehler. Ich führe die Addition nirgendwo durch bzw. ich gehe davon aus, das die Tage in die Funktion Networkdays mit einfließen und die Funktion das neue Datum ausspruckt.
Bis zur Schleife läuft der Prozedur auch durch aber dann kommt der Fehler und der Übertrag in die Tabelle findet nicht statt. Ich möchte im Grunde den neuen Startwert um die Tage der Störungen ergänzen.
Viele Grüße und vielen Dank bis jetzt für deinen Support. Ich habe schon jetzt viel mitgenommen.
Christian
Anzeige
AW: Arbeitstage dazu addieren
04.05.2017 12:53:57
ChrisL
Hi Christian
Sorry, aber ich bin mit meinem Latein am Ende. Frage offen.
cu
Chris
AW: Arbeitstage dazu addieren
04.05.2017 17:50:44
Christian
Alles klar Chris, trotzdem vielen Dank das du dich da so reingehängt hast :) Ich stelle die Frage später nochmal online aber versuche das Problem nochmal selber zu lösen.
Viele Grüße
Christian
AW: Arbeitstage dazu addieren
04.05.2017 18:07:24
ChrisL
Hi Christian
Gute Idee, aber mach bitte einen Link auf diesen Beitrag.
Lösche unnötiges aus der Beispieldatei, Upload ins Forum und sag noch einmal wie man den Fehler erzeugt. Irgendwie haben wir mit verschiedenen Dateien oder mit unterschiedlichen Daten getestet. Evtl. Verknüpfungen in Werte umwandeln, weil ohne Verknüpfungsdatei kommt nicht viel. Den neuen Fehler konnte ich nicht erzeugen, dafür die schon gelösten Typenfehler.
cu
Chris
AW: Arbeitstage dazu addieren
04.05.2017 22:47:06
Christian
Moin Chris,
das werde ich machen. Da ich noch nicht sehr lange hier im Forum unterwegs bin, eine ganz banale Frage. Wie kann ich ein Link auf diesen Beitrag erzeugen? Oben im Browser sehe ich immer nur denselben Link
https://www.herber.de/forum/
Viele Grüße
Christian

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige