Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro verschluckt Daten

Makro verschluckt Daten
HansP
Hallo! Ich habe ein ein Makro, das eine Excel-Datei öffnet, die Daten an 4 Word-Dateien (Textmarken) übergibt und anschließend die Word-Dateien zu einer PDF-Datei zusammenpackt. Soweit läuft alles prima. Nun kommt es vor, das ich Montags immer einen großen Schwung Excel-Dateien habe, und ich diese in deutsche und englische Word-Datenblätter übergeben muss. Also habe ich mein Makro etwas überarbeitet, so dass ich das Makro nur einmal anstoßen muss, und alle Excel-Dateien automatisch abgearbeitet werden.
Mein Problem ist nun, das ich bei dem erweiterten Makro plötzlich leere PDF-Dateien (also ohne die Excel-Daten) erhalte. Schalte ich Deutsch oder Englisch aus - alles OK. Lasse ich das Makro zweisprachig durchlaufen, habe ich in den Fehler in den Fehler nicht immer, aber wenn dann immer in dem englischen PDF. Ich habe auch schon eine Pause von 2 bzw. 5 Sekunden am Ende der Schleifen-Funktion eingefügt, um etwaige Schreib-Lese-Verzögerungen abzufangen. Hilft aber nichts.
Jemand eine Idee, was ich tun kann?

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro verschluckt Daten
22.07.2011 14:03:49
Hajo_ZI
Halo Hans,
falls Du nicht warten möchtest bis jemand auf Deinen Rechner schaut, wäre der Code nicht schlecht oder Datei.

...falls das nicht zu heftig ist! Sonst besser...
22.07.2011 14:32:34
Luc:-?
…nur relevante Code-Teile, Hans!
Gruß Luc :-?
AW: ...falls das nicht zu heftig ist! Sonst besser...
22.07.2011 15:13:27
HansP
So, dann probier ich das mal..

Private Sub Verzeichnis_Konvertieren_EN()
Dim X_Workbook As String, sPath As String
sPath = ThisWorkbook.Path
LW = ThisWorkbook.Path & "\Datenblätter\"
Dateiname = Dir(LW & "*.xlsx")
While Dateiname  ""
X_Workbook = Left(Dateiname, Len(Dateiname) - 5)
Workbooks.Open Filename:=sPath & "\Datenblätter\" & X_Workbook & ".xlsx"
Dim Quelle, Ziel
Quelle = sPath & "\Vorlagen\Vorlage_9001_en.docx"
Ziel = sPath & "\Vorlage_9001_en.docx"
Dim Quelle2, Ziel2
Quelle2 = sPath & "\Titel\Titel_9001_en.docx"
Ziel2 = sPath & "\Titel_9001_en.docx"
FileCopy Quelle, Ziel
FileCopy Quelle2, Ziel2
Dim Quelle3, Ziel3
Quelle3 = sPath & "\Titel_BA\Titel_BA_9001_en.docx"
Ziel3 = sPath & "\Titel_BA_9001_en.docx"
Dim Quelle4, Ziel4
Quelle4 = sPath & "\Titel_BAS\Titel_BAS_9001_en.docx"
Ziel4 = sPath & "\Titel_BAS_9001_en.docx"
FileCopy Quelle3, Ziel3
FileCopy Quelle4, Ziel4
Range("A1:D80").Select
Selection.Copy
Sheets.Add
ActiveWorkbook.Sheets("Tabelle1").Name = "Worktmp1"
ActiveSheet.Paste
Sheets("Worktmp1").Select
Dim myWord As Object
On Error Resume Next
Set myWord = GetObject("Word.Application.14")
If Err.Number  0 Then
Err.Clear
Set myWord = CreateObject("Word.Application.14")
myWord.Visible = True: myWord.WindowState = wdWindowStateMinimize
Else
myWord.Activate
myWord.Visible = True: myWord.WindowState = wdWindowStateMaximize
End If
Windows(X_Workbook).Activate
Sheets("Worktmp1").Select
If Worksheets("Worktmp1").Range("B24").Value = "TM_1234" Then
Worksheets("Worktmp1").Range("B24").Value = "TM_1234"
If Err.Number  0 Then
Err.Clear
Set myWord = CreateObject("Word.Application.14")
myWord.Visible = True: myWord.WindowState = wdWindowStateMinimize
Else
myWord.Activate
myWord.Visible = True: myWord.WindowState = wdWindowStateMaximize
End If
myWord.Application.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
myWord.ActiveDocument.ApplyQuickStyleSet ("Word 2003")
myWord.ActiveDocument.SaveAs Filename:=sPath & "\Datenblätter\" & "pdf.docx", FileFormat:= _
wdFormatXMLDocument
myWord.Application.Selection.InsertBreak Type:=wdSectionBreakNextPage
If myWord.ActiveWindow.View.SplitSpecial  wdPaneNone Then
myWord.ActiveWindow.Panes(2).Close
End If
If myWord.ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow.ActivePane.View. _
Type = wdOutlineView Then
myWord.ActiveWindow.ActivePane.View.Type = wdPrintView
End If
myWord.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
myWord.ActiveWindow.Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
LinkToPrevious
myWord.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
myWord.Application.Documents.Open (sPath & "\Datenblätter\" & Dateiname & "_9001" & "_T" & " _
.docx")
myWord.Application.Windows(sPath & "\Datenblätter\" & Dateiname & "_9001" & "_T" & ".docx"). _
Activate
myWord.Application.Selection.WholeStory
myWord.Application.Selection.Copy
myWord.Application.Windows("pdf.docx").Activate
myWord.Application.Selection.PasteAndFormat (wdPasteDefault)
myWord.Application.Selection.InsertBreak Type:=wdSectionBreakNextPage
myWord.Application.Documents.Open (sPath & "\Datenblätter\" & Dateiname & "_9001" & "_T_BA"  _
& ".docx")
myWord.Application.Windows(sPath & "\Datenblätter\" & Dateiname & "_9001" & "_T_BA" & ". _
docx").Activate
myWord.Application.Selection.WholeStory
myWord.Application.Selection.Copy
myWord.Application.Windows("pdf.docx").Activate
myWord.Application.Selection.PasteAndFormat (wdPasteDefault)
myWord.Application.Selection.InsertBreak Type:=wdSectionBreakNextPage
myWord.Application.Documents.Open (sPath & "\Datenblätter\" & Dateiname & "_9001" & "_T_BAS" _
& ".docx")
myWord.Application.Windows(sPath & "\Datenblätter\" & Dateiname & "_9001" & "_T_BAS" & ". _
docx").Activate
myWord.Application.Selection.WholeStory
myWord.Application.Selection.Copy
myWord.Application.Windows("pdf.docx").Activate
myWord.Application.Selection.PasteAndFormat (wdPasteDefault)
myWord.Application.Selection.InsertBreak Type:=wdSectionBreakNextPage
myWord.Application.Documents.Open (sPath & "\Datenblätter\" & Dateiname & "_9001" & ".docx") _
myWord.Application.Windows(sPath & "\Datenblätter\" & Dateiname & "_9001" & ".docx"). _
Activate
myWord.Application.Selection.WholeStory
myWord.Application.Selection.Copy
myWord.Application.Windows("pdf.docx").Activate
myWord.Application.Selection.PasteAndFormat (wdPasteDefault)
myWord.Application.ActiveWindow.ActivePane.VerticalPercentScrolled = 0
myWord.Application.Selection.HomeKey Unit:=wdStory
myWord.Application.Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
myWord.Application.Selection.Delete Unit:=wdCharacter, Count:=1
myWord.Application.Windows("pdf.docx").Activate
myWord.ActiveDocument.ApplyQuickStyleSet ("Word 2003")
myWord.ActiveDocument.ExportAsFixedFormat OutputFileName:=sPath & "\Datenblätter\" & "D" &  _
Dateiname & "_" & Dateiname2 & "_EN" & ".pdf", ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:=True, UseISO19005_1:=False
myWord.Application.Quit (True)
Set myWord = Nothing
Kill sPath & "\Datenblätter\" & "*.docx"
Kill Ziel
Kill Ziel2
Kill Ziel3
Kill Ziel4
Dateiname = Dir
Wend
End Sub

Wie gesagt, die Makros sind identisch. Der Fehler tritt bisher aber nur bei der englischen Version auf. Und auch nur dann, wenn ich automatisch das deutsche und dann das englische Makro ablaufen lasse. Dokumentiere ich Deutsch aus, kommt es zu keinem Fehler.
Anzeige
AW: Makro verschluckt Daten
23.07.2011 14:18:40
HansP
Keiner eine Idee?
On Error Resume Next
23.07.2011 15:40:53
Tino
Hallo,
als erstes würde ich On Error Resume Next mal rausmachen, evtl. kommt es irgendwo zum Fehler.
Gruß Tino
AW: On Error Resume Next
24.07.2011 01:52:36
HansP
Dokumentiere ich On Error Resume Next aus, bekomme ich eine Fehlermeldung bei Set myWord = GetObject("Word.Application.14")
Hier noch mal die passende Passage:

On Error Resume Next
Set myWord = GetObject("Word.Application.14")
If Err.Number  0 Then
Err.Clear
Set myWord = CreateObject("Word.Application.14")
myWord.Visible = True: myWord.WindowState = wdWindowStateMinimize
Else
myWord.Activate
myWord.Visible = True: myWord.WindowState = wdWindowStateMaximize

Anzeige
AW: On Error Resume Next
24.07.2011 03:41:14
Tino
Hallo,
versuche es mal ohne den Zusatz .14 .
Gruss Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige