PDA

Vollständige Version anzeigen : Verweis duplizieren


C-J
12.08.2009, 12:28
Hallo zusammen,
ich habe in meinem Dokument z.B. Formeln. Jede Formel soll im Text einen Verweis auf selbige haben.

Ausgeklappt sieht mein Formelverweis so aus:
(Formel { SEQ Formelverweis \s1 })

Aber, es kommt ja schon mal vor, dass man einen Verweis auf ein und die selbe Formel, an mehreren Stellen im Text setzen möchte.
Nur geht das mit diesem Feld in seiner jetztigen Funktion gar nicht.

Ich habe jetzt auch keine Idee, wie man das möglichst simpel lösen kann ... könnte mir da bitte jemand bei weiterhelfen.
Wie macht man es denn mit Wordbordmitteln?

Bin für alle Antworten dankbar!

Gruß,
CJ

PapaSchlumpf
12.08.2009, 13:12
Hi Christoph

verwende eine Textmarke und Verweise auf diese

2cents
Christian

C-J
12.08.2009, 13:16
Hi Christian,
danke für Deine Antwort!

Ich stehe da grad nen bisschen aufm Schlauch :D

Wie meinst Du das genau?

Also, wo die Textmarke hin? und wo und WIE auf diese verweisen?

LG,
CJ

PapaSchlumpf
12.08.2009, 13:18
ok,
du fügst die TExtmarke um den Bereich ein, auf den Du verweisen willst (entweder nur die Formelnummer oder mit dem Textzuatz "Formel").

Dann fügst du einen Querverweis auf die Textmarke ein - wie auch schon in Word2000.

Genaue Ribbons kann ich nicht sagen, da ich hier kein Word2007 parat habe.

Gruß
Christian

C-J
12.08.2009, 13:30
OK,
das probier ich mal ... wenn ich dich richtig verstanden habe .. also ich hol mal ein bisschen weiter aus ..

Die Formel selbst bzw. das "Gerüst" für die Formel UND eine zugehörige Formelunterschrift mit selber Formelnummer aber eigenem Zähler (SEQ Formel), wird ber Makro generiert.

Option Explicit

Const conRest = ": "
Const conFVREF2000 = "STYLEREF ""Überschrift 1"" \n "
Const conFieldFormel = "SEQ Formel \s1"
Const conStyleFormel = "Formel"



Private Sub cmdCancel_Click()
Unload NrFormel
End Sub

Private Sub cmdOK_Click()
If optFormelLinks Or optFormelZentriert Then
Call HandleFormel

End If
Unload NrFormel
End Sub

Private Sub HandleFormel()
Dim tblT1 As Table
Dim borderTmp As Border
Dim cellTmp As Cell
Dim W As Double
Dim L As Double
Dim R As Double
Dim Bundsteg As Double
Dim RTMarg As Double
Dim intRightCell As Integer
Dim sect As Section
Dim oCl As Word.Cell

On Error GoTo bye

' Überprüft ob Eingabemarke in Tabelle steht
If Selection.Information(wdWithInTable) Then
MsgBox "Die Eingabemarke befindet sich innerhalb einer Tabelle. " _
& "Bewegen Sie sie aus der Tabelle heraus, um das Makro zu " _
& "starten.", vbInformation
GoTo bye
End If

With Selection
.InsertParagraphAfter
.Collapse (wdCollapseEnd)

On Error Resume Next
.ParagraphFormat.Style = "FormelBeschriftung"
On Error GoTo 0

W = .Sections.Last.PageSetup.PageWidth
L = .Sections.Last.PageSetup.LeftMargin
R = .Sections.Last.PageSetup.RightMargin
Bundsteg = .Sections.Last.PageSetup.Gutter
RTMarg = W - R - L - Bundsteg
If optFormelZentriert Then
Set tblT1 = .Tables.Add(Selection.Range, 2, 3)
'Formeloptionen auf Zentriert als Gruppe setzen
For Each oCl In Selection.Cells
oCl.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
Next
'ActiveDocument.OMathJc = wdOMathJcCenterGroup
Else
Set tblT1 = .Tables.Add(Selection.Range, 2, 2)
'Formeloptionen auf Links setzen
For Each oCl In Selection.Cells
oCl.Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
Next
'ActiveDocument.OMathJc = wdOMathJcLeft
End If
End With
tblT1.Select
With Selection

If optFormelZentriert Then
.Columns(1).Cells.Width = 50.4
.Columns(3).Cells.Width = 50.4
.Columns(2).Cells.Width = RTMarg - 100.8
intRightCell = 3
For Each oCl In Selection.Cells
oCl.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
Next
Else
.Columns(2).Cells.Width = 50.4
.Columns(1).Cells.Width = RTMarg - 50.4
intRightCell = 2
For Each oCl In Selection.Cells
oCl.Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
Next

End If

.Rows(1).Select
For Each borderTmp In Selection.Borders
borderTmp.LineStyle = wdLineStyleNone
Next
.Borders.shadow = False
.ParagraphFormat.Alignment = wdAlignParagraphRight
.Rows(1).Select
For Each cellTmp In .Cells
cellTmp.VerticalAlignment = wdCellAlignVerticalCenter
Next
End With
tblT1.Select
With Selection
.Rows(2).Select
'.Rows(2).Cells(intRightCell).Select
.Cells.Merge
EinfügenFormelNummmer
End With
tblT1.Select
With Selection
.Rows(1).Select
.Cells(intRightCell - 1).Select
If optFormelZentriert Then
.ParagraphFormat.Alignment = wdAlignParagraphCenter
Else
.ParagraphFormat.Alignment = wdAlignParagraphLeft
'.OMaths(1).ParentOMath.type = wdOMathInline
End If
On Error GoTo err_
End With

WordBasic.ShowTableGridlines

'Zuweisung der Formatvorlage
On Error GoTo errFormel
Selection.Style = ActiveDocument.Styles(conStyleFormel)
errFormel:

Selection.MoveLeft Unit:=wdCharacter, count:=1, Extend:=wdExtend

WordBasic.EquationEdit
If optFormelLinks Then
Selection.OMaths(1).ParentOMath.type = wdOMathInline
End If
bye:
Unload NrFormel
Exit Sub

err_:
MsgBox Err.Number & " - " & Err.Description
Resume Next
End Sub

Sub EinfügenFormelNummmer()
Dim strTmp As String
Dim bTmp As Boolean
Dim cap As CaptionLabel
Dim intStelle As Integer

With Selection

.TypeText Text:=""

intStelle = InStr(Application.Version, ".")
Select Case CInt(Left(Application.Version, intStelle - 1))
Case 8
' .Fields.Add Range:=.Range, Type:=wdFieldEmpty, Text:= _
' conFVREF, PreserveFormatting:=True
Case Else
'.Fields.Add Range:=.Range, type:=wdFieldEmpty, Text:= _
' conFVREF2000, PreserveFormatting:=True
End Select

.EndKey Unit:=wdLine
.TypeText Text:="Formel: "

strTmp = conFieldFormel


.Fields.Add Range:=.Range, type:=wdFieldEmpty, Text:= _
strTmp, PreserveFormatting:=True
'.TypeText Text:=conRestFormel

End With
End Sub



Private Sub DeactivateBeschriftung()
' lblPrefix.visible = False
' txtBeschriftung.visible = False
End Sub

Private Sub ActivateBeschriftung()
' lblPrefix.visible = True
' txtBeschriftung.visible = True
End Sub

Private Sub optFormelLinks_Click()
Call DeactivateBeschriftung
End Sub

Private Sub optFormelZentriert_Click()
Call DeactivateBeschriftung
End Sub

Wenn ich jetzt in diesen Code mit einbaue, dass eine Textmarke bei der Formelunterschrift gesetzt wird ... geht das? Oder Würde dann immer auf die selbe Formel verwiesen?

Ich probier das erst mal aus, was Du geschrieben hast :) so ganz hab ich es nämlich immer noch nicht verstanden. Aber ich habe auch in meinem ganzen Leben noch nie mit Querverweisen in Word zu tun gehabt :)

LG,
CJ

PapaSchlumpf
12.08.2009, 13:38
Hi

Du musst natürlich eine Eineindeutige Textmarke verwenden, z.B.
Formel & SEQ-Feld-Inhalt

Ansonsten bräuchte ich die Userform, um mit dem Code was anfangen zu können.

Gruß
Christian

C-J
12.08.2009, 13:45
Das scheint dann aber mit viel Handarbeit verbunden zu sein (bei vielen Formeln), werde es aber ausprobieren ..

Wenn Du willst schick ich Dir mal die ganze DOT :D dann kannste dir ja mal ansehen, was ich da bisher so gebastelt habe .. aber mir fällt grad ein, es ist eine DOTM die ist mit Custom Ribbon .. das geht wohl nur in 2007 :(

LG,
CJ

PapaSchlumpf
12.08.2009, 13:49
Word2007 habe ich sowohl auf meinem anderen REchner als auch in einer VM.

Gruß
Christian

C-J
12.08.2009, 14:11
Ja OK, jetzt unabhängig von meinem derzeitigen Probelm .. bei Interesse schicke ich sie dir gerne zu :)

Ich brauche dann nur eine Adresse und einen Betreff :D

LG,
CJ