Datumsdifferenz in Tabelle automatisch berechnen

Hallo Forengemeinde,

ich habe mich vor längerem an euch gewandt mit dem Problem wie man in einer Word Tabelle per Formel automatisch die Differenz zwischen zwei Daten ausrechenen kann. Dank eurer Hilfe und langem probieren bin ich schon viel weiter, nun bleibt ein Problem, das ich wieder nicht alleiner lösen kann:

Wenn ich innerhalb eines Monats die Berechnung vornehme, also zB.
#A1= 01.02.2010 #B1= 03.02.2010 wird für #C1={B1-A1} korrekt die Differenz 2 ausgerechnet

ABER: wenn ich zwei Daten aus unterschiedlichen Monaten verwende, also zB.
#A1= 31.01.2010 #B1= 03.02.2010 wird für #C1 nicht 3, sondern -28 ausgegeben, anscheinend rechnet Word ohne Rücksicht auf die Monatsangabe immer die Differenz zum entspr. Datum des gleichen Monats aus.

Ich habe viel umgestellt und rumprobiert und rausgefunden, dass das Problem nicht auftritt, wenn ich ausschließlich mit dem englischen/amerikanischen Datumsformat arbeite, zB. 10-02-01 - das wäre zwar zur Not möglich, aber in meinem Fall nicht praktikabel weil viele Leute mit der Datei arbeiten müssen, die ohnehin große Scheu vor Computer Sachen haben und dann noch mehr streiken… wies halt so ist :smile:

Danke für eure Hilfe, Gruß Jakob

Hi jakobb,

Bisher habe ich nichts gefunden, was wirklich helfen könnte. Bei meinen Experimenten habe ich nur herausgefunden, daß Word ein internes Datum führt - aber nicht so wie VBA oder Excel, sondern irgendwie anders.

Darüber hinaus ist unklar geblieben, wie Word den Punkt im deutschen Datum behandelt: als Trennzeichen oder als Dezimalseparator (gleiches gilt für den Strich im amerikanischen Datum in Word 2003: wird mal als Minus interpretiert, mal als Text).

Mehr kann ich heute dazu nicht sagen.

Gruß

M.

hallo

word kann zwar viel aber nicht wirklich mit datumswerten rechnen. entweder du steigst irgendwie auf excel um, lässt die berechnungen von excel machen (über verknüpfungen/einbettungen) oder baust ein makro ein, dass die datumsdifferenz berechnet. alles irgendwie mühsam.

lg
erwin

OT Benutzerdefinierte Funktionen in Wordtabelle

word kann zwar viel aber nicht wirklich mit datumswerten
rechnen. entweder du steigst irgendwie auf excel um, lässt die
berechnungen von excel machen (über
verknüpfungen/einbettungen) oder baust ein makro ein, dass die
datumsdifferenz berechnet. alles irgendwie mühsam.

Hallo Erwin,

da B1-A1 teilweise funktioniert habe ich eine Funktion gebastelt.
Leider kommt immer „Syntaxfehler“
Sahest du schon jemals eine BDF (siehe Betreff) in einer Zelle in Word-Tabelle? (meist wird UDF gesagt, ist das Gleiche, halt User anstatt Benutzer usw.)

Mir geht es hauptsächlich darum zu erfahren ob das überhaupt geht.
Wenn es geht würde ich mich über Beispielcode freuen.

Der Syntaxfehler kommt wenn ich in C1 eingebe:
=Diff(a1;B1)

bezogen auf:

Function Diff(a, b)
Diff = DateDiff(„d“, b, a)
End Function

Danke ^ Gruß
Reinhard

hallo

also ich kenne keine möglichkeit im word, benutzerdefinerte funktionen direkt aus dem dokument heraus zu verwenden (stand word 2003). anders als excel kann man in feldfunktionen nur eingebaute funktionen verwenden, keine makros.

sollte es irgendwer diesbezüglich besser wissen - immer her mit der info! so eine lösung würde mich brennend interessieren. suche allerdings schon seit word97 und habs inzwischen aufgegeben.

lg
erwin

Zum Gruße,

sollte es irgendwer diesbezüglich besser wissen - immer her
mit der info! so eine lösung würde mich brennend
interessieren. suche allerdings schon seit word97 und habs
inzwischen aufgegeben.

Ich bin nicht sicher, ob ich das richtig verstanden habe, aber vielleicht ist das so etwas wie hier besprochen: http://www.office-loesung.de/ftopic54607_0_0_asc.php
Es kann aber auch sein, dass ich völlig daneben liege. In diesem Fall bitte ich um Nachsicht. :smile:

Gruß TL

Wenn ich innerhalb eines Monats die Berechnung vornehme, also
zB.
#A1= 01.02.2010 #B1= 03.02.2010 wird für #C1={B1-A1} korrekt
die Differenz 2 ausgerechnet

ABER: wenn ich zwei Daten aus unterschiedlichen Monaten
verwende, also zB.
#A1= 31.01.2010 #B1= 03.02.2010 wird für #C1 nicht 3, sondern
-28 ausgegeben, anscheinend rechnet Word ohne Rücksicht auf
die Monatsangabe immer die Differenz zum entspr. Datum des
gleichen Monats aus.

Hallo Jakob,

Alt +F11, im Editor siehst du links Baumstruktur wie im Eplorer, Doppelklick auf „ThisDokument“ (unterhalb deines Proejekts=Dokumentnamen), dort diesen Code reinkopieren:

Option Explicit
'
Dim X As New clsApp
'
Private Sub Document\_Open()
 Set X.App = Word.Application
End Sub

Dann Einfügen–Modul, dortrein diesen Code:

Option Explicit
'
Sub Diff()
Dim a, b
With ActiveDocument.Tables(1)
 a = Replace(Replace(.Cell(1, 1).Range, Chr(10), ""), Chr(7), "")
 b = Replace(Replace(.Cell(1, 2).Range, Chr(10), ""), Chr(7), "")
 .Cell(1, 3).Range = DateDiff("d", a, b)
End With
End Sub

Dann Einfügen–Klasenmodul, dortrein diesen Code:

Option Explicit
'
Public WithEvents App As Word.Application
'
Private Sub App\_WindowBeforeDoubleClick(ByVal Sel As Selection, Cancel As Boolean)
Call Diff
End Sub

F4 drücken, oben den Namen abändern auf clsApp
Fensterchen mit Schließkreuz schließen.

Editor schließen.

Dokument schließen, Änderungen übernehmen. Dokument neu öffnen.
Immer bei Doppelklick ins Dokument wird C1 neu berechnet.

Hier ist ein beispiel:

http://rapidshare.com/files/348147455/Ereigniscode.d…

Gruß
Reinhard

hallo

hier bitte - deine portion nachsicht :smile:

in dem verlinkten artikel geht es darum, automatisch nach änderung eines wertes in einem formularfeld an einer anderen stelle was automatisch zu berechnen. ist nicht ganz das selbe wie hier.

was wir für dieses problem hier bräuchten wäre die möglichkeit, aus einem feld heraus ein vba-funktion aufzurufen und als feldergebnis den rückgabewert dieser funktion anzuzeigen - und zwar immer dann, wenn das feld neu berechnet wird. und genau das scheint nicht möglich zu sein (geht z.b. im excel).

die lösung von reinhard ist, dass einfach nach dem öffnen des dokuments automatisch alle spalten der tabelle analysiert und berechnet werden und das ergebnis per makro in die richtige zelle geschrieben wird. ist nicht ganz das selbe, funktioniert grundsätzlich auch, gefällt mir aber persönlich nicht so sehr (ich mag autoopen-events nicht so sehr - die machen hin und wieder stress).

alternativ könnte natürlich das makro zum expliziten berechnen auch durch einen menüpunkt, sybolleistenikon, makro-feld etc. gestartet werden. erfordert eine zusätzliche manuelle aktion des aktuellen benutzers. ist leider auch nicht viel besser.

das grundproblem bleibt: das makro muss die struktur des dokuments recht gut kennen. eine allgemein gültige lösung gibt es daher nicht (bzw. ist recht schwer zu bauen). auch muss relativ viel programmiert werden. makros in einem dokument, dass von mehreren benutzern (vielleicht sogar auf mehreren pcs) bearbeitet wird, schreien geradezu nach problemen (v.a. virenschutz). soll die selbe lösung in unterschiedlichen dokumenten verwendet werden, wird’s sowieso stressig.

hat sich das wer im office 2007 angeschaut? ich glaube ja nicht, dass sich da viel getan hat - wesentliche änderungen an den kernfunktionen von word gibts ja schon lange nicht. ev. kommt ja auch was mit office 2010…

lg
erwin

was wir für dieses problem hier bräuchten wäre die
möglichkeit, aus einem feld heraus ein vba-funktion aufzurufen
und als feldergebnis den rückgabewert dieser funktion
anzuzeigen - und zwar immer dann, wenn das feld neu berechnet
wird. und genau das scheint nicht möglich zu sein (geht z.b.
im excel).

Hallo Erwin,

alles richtig. Egal wie, man muß die Berechnung manuell „anstoßen“.
In einer Word-Tabelle gibt es wohl nicht eingebaute Ereignisprozeduren die auf Zellwertänderungen in z.B. A1 und B1 reagieren und daraufhin C1 neu berechnen und man kann wohl keine eigene Funktionen in C1 schreiben die das genauso machen.

Naja, Word ist ein Textverabeitungsprogramm was zwar als Feature Tabellen kennt, aber mit minimalen Funktionsumfang.
Und Excel ist für Tabellen, da kann man schon Texte formatieren aber vergliche mit Word nur mit minimalen Funktionen.

@Anfrager, am besten wäre, wie schon gesagt wurde, eine Exceltabelle einzubinden. Allerdings geht das nur mit fitten Anwendern die auch bereit sind sich das Wissen wie man dann damit umgeht, anzueignen.

Gruß
Reinhard

die lösung von reinhard ist, dass einfach nach dem öffnen des
dokuments automatisch alle spalten der tabelle analysiert und
berechnet werden und das ergebnis per makro in die richtige
zelle geschrieben wird. ist nicht ganz das selbe, funktioniert
grundsätzlich auch, gefällt mir aber persönlich nicht so sehr
(ich mag autoopen-events nicht so sehr - die machen hin und
wieder stress).

alternativ könnte natürlich das makro zum expliziten berechnen
auch durch einen menüpunkt, sybolleistenikon, makro-feld etc.
gestartet werden. erfordert eine zusätzliche manuelle aktion
des aktuellen benutzers. ist leider auch nicht viel besser.

das grundproblem bleibt: das makro muss die struktur des
dokuments recht gut kennen. eine allgemein gültige lösung gibt
es daher nicht (bzw. ist recht schwer zu bauen). auch muss
relativ viel programmiert werden. makros in einem dokument,
dass von mehreren benutzern (vielleicht sogar auf mehreren
pcs) bearbeitet wird, schreien geradezu nach problemen (v.a.
virenschutz). soll die selbe lösung in unterschiedlichen
dokumenten verwendet werden, wird’s sowieso stressig.

hat sich das wer im office 2007 angeschaut? ich glaube ja
nicht, dass sich da viel getan hat - wesentliche änderungen an
den kernfunktionen von word gibts ja schon lange nicht. ev.
kommt ja auch was mit office 2010…

lg
erwin