MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Word
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 30.11.2016, 11:36   #1
Lisa-Asil
Neuer Benutzer
Neuer Benutzer
Standard Word 2010 - Inhaltssteuerelement durch Datenimport füllen

Hallo,

in Word habe ich eine Tabelle mit vielen Feldern, in einem Feld befindet sich ein "Datumsauswahl-Inhaltssteuerelement". In Word lese ich den Inhalt einer Textdatei ein. Diese enthält auch ein Datum, dass ich nun in dem Datumsauswahl-Inhaltssteuerelemt ausgeben möchte. Wie spreche ich das Feld an? Bisher hatte ich immer FormFields genutzt. Hier mein bisheriger Murks:

Code:

ActiveDocument.ContentControls("TERMIN") = Trim$(s(9))
Das Feld befindet sich an der 9. Stelle. Könnt Ihr mir bitte helfen? Vielen Dank.
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.11.2016, 12:26   #2
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Lisa,

angenommen, das Datum aus der Textdatei ist in einer Variablen mit dem Namen datTermin abgelegt, dann kriegst du das so in ein Kalender-Inhaltssteuerelement, welches den Tag "TERMIN" trägt (Groß-Kleinschreibung beachten!):

Code:

Sub datumRein()
Dim datTermin As String

datTermin = "30.11.2016"
ActiveDocument.SelectContentControlsByTag("TERMIN").Item(1).Range.Text = datTermin

End Sub
Natürlich kannst du auf die gleiche Weise das Datum direkt als Text übergeben.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.11.2016, 13:53   #3
Lisa-Asil
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

vielen Dank für Deine Hilfe, Du hast mir sehr geholfen. Jetzt funktioniert es, wie ich es mir vorgestellt habe:

Code:

ActiveDocument.SelectContentControlsByTag("TERMIN").Item(1).Range.Text = Trim$(s(9))
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 13:14   #4
Lisa-Asil
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo,

wenn ich die Differenz so berechne
Code:

ActiveDocument.FormFields("TAGE_DIFF").Result = DateDiff("d", Sysdate, TERMIN)
klappt es, aber leider nur so lang, wie ein Datum (TERMIN) vorhanden ist. Wie kann ich in das Feld "nichts" schreiben, damit das Makro bei fehlendem Datum weiter läuft (beim nächsten Feld bekomme ich nämlich eine Fehlermeldung wegen Typenunverträglichkeit).
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 14:02   #5
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Lisa,

mach doch deine Berechnung einfach davon abhängig, ob was im Textfeld steht, z.B.

Code:

Sub rechne()
 If Len(ActiveDocument.FormFields("tage_diff").Result) > 0 Then
    'deine Berechnung"
Else
    MsgBox "kein Ausgangsdatum vorhanden"
End If
Wenn die Länge des Textfeldes 0 ist, steht nichts drin, also erfolgt keine Berechnung. Sollte ein Leerzeichen oder sonstwas drin sein, halt entsprechend anpassen.

Den Else-Teil brauchst du nicht unbedingt, je nachdem, was geschehen soll, wenn es kein Datum gibt.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 15:01   #6
Lisa-Asil
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo,

das sieht jetzt bei mir so aus
Code:

 If Len(ActiveDocument.FormFields("tage_diff").Result) > 0 Then
 ActiveDocument.FormFields("tage_diff").Result = DateDiff("d", Sysdate, termin)
 Else
  MsgBox "kein TERMIN vorhanden"
 End If
Leider erfolgt die Berechnung nun nicht mehr.

Was mache ich falsch?
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 15:19   #7
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Lisa,

"Was mache ich falsch?"
Bei der aktuellen Informationslage muss ich sagen: ich weiß es nicht.
  • Was kriegst du als Reaktion? Die Messagebox? Das würde dafür sprechen, dass im Feld "tage_diff" nichts drin steht.
  • Eine andere Fehlermeldung? Wie ist der Wortlaut?
  • Bist du dir übrigens sicher, dass du das Feld "tage_diff" auslesen willst und genau in dieses Feld das Ergebnis der Berechnung zurückschreiben willst? Oder willst du vielleicht ein anderes Feld auslesen?
  • In den vorherigen Beiträgen hast du mit Inhaltssteuerelementen hantiert, jetzt mit Formularfeldern aus Vorversionen. Ist das Absicht?
  • Wie ist sysdate deklariert und welchen Wert hat es aktuell?
  • Wie ist TERMIN deklariert und welchen Wert hat es aktuell?

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 15:51   #8
Lisa-Asil
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

ja, ich bekomme die MsgBox zurück.

Sysdat ist als Date deklariert, enthält also den heutigen Tag. Der TERMIN stammt aus dem Feld davor, ich definiere ihn mit TERMIN = s(86).

Wie gesagt, die Berechnung klappt ja, wenn ich einen Wert in TERMIN habe, es kann aber sein, dass das Feld leer ist, dann soll das Makro aber einfach weiterlaufen.
Code:

ActiveDocument.FormFields("TAGE_DIFF").Result = DateDiff("d", Sysdate, TERMIN)
Probiere ich es so,
Code:

 If Len(ActiveDocument.FormFields("termin").Result) > 0 Then
 ActiveDocument.FormFields("tage_diff").Result = DateDiff("d", Sysdate, termin)
 Else
  MsgBox "kein TERMIN vorhanden"
 End If
dann bekomme ich die Meldung, dass das Element nicht in der Sammlung enthalten ist.
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 16:48   #9
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Lisa,

dann kann es sich ja nur um das Formfield "TERMIN" handeln. Was meinst du mit "ich definiere ihn mit TERMIN = s(86)"?

Meiner Meinung nach trifft eine von drei Ursachen zu:
  • Entweder ist das Feld TERMIN nicht vorhanden,
  • oder es heißt anders, als du notiert hast,
  • oder es ist doch ein Inhaltssteuerelement statt eines alten Formularfelds. Das ist übrigens mein Tipp-Favorit, weil du doch in den Beiträgen vorher immer von einem ContentControl mit dem Tag "Termin" geschrieben hast.

Davon abgesehen: Wenn du den Else-Teil weglässt, kriegst du auch keine Meldung und das Makro fährt mit dem fort, was außerhalb der If-Verzweigung notiert ist.

Im Zweifelsfall lad doch ein Musterdokument hoch.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 17:08   #10
Lisa-Asil
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

Du liegst mit Deinem Tipp-Favorit richtig. Hier schreibe ich das Datum in das Inhaltssteuerelement (Word-Kalender):
Code:

ActiveDocument.SelectContentControlsByTag("TERMIN").Item(1).Range.Text = Trim$(s(86))
und im nächsten Feld stelle ich die Berechnung an (der ein Feld zuvor eingelesene Termin "TERMIN" - Sysdate = Differenz):
Code:

Sysdate = Date
TERMIN = s(86)
ActiveDocument.FormFields("TAGE_DIFF").Result = DateDiff("d", Sysdate, TERMIN)
Das funktioniert aber nicht, wenn in TERMIN nichts enthalten ist.

Ich hoffe, wir können auf den Zweifelsfall verzichten.

Vielen Dank für Deine Hilfe.
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2017, 17:51   #11
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Lisa,

"Ich hoffe, wir können auf den Zweifelsfall verzichten"
können wir, aber es hat zwei Nachteile: Erstens muss ich das Musterdokument zwecks Experimentieren selber erstellen, wo du doch schon eins hast.
Zweitens denke ich mir womöglich dein Dokument anders als es in Wahrheit ist und deswegen läuft das Makro wieder nicht.

ABer probieren wir es halt. Liege ich mit meinem Musterdokument richtig?

Und noch eine Frage: Hat es einen Grund, warum du beide Steuerelement-Typen mischt? Ich halte das für unzweckmäßig, aber gehen tut es schon.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2017, 11:09   #12
Lisa-Asil
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

anbei lade ich die Word-Datei (abgespeckt) hoch, nebst zwei Importdateien. Wenn Du die Datei mit_termin.txt importierst, ist alles schick, aber wenn Du die Datei ohne_termin.txt importierst kommt eine Fehlermeldung. Hier soll das Makro aber einfach weiterlaufen. Kannst Du mir helfen? Danke.

Gruß Lisa
Angehängte Dateien
Dateityp: zip termin_kalender.zip (24,4 KB, 3x aufgerufen)
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2017, 11:32   #13
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Lisa,

ich seh jetzt erst, dass ich gar kein Musterdokument hochgeladen hatte. Sorry. So konntest du meine Frage wirklich nicht beantworten.

Ich würde es so machen:
Code:

'Feld 90 SUBS_TAGE
Sysdate = Date
subs_termin = s(0)
   If IsDate(subs_termin) = True Then
        ActiveDocument.FormFields("SUBS_TAGE").Result = DateDiff("d", Sysdate, subs_termin)
        'MsgBox "Der Subs-Termin " & SUBS_TERMIN & "und das Sysdate " & Sysdate & " haben eine Differenz von Subs-Tagen " & SUBS_TAGE & "!"
        'Feld 91 TEST
        ActiveDocument.FormFields("TEST").Result = Trim$(s(1))
    Else
        ActiveDocument.FormFields("SUBS_TAGE").Result = "keine Fristangabe möglich"
    End If

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2017, 13:22   #14
Lisa-Asil
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

super!!!!! Vielen Dank, damit hast Du mir sehr geholfen. Etwas ähnliches hatte ich auch probiert, hatte wohl aber irgendeinen Fehler darin.

Kannst Du mir noch bei einer zweiten Sache helfen? Wie kann ich das Feld SUBS_TAGE neu berechnen lassen, wenn der Termin im Kalender im Feld SUBS_TERMIN geändert wird. Leider finde ich nichts wie in Access "Aktion beim Verlassen". Hast Du hier eine Idee? Im Netz bin ich auch nicht fündig geworden.
Lisa-Asil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2017, 14:28   #15
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Lisa,

du meinst, wenn das Datum von SUBS_TERMIN nachträglich händisch geändert wird? Die entsprechenden Ereignisse bei den ContentControls heißen ContentControl_OnEnter und ContentControl_OnExit. Allerdings springen die bei jedem Contentcontrol im Dokument an, egal welchen Typs.

Deshalb braucht es zwei Einschränkungen: Das Makro soll nur anspringen, wenn das Control den richtigen Tag hat, und, das Makro soll nur anspringen, wenn das Datum tatsächlich geändert wurde (und nicht, wenn einer mal zufällig rein und wieder raus klickt). Das könntest du per Messagebox lösen, mit der berühmten Frage: "Wollen Sie wirklich...???" Aber mein Vorschlag geht über die Feststellung, ob das Datum geändert wurde.

Füge dazu die beiden folgenden Prozeduren zusätzlich ein und beachte zweierlei:
  • Die Variable AusgangsDatum ist vom Typ String und muss modulweit, also an erster Position im Codefenster von ThisDocument deklariert werden.
  • Eine händische Datumsänderung wird erst festgestellt, nachdem das ContentControl wieder verlassen wurde.
Code:

Private Sub Document_ContentControlOnEnter(ByVal CC As ContentControl)

'nur aktiv werden, wenn der Tag des Controls "SUBS_TERMIN" lautet:
If CC.Tag <> "SUBS_TERMIN" Then Exit Sub 'Groß-Kleinschreibung beachten!

'aktuellen Inhalt des ContentControls erfassen
ausgangsdatum = CC.Range.Text
End Sub



Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim aktuellesDatum As String
Dim sysdate As Date

'nur aktiv werden, wenn der Tag "SUBS_TERMIN" lautet:
If CC.Tag <> "SUBS_TERMIN" Then Exit Sub

'Neuberechnung nur starten, wenn Inhalt des Contentcontrols geändert wird
If CC.Tag <> "SUBS_TERMIN" Then Exit Sub

aktuellesDatum = CC.Range.Text
sysdate = Date
If ausgangsdatum = aktuellesDatum Then Exit Sub

    ActiveDocument.FormFields("SUBS_TAGE").Result = DateDiff("d", sysdate, aktuellesDatum)
    'MsgBox "Der Subs-Termin " & SUBS_TERMIN & "und das Sysdate " & Sysdate & " haben eine Differenz von Subs-Tagen " & SUBS_TAGE & "!"
    'Feld 91 TEST
    ActiveDocument.FormFields("TEST").Result = "??"
    
End Sub
Was ich nicht weiß ist, was in dem Fall in das Formularfeld "Test" eingetragen werden soll. Aber das wirst du schon selber wissen.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.