Word Makro gesucht für Zeitberechnung

...komplette Frage anzeigen

5 Antworten

Na das nenn ich schon recht unverfroren, für einen Arbeitgeber (Krankenhaus, Klinik) hier kostenlose Programmierungen abgreifen, zumal der ja sicher gut verdient.

Das Board soll VBA-Programmierern helfen, nicht sie arbeitslos machen.

Theoretisch sollte ich dich an eine Profi verweisen.

Aber da es nun schon ziemlich weit fortgeschritten ist, hier der neue Code:

Sub Time_Set()

StartTimeCell = ActiveDocument.Tables(2).Cell(16, 2).Range
StartTime = Mid(StartTimeCell, 5, 5)

EndTimeCell = ActiveDocument.Tables(2).Cell(16, 3).Range
EndTime = Mid(EndTimeCell, 5, 5)


'Hier wird berechnet
 If StartTime > EndTime Then
    ' hier: 24 Stunden minus Differenz
    DiffMin = 1440 - DateDiff("n", EndTime, StartTime)
 Else
    DiffMin = DateDiff("n", EndTime, StartTime)
 End If
'und nun noch das Ergebnis hinterlegt ACHTUNG die Minuten _
 haben eine neu Textmarke "Min_Erg"
 ActiveDocument.FormFields("Text11").Result = _
    Format(TimeSerial((DiffMin \ 60), 0, 0), "hh")
 ActiveDocument.FormFields("Min_Erg").Result = Format(DiffMin Mod 60, "00")
    
End Sub

Bitte beachten, dass das Feld hinter "Gesamt:", dass die Minuten enthalten soll eine Textmarke erhalten hat:

Min_Erg (wie Minuten_Ergebnis)

Ich hasse diesen Editor, weil hier nicht mal Unterstriche anzeigen kann, ohne in den Code-Modus zu wechseln

Ich sehe gerade, dass die Eingabefelder für die Zeiten ja auch Textmarken haben, da wird die Zuweisung dann einfacher:

StartTime = Right(ActiveDocument.Bookmarks("Beg1").Range.Text, 5)
EndTime = Right(ActiveDocument.Bookmarks("End1").Range.Text, 5)
0

Dafür brauchst du doch kein Makro.

Nehmen wir an, du hast in der Zelle A1 die Beginnzeit und in der Zelle B1 die Endzeit stehen. Dann schreibst du in die Zelle C1 die Formel:

 =B1-A1

und schon erscheint in C1 die Differenz der beiden Zeitangaben, also die Dauer. Gegebenenfalls kannst du die Zellen unter "Format|Zellen" noch passend formatieren (HH:MM).

Ich arbeite in Word und die Zellen dort die ich meine sind Zellen in eimem Rahmen. Da kann ich schlecht Formeln eingeben wie bei Excel.

0
@SubLexx

Ups sorry, da habe ich mich verlesen.

Du könntest aber in Word eine Exceltabelle einbinden ;-)

Direkt in Word geht das von Dir Gewünschte meines Wissens nicht.

0
@ultrarunner

Hatte ich vergessen mit zu erwähnen in meiner Fragestellung :/ Das müsste eigentlich schon gehen mit einem Makro, im Netz habe ich nur diesen Code gefunden:

Sub MyDateDiff()
Dim sMin As Long
sMin = DateDiff("n", Me.FormFields("End1").Result, Me.FormFields("Beg1").Result)
sMin = sMin + Hour(Me.FormFields("Pau1").Result) * 60 + Minute(Me.FormFields("Pau1").Result)
If Me.FormFields("Nac1").Result <> "" Then
sMin = sMin + Hour(Me.FormFields("Nac1").Result) * 60 + Minute(Me.FormFields("Nac1").Result)
End If
Me.FormFields("ZeitDif").Result = Format(TimeSerial((sMin \ 60), sMin Mod 60, 0), "hh:mm")
End Sub

Aber da stören halt die Variablen "Nac1" und "Pau1", wenn ich diesen Makro verwenden will müsste ich in meinem Formular 2 Felder definieren die Nac1 und Pau1 heißen und dies sieht einfach doof aus ^^'' Und eine Excel Tabelle einbinden in en Formular sieht auch nicht grad toll aus ^^'

0

Das ohne Button, es soll gleich berechnet werden nachdem man die Endzeit eingegeben hat. ^^

Versuch es mit folgendem Makro:

Sub MinutenDifferenz()

' in Zeile 1 Spalte 1 steht die Startzeit:
 StartTime = ActiveDocument.Tables(1).Cell(1, 1).Range

 StartTime = Left(StartTime, Len(StartTime) - 2)

'in Zeile 4 Spalte 2 steht die Endzeit
 EndTime = ActiveDocument.Tables(1).Cell(4, 2).Range
 ' hier wird die Absatzmarke der Tabellenzelle abgeschnitten:
      EndTime = Left(EndTime, Len(EndTime) - 2)

'Hier wird berechnet
 DiffMin = DateDiff("n", EndTime, StartTime)
'und nun noch in Zelle  Zeile 2 Spalte 3 das Ergebnis hinterlegt
 ActiveDocument.Tables(1).Cell(2, 3).Range = Format _
   (TimeSerial((DiffMin \ 60), DiffMin Mod 60, 0), "hh:mm")
End Sub

Voraussetzung ist, das es die erste Tabelle im Doc ist. Word nummeriert die Tabellen gnadenlos immer wieder neu in der Reihenfolge ihres Auftretens im Doc. Wenn du vor Tabelle4 noch zwei Tabellen einfügst wird daraus dann Tabelle6.

Ansonsten musst du den Indesx hinter Tables anpassen.

Das Formular ist schon fertig, was das rausfinden der Zellen Nummern schwer macht :/ Ich habe die Formularvorlage mal hochgeladen, falls ein was mit Makro dasteht dann ist es das Makro welches ich hier schon einmal gepostet habe. Die Arbeitszeit soll dorthin wo "Gesamt" steht. Vielleicht ist so der Einblick besser als es nur zu schreiben :x |

http://www28.zippyshare.com/v/8355780/file.html

0

Auch wenn ich deine Frage schon mal beantwortet habe, so beantworte ich die nochmal wegen deinem Kommentar.

=WENN(B1>A1;B1-A1;"Keine Endzeit")

Diese Formel gilt aber nicht bei Endzeiten nach Mitternacht!

Ich brauch die Zeitberechnung in Word, nicht in Excel. Falls ich Formeln in Word eingeben kann und in Word Rahmenfelder las Zellen deklarieren kann dann würde ich gerne wissen wo & iwe? o.o''

0

Sorry, ich hatte nicht gelesen, dass du in Word arbeitest. Da hast du recht, dass in Word keine Formel in Tabellen eingeben kannst. Das geht aber in kostenlose Programme, wie OpenOffice oder Libre Office. Beide Programme gibt es auch als Portable Versionen. Obwohl da gibt es keine Wenn Funktion.

0
@dkilli

Macht ja nichts, kann immer mal passieren. Das mag sein aber ich muss es in Word machen da die Praxissoftware mit Word Vorlagen arbeitet und auch in der Klinik nur Word verwendet wird ^^'

0

Was möchtest Du wissen?