Endnoten automatisch verknüpfen

Moderator: ModerationP

Endnoten automatisch verknüpfen

Beitragvon Grambammbulli » 14. Nov 2017, 18:10

Hallo!

Ich bekomme ab und an Text- Dokumente, bei denen die Endnoten nicht mehr verknüpft sind. Sowohl im fortlaufenden Text, als auch im Block der Endnoten sind die Zahlen hochgestellt. Jede solche Zahl kommt also genau 2 mal vor.

Gibt es in WORD eine Möglichkeit, diese Endnoten automatisch (!) wieder zu verknüpfen? Das händische Vorgehen ist mir klar, aber bei mehreren Hundert Endnoten nicht praktikabel.

ODER

Kann ich mir ein Makro erstellen, das in einer Schleife die hochgestellten Zahlen sucht und dann per Hyperlink verknüpft?

Mit http://www.office-loesung.de/ftopic620300_0_0_asc.php
komme ich nicht recht weiter, da wird ein Link zum web gesetzt. Geht das auch innerhalb des Dokuments? Wie muß ich da das "Ziel" deklarieren?

Über Hilfe würde sich freuen

Grambammbulli
Grambammbulli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 14. Jan 2017, 22:00

Re: Endnoten automatisch verknüpfen

Beitragvon theoS » 14. Nov 2017, 22:50

Hast du mal versucht, die Dinger in Fußnoten zu konvertieren?
Danach wieder rückgängig machen?

Ansonsten musst du die Dinger ja suchen und den Range der Endnotentexte ja speziell behandeln.
Muss mal schauen, ob ich meinen Glossarmakro dahingehend umbauen kann.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3587
Registriert: 19. Apr 2008, 00:14

Re: Endnoten automatisch verknüpfen

Beitragvon Gast » 14. Nov 2017, 23:50

Hallo Theo,

die "Dinger" sind einfach gar nicht verknüpft, wie könnte ich sie da in Fußnoten verwandeln? Da ist einfach ein Textblock am Ende des Dolkumentes, bei dem immer mal eine Zeile mit einer hochgestellten Zahl anfängt. Das waren mal die Endnoten.

Glossarmakro? Das klingt schon mal nach der richtigen Richtung. Ist das schon irgendwo zu finden?

Schönen Abend noch

Grambammbulli
Gast
 

Re: Endnoten automatisch verknüpfen

Beitragvon MarkMH_K » 15. Nov 2017, 00:40

Hi,

habe jetzt gerade keine Zeit zum Programmieren. Deshalb nur meine 2 ct in Form meines Ansatzes.

- Da die Suche nach hochgestellten Zahlen ja nicht unterscheiden kann, ob sie auf dem ehemaligen Endnotenzeichen oder auf dem Anfang des Endnotentextes landet, müssen die Endnotentexte weg. Also in ein neues Dokument (NDoc) verschieben.*
- Man nimmt die hochgestellte Zahl am Anfang des ersten Absatzes im NDoc und sucht danach im Originaldokument (ODoc).
- Diese wird gelöscht und an ihrer Stelle wird eine Endnote eingefügt. Als Text wird der erste Absatz - ohne Nummer! - im NDoc verwendet
- Dieser Absatz wird aus dem NDoc gelöscht.
- usw. usw., bis NDoc leer ist

Am Schluß könnte man ja noch prüfen, ob weitere "Endnotenzeichen" im ODoc sind.
Außerdem würde ich jede einzelne "Endnoten"-Umwandlung manuell bestätigen lassen, weil das Makro ja nach hochgestellten Zahlen sucht, aber bei m², m³ oder sonstigen Exponenten keine echten Ednoten generieren soll.**

HTH anyway.

Markus
-------------------
* Entweder per Makro, das verlangt, daß man den Cursor auf den Beginn der Endnotentexte setzt und den Rest verschiebt, oder per Makro, das nach dem ersten Auftreten einer hochgestellten Zahl am Absatzanfang sucht und dann den Rest verschiebt — oder besser manuell.
** Daher auch der Ansatz, vom NDoc aus die real vorhandenen "Endnoten"-Nummern zu suchen.
MarkMH_K
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2485
Registriert: 17. Jul 2011, 12:45
Wohnort: Köln rrh

Re: Endnoten automatisch verknüpfen

Beitragvon MarkMH_K » 15. Nov 2017, 00:56

Hi,

beginnen könnte man ja so:
- der User verschiebt die "Endnoten"-Texte am Ende des ODoc manuell in ein NDoc
- der User markiert im ODoc das erste "Endnoten"-Zeichen
- dann ruft er ein Makro auf, das
... die Markierung löscht
... dort eine Endnote einfügt
... die den ersten Absatz im NDoc - ohne Nummer (die aus der Selection ausgelesen werden kann) - als Endnotenzeichen verwendet
... und den ersten Absatz im NDoc löscht

Um dieses Anfangsmakro herum kann man später die Schleife über die "Endnoten" stricken. Dieses Anfangsmakro muß aber das NDoc kennen. Wenn in Word anfangs nur das ODoc geöffnet ist, ist NDoc automatisch das zweite Dokument.

M.
MarkMH_K
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2485
Registriert: 17. Jul 2011, 12:45
Wohnort: Köln rrh

Re: Endnoten automatisch verknüpfen

Beitragvon theoS » 15. Nov 2017, 13:24

OK. Schau mal bitte noch was nach.
Ich kann das nämlich kaum simulieren.
Vielleicht finden wir was in dem Dok...
Mach ne Kopie davon.
Benamse die um, indem du die Dateiendung in .zip änderst.
Im Archiv findest du einen Ordner "Word" und dort drin eine xml-Datei "endnotes"
Klick Rechts drauf und schau mal, ob da Inhalt drin ist und wenn ja, ob deine Fußnoten evtl. drin stehen,
also ungefähr so ein Kauderwelsch:
Code: Alles auswählen
w:id="3"><w:p w:rsidR="00000000" w:rsidRDefault="00F24E56"><w:pPr><w:pStyle w:val="Endnotentext"/></w:pPr><w:r><w:rPr><w:rStyle w:val="Endnotenzeichen"/></w:rPr><w:endnoteRef/></w:r><w:r><w:t xml:space="preserve"> kjhhjkhjkljkl</w:t></w:r></w:p></w:endnote></w:endnotes>

Dann könnte man das vielleich nutzen.
Sonst: Wie ist das mit den Zahlen. Gibt es andere Hochgestellte im Dokument?
Und, wie sind die Endnoten aufgebaut. Generell einzeilig?
Oder auch mehrzeilige mit Absatzmarke dazwischen?

Wird interessant, die Ranges zu schnappen, die die Endnoten innehatten. :-)
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3587
Registriert: 19. Apr 2008, 00:14

Re: Endnoten automatisch verknüpfen

Beitragvon Gast » 15. Nov 2017, 13:52

Hallo!

Ich denke, es müßte auch innerhalb des Doks machbar sein, wenn man immer vom Anfang an suchen läßt, kommt IMMER zuerst der Verweis und als zweites die Endnote. m² etc. würde ich vorab durch Ersetzungen eliminieren, die ich am Ende wieder rückgängig mache.

Aber das ist denk ich zweitrangig.

Ich kenne mich mit Excel-VBA einigermaßen aus, in WORD habe ich aber bislang kaum etwas gemacht. So fehlt mir zwar nicht der Urschleim, aber wie bekomme ich konkret folgende Dinge hin:

1. Wie wird in VBA das Ziel eines Dokumenten- internen Verweises gekennzeichnet?

2. Wie muß der hyperlink auf dieses Ziel dann gesetz werden?

@Markus: "- Diese wird gelöscht und an ihrer Stelle wird eine Endnote eingefügt."
Da fehlt mir eben auch die passende Syntax, wie geht das?

Das Abarbeiten aller Endnoten in Schleifen trau ich mir dann selber zu, hoffe ich zumindest ;-)

Danke für Eure Ideen und Hilfe

Grambammbulli
P.S. Da kam soeben noch was von Theo. Muß aber grad weg, daher in Eile. Wahrscheinlich hätte ich aber sagen sollen, daß das DOC- Dokumente sind, die über OCR generiert wurden. Da brauche ich sicher nicht nach Endnoten- Relikten suchen??
Gast
 

Re: Endnoten automatisch verknüpfen

Beitragvon theoS » 15. Nov 2017, 14:47

Ach so.
Dann ist das OK.
Schau mir das heut Abend mal an, ich hab den makro nicht hier...
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3587
Registriert: 19. Apr 2008, 00:14

Re: Endnoten automatisch verknüpfen

Beitragvon MarkMH_K » 15. Nov 2017, 15:44

Hi,

aus der VBA-Hilfe (2002):
ActiveDocument.Endnotes.Add Range:=Selection.Range , Text:="The Willow Tree, (Lone Creek Press, 1996)."

HTH.

Markus
MarkMH_K
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2485
Registriert: 17. Jul 2011, 12:45
Wohnort: Köln rrh

Re: Endnoten automatisch verknüpfen

Beitragvon Gast » 15. Nov 2017, 22:15

Hallo!

Ich habe mal versucht, einen Anfang zu finden, nämlich wortwörtlich die erste hochgestellte Zahl 1 zu finden:
Code: Alles auswählen
Sub Test_finden_hochgestellt()
Dim myRange As Word.Range
Dim oFN As Endnote
Set myRange = ActiveDocument.Content
 
With myRange.Find
    .Font.Superscript = True
    .Execute FindText:="1", _
        ReplaceWith:="101", Replace:=1

  'Set oFN = .Endnotes.Add(myRange, , "1")

End With
End Sub
Das ersetzt auch brav die erste hochgestellte 1 mit der einer 101.

Im Ernstfall möchte ich aber nicht Replace anwenden, sondern Endnotes

Das auskommentierte
Set oFN = .Endnotes.Add(myRange, , "1")
geht aber nicht, da myRange.Find keine Endnotes kennt...

Wie mache ich das?

Gruß
Gast
 

Re: Endnoten automatisch verknüpfen

Beitragvon theoS » 15. Nov 2017, 22:22

so nicht.
sag mir mal: ist zuverlässig hinter dem Wort die Zahl, oder gibt es auch Ausreißer, wo ein Leerzeichen zwischen ist?
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3587
Registriert: 19. Apr 2008, 00:14

Re: Endnoten automatisch verknüpfen

Beitragvon Grambammbulli » 15. Nov 2017, 22:37

Hallo Theo,

das ist ja eine ernüchternde Antwort :? - aber sowas braucht meinereiner sicher ab und an :wink:

Momentan bin ich mir nicht sicher, ob da nicht auch Leerzeichen sein könnten. Aber das traue ich mir zu, per Suchen und Ersetzen zu prüfen und zu korrigieren. Und dann?

LG Grambammbulli
Grambammbulli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 14. Jan 2017, 22:00

Re: Endnoten automatisch verknüpfen

Beitragvon MarkMH_K » 15. Nov 2017, 23:00

Hi,

@Theo:
Vermutlich steht das "Endnoten"-Zeichen nach einem Satzzeichen, nicht nach einem Wort. Die meisten Autoren tun (jawoll) ihre Verweise ans Satzende. Soweit ich weiß, müssen nur Juristen Verweise ans auslösende Wort tun.

@Krambambuli:
- Wegen Deiner eben gezeigten Probleme hatte ich ja vorgeschlagen, daß man mit einem Makro beginnt, das Selection.Range ausliest, nachdem der User manuell nach hochgestellten Zahlen gesucht und ein zutreffendes "Endnoten"-Zeichen markiert hat.
- In Word ist das m.W. so: Wendet man die Find-Methode auf einen Range (gilt auch für Selection) an, liefert sie – wenn die Suche erfolgreich war – den Range zurück, in dem das Suchergebnis ist. Man muß diesen Ergebnis-Range aber codieren, was ich jetzt nicht auswendig kann.
- Bei der Zuweisung der echten Endnote würde ich (wie früher gezeigt) benannte Parameter verwenden. Welchen Befehl Du da Word gibst, erschließt sich mir ad hoc nicht. insbesondere ist mir nicht ganz klar, ob dann die Automatiken von Word bezüglich der Endnotennumerierung greifen können.

HTH.

Markus
MarkMH_K
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2485
Registriert: 17. Jul 2011, 12:45
Wohnort: Köln rrh

Re: Endnoten automatisch verknüpfen

Beitragvon theoS » 15. Nov 2017, 23:39

Also, wie auch immer das sein mag, wenn die Voraussetzungen halbwegs stimmen, sollte das Ding hier rennen.
Ich habe vorher händisch dafür gesorgt, dass hinter jeder hochgestellten Zahl wo das Fußnotenzeichen hin soll, ein Leerzeichen im Standardformat ist.
(suche nach ^w Zeichen Hochgestellt und ersetze durch Leerzeichen (muss man eintippen) im Standardzeichenformat)
Was ich auch noch gemacht hab, ich hab die Leerzeichen zwischen den Worten und den Hochzahlen entfernt.
Das sieht jetzt ein wenig arg betamäßig aus, aber probiers mal aus.
Ach ja, ich hab jetzt gar nicht geschaut, die "alten" Endnoten muss man vermutlich händisch löschen. (Das könnte man vllt noch erledigen wenn man dieser Zeile hier ausgeführt hat:
rngF(3, i) = Right(rngDo.Paragraphs(1).Range.Text, Len(rngDo.Paragraphs(1).Range.Text) - (Len(rngDo.Text) + 1))
dann einfach den Paragraphs(1) deleten. Oder sol

Code: Alles auswählen
Sub EndNoter()
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim rngDo As Range: Set rngDo = dd1.Content
Dim rngF() As Variant, byStp As Boolean, eM As Long, rngK As Range, miTT As Long, strHilf As String, st As String

byStp = False

    rngDo.Find.ClearFormatting
   
    With rngDo.Find.Font
        .Superscript = True
        .Subscript = False
    End With

    With rngDo.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = True
        .Execute
    End With
    Do
    If rngDo.Find.Found = True Then
    ReDim Preserve rngF(4, i)
    rngF(0, i) = rngDo.Start
    rngF(1, i) = rngDo.End
    rngF(2, i) = rngDo.Text
    strHilf = Trim(dd1.Range(rngDo.Start - 1, rngDo.Start - 1).Words(1))
    If Len(strHilf) > 1 Then
    rngF(4, i) = Left(strHilf, (Len(strHilf) - Len(Trim(rngDo.Text))))
    Else
    rngF(4, i) = strHilf
    End If
    If CLng(rngF(2, i)) = CLng(rngF(2, 0)) And i <> 0 Then
    byStp = True: miTT = i
    End If
    If byStp = True Then
    rngF(3, i) = Right(rngDo.Paragraphs(1).Range.Text, Len(rngDo.Paragraphs(1).Range.Text) - (Len(rngDo.Text) + 1))
    Else
    Set rngK = dd1.Range(dd1.Range.Start, rngDo.Start - 1)
    rngF(3, i) = rngK.Words.Count
    End If
        i = i + 1
 
    End If
rngDo.Delete
    rngDo.Find.Execute
   Loop While rngDo.Find.Found = True
  Stop
 Set rngDo = dd1.Content
    For eM = 0 To miTT - 1
    Set rngDo = dd1.Range(st, dd1.Range.End)
     rngDo.Find.ClearFormatting

      With rngDo.Find
        .Text = rngF(4, eM)
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
'        .Format = True
        .Execute
    End With
If rngDo.Find.Found = True Then
st = rngDo.End
  dd1.Endnotes.Add Range:=rngDo, Text:=Trim(rngF(3, eM + miTT))
 End If
  Next eM
   
   
End Sub
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3587
Registriert: 19. Apr 2008, 00:14

Re: Endnoten automatisch verknüpfen

Beitragvon Gast » 16. Nov 2017, 14:09

Hallo Theo,

Ganz herzlichen Dank für die Mühe schon mal. Irgendwas stimmt aber noch nicht ganz. Ich bekomme nach dem STOP- Punkt in der Zeile
Set rngDo = dd1.Range(st, dd1.Range.End)
die Fehlermeldung "Keine Artenübereinstimmung"

Du sagst, bei Dir lief es problermlos?

Ich habe einen x-beliebigen Beispieltext genommen, die Zahlen 1 bis 4 hochgestellt im Text verteilt - immer unmittelbar nach einem Wort. Und 4 Pseudo- Endnote-Texte ebenfalls mit den hochgestellten Zahlen 1 bis 4 plus Leerzeichen vorangestellt ans Dokumenten-Ende geschrieben.

Beim Abbruch sind die Zahlen alle weg. Aber das hast Du ja alles im Array gespeichert, wenn ich da im Lokal-Fenster auch etwas über die Unterbringung der Werte stutze.

Kannst Du bitte noch mal schauen? Soll ich Dir meinen Beispieltext schicken?

Danke und Viele Grüße

Udo
Gast
 

Nächste

Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste