AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

*.doc aufteilen...

Ein Thema von gordon freeman · begonnen am 9. Feb 2004 · letzter Beitrag vom 10. Feb 2004
Antwort Antwort
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#1

*.doc aufteilen...

  Alt 9. Feb 2004, 10:44
Hallo Leute,
ich habe mit Hilfe von GeorgWNewbie schon ein ganz ordentliches Makro gebastelt, dass aus einer Doc-Datei mehrere HTML-Dateien macht. Hier der Code:

Code:
Private Sub CommandButton1_Click()
a = TextBox1.Text
b = TextBox2.Text
c = 0
d = 0
markieren
End Sub


Sub markieren()
While c = 0

d = d + 1

Dim FirstPos, SecPos As Integer

FirstPos = -1
SecPos = -1

ActiveDocument.Range(0, 0).Select

Do While FirstPos = -1 Or SecPos = -1
    With Selection.Find
        .ClearFormatting
        .Font.Size = a
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    If Not Selection.Find.Found Then
     c = 1
    End If
   
    If FirstPos = -1 Then
      FirstPos = Selection.Start
    ElseIf SecPos = -1 Then
      SecPos = Selection.Start
    End If
Loop

If FirstPos <> -1 And SecPos <> -1 Then
  Selection.Start = FirstPos
  Selection.End = SecPos
End If


Selection.Cut
Documents.Add Template:="", NewTemplate:=False, DocumentType:=1
Selection.Paste


ChangeFileOpenDirectory b
    ActiveDocument.SaveAs FileName:=d + ".htm", FileFormat:=wdFormatHTML, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False
Wend

Selection.WholeStory

Selection.Cut
Documents.Add Template:="", NewTemplate:=False, DocumentType:=1
Selection.Paste


ChangeFileOpenDirectory b
    ActiveDocument.SaveAs FileName:=d + ".htm", FileFormat:=wdFormatHTML, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False

End Sub

Das Problem ist, dass ich diesen code noch nicht testen konnte, da er an folgender Stelle immer einen Laufzeitfehler ausgibt:

Code:
.ClearFormatting
        .Font.Size = a       <-- An dieser Stelle erscheint der Fehler!!!
        .Text = ""
        .Replacement.Text = ""
Wahrscheinlich werden weitere Fehler auftauchen, aber vieleicht kann mir ja einer von euch sagen, was ich an dieser Stelle falsch gemacht habe

bua, tia, cu gordon
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#2

Re: *.doc aufteilen...

  Alt 9. Feb 2004, 10:46
In Delphi wäre der Fehler, das a nicht vom Typ Integer ist sonder vom Typ String. Aber wie das in VB ist weiss ich nicht mehr. Du müsstest a folglich in einen Interger umwandeln.
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#3

Re: *.doc aufteilen...

  Alt 9. Feb 2004, 10:55
Zitat von the_master:
Du müsstest a folglich in einen Interger umwandeln.
Ich habe versucht a, bei der Deklaration von FirstPos und Secpos mit als Integer zu definieren, der Fehler bleibt aber der selbe
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: *.doc aufteilen...

  Alt 9. Feb 2004, 11:00
Versuche mal alle Variablen statt diese z.B. als Integer zu definieren diese als OleVariant zu definieren. Vielleicht klappt das ja

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#5

Re: *.doc aufteilen...

  Alt 9. Feb 2004, 11:11
Zitat von sakura:
...diese als OleVariant zu definieren.
......
Sorry Sakura, das haut 'net hin. Den Ole-Variant gibt es wohl unter VBA nicht, auf jeden Fall erkennt ihn VBA nicht als Variablen-Typ.

trotzdem Danke für die Anregung
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: *.doc aufteilen...

  Alt 9. Feb 2004, 11:27
Achso, ich hatte mich geirrt und dachte, Du willst es nach Delphi portieren Dann schreibe z.B. nur Dim FirstPos, SecPos, lasse den Typ weg und schon sind es Variants

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: *.doc aufteilen...

  Alt 9. Feb 2004, 11:36
Hi Gordon,
schreibe mal ganz oben in der ersten Zeile des Moduls "option explicit" rein.
Ab jetzt kann st du nur noch Variablen verwenden, die du auch deklariert hast. (irgendein Schreibfehler wird sonst als Variable erkannt und du kriegst es nicht mit!)

Mit:
Delphi-Quellcode:
        .ClearFormatting
        .Font.Size = a
Suchst du alle Textstellen in denen die Schriftgröße dem Inhalt von Textbox1 entspricht. Ich weiß nicht, ob das ohne ein Font funktioniert.

Versuche es mal mit:
Delphi-Quellcode:
        .ClearFormatting
        .Font.Name = "Courier New"
        .Font.Size = a
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#8

Re: *.doc aufteilen...

  Alt 9. Feb 2004, 12:07
Ha ich gemacht, doch.....

Code:
Einer der Werte, die an diese Methode oder Eigenschaft übergeben wurde, steht außerhalb des gültigen Bereiches!


Damit ist a gemeint, aber was bedeutet das jetzt


[edit] Das a Problem ist bereits gelöst...(s. code im nächsten Beitrag) [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#9

Re: *.doc aufteilen...

  Alt 10. Feb 2004, 10:17
Hier der "neue" Code:

Code:
Dim FirstPos, SecPos, a, c, d As Integer
Dim E As String

Private Sub CommandButton1_Click()
a = CInt(TextBox1.Text)
b = TextBox2.Text
c = 0
d = 0
markieren
End Sub

Sub markieren()
While c = 0

d = d + 1


FirstPos = -1
SecPos = -1

ActiveDocument.Range(0, 0).Select

Do While FirstPos = -1 Or SecPos = -1
    With Selection.Find
        .ClearFormatting
        .Font.Size = a
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    If Not Selection.Find.Found Then
     c = 1                                                                                    2)
     Exit Do
    End If
   
    If FirstPos = -1 Then
      FirstPos = Selection.Start
    ElseIf SecPos = -1 Then
      SecPos = Selection.Start
    End If
Loop

If FirstPos <> -1 And SecPos <> -1 Then
  Selection.Start = FirstPos
  Selection.End = SecPos
End If

If c = 0 Then                                                                                1)                

Selection.Cut                                                                                3)
Documents.Add Template:="", NewTemplate:=False, DocumentType:=1
Selection.Paste

E = Str(d)

ChangeFileOpenDirectory "C:\martin\HTML\"
    ActiveDocument.SaveAs FileName:=E + ".htm", FileFormat:=wdFormatHTML, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False

        ActiveWindow.Close

Else

Selection.WholeStory

Selection.Cut
Documents.Add Template:="", NewTemplate:=False, DocumentType:=1
Selection.Paste

E = Str(d)

ChangeFileOpenDirectory "C:\martin\HTML\"
    ActiveDocument.SaveAs FileName:=E + ".htm", FileFormat:=wdFormatHTML, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False

        ActiveWindow.Close

End If
Wend
End Sub
1) Der Rechner fragt an der Stelle

Code:
If c = 0 Then
2) ab, ob etwas markiert wurde. Dies soll widerum an der Stelle:

Code:
If Not Selection.Find.Found Then
     c = 1
     Exit Do
    End If
3) festgelegt werden. Allerdings übergeht der Rechner diese Abfrage und Gibt bei

Code:
Selection.Cut
eine Exception aus, da nichts markiert wurde und er somit nichts ausschneiden kann. Falls aber nichts markiert wurde sollte der Rechner eigentlich das gesamte Dokument markieren:

Code:
Else

Selection.WholeStory

Wieso tut er das nicht

bua, tia, cu gordon
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: *.doc aufteilen...

  Alt 10. Feb 2004, 11:30
Durch...
        .Wrap = wdFindContinue ... wird er immer wieder vom Start aus suchen, wenn er nichts gefunden hat.
So verhinderst du das:
        .Wrap = wdFindStop Außerdem noch das hier und es müsste funktionieren...

Delphi-Quellcode:
    If FirstPos = -1 Then
      FirstPos = Selection.Start
    ElseIf SecPos = -1 Then
      SecPos = Selection.Start
    End If
    ' Das hier verschiebt den Cursor hinter den gefundenen Text
Selection.Start = Selection.End

Nachtrag: Beim nächsten Mal den Code als Anhang, man scrollt sich ja sonst noch die Maus wund
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz