AW: Nachtrag:Exceldatei speichern unter..
20.06.2006 23:44:27
EtoPHG
Hallo Beechmartn,
Also, ich muss Dir gratulieren. Für einen Anfänger legst Du die Finger gleich auf die wunden Punkte. Ich muss zugeben ich hab einige Erfahrung in VBA (v.a. in Excel, weniger in Word). Das Makro hab ich wirklich nur schnell hingeschluddert. Am letzten Wort im letzten Satz erkennst Du vielleicht, das ich Schweizer bin. Nun das ist schon das erste Problem, wir schreiben die Kommastellen mit einem Punkt abgetrennt, statt einem Komma. Zweites Problem ich arbeite mit englischen Office-Versionen.
Dritte Schwachstelle .Words(1) ist natürlich Stumpfsinn, der Befehl liest nur das erste Wort aus der Textmarke und das sind halt die Zahlen bis zum Punkt oder Komma und nicht weiter. Fazit: Ersetze das Makro in Word mit folgendem Code, dann könnte es hinhauen.
Private Sub cbSaveToExcel_Click()
Dim Excel As Object
Dim bOpenOK As Boolean
Dim sFileName As String
sFileName = "WordRechnungen.xls" ' Name der Exceldatei
Set Excel = CreateObject("Excel.Application")
Excel.Visible = False
On Error GoTo Error_open
Excel.Workbooks.Open ThisDocument.Path & "\" & sFileName
On Error GoTo Error_other
bOpenOK = True
With Excel
' Hier werden der Reihe nach Textmarken in die entsprechenden ExcelSpalten geschrieben.
' [.Offset(1,0) bzw. nach füllen .Offset(0,0)] entspricht der ersten freien Zelle in Spalte A (von unten)
.Worksheets(1).Range("A65536").End(xlUp).Offset(1, 0).Value = Left(ThisDocument.Bookmarks("InvoiceNr").Range.Text, Len(ThisDocument.Bookmarks("InvoiceNr").Range.Text) - 2)
.Worksheets(1).Range("A65536").End(xlUp).Offset(0, 0).NumberFormat = "0"
' [.Offset(0,1)] entspricht Spalte B
.Worksheets(1).Range("A65536").End(xlUp).Offset(0, 1).Value = Left(ThisDocument.Bookmarks("NetAmount").Range.Text, Len(ThisDocument.Bookmarks("NetAmount").Range.Text) - 2)
.Worksheets(1).Range("A65536").End(xlUp).Offset(0, 1).NumberFormat = "#'##0,00 [$-407]"
' [.Offset(0,2)] entspricht Spalte C
.Worksheets(1).Range("A65536").End(xlUp).Offset(0, 2).Value = Left(ThisDocument.Bookmarks("GrossAmount").Range.Text, Len(ThisDocument.Bookmarks("GrossAmount").Range.Text) - 2)
.Worksheets(1).Range("A65536").End(xlUp).Offset(0, 2).NumberFormat = "#'##0,00 [$-407]"
' usw. z.B. [.Offset(0,10)] Spalte J
' Sichern der ExcelTabelle und Excel schliessen
.ActiveWorkbook.Close SAVECHANGES:=bOpenOK
.Quit
End With
Set Excel = Nothing
MsgBox "Rechnungdaten wurden gespeichert", vbInformation + vbOKOnly, "In EXCEL speichern"
Exit Sub
Error_open:
MsgBox "Fehler im Open:" & sFileName & " !", vbCritical + vbOKOnly, "Excel-Datei öffnen"
Set Excel = Nothing
Exit Sub
Error_other:
MsgBox "Anderer Fehler !", vbCritical + vbOKOnly, "Excel-Datei bearbeiten"
Set Excel = Nothing
Exit Sub
End Sub
Du siehst, ich habe die .Range auf den ganzen Text der Textmarke erweitert. Allerdings werden dann CRLF angehängt und mit Left...-2 wieder abgeschnitten. Die Formate der Zellen sind ebenfalls angepasst. Spiel mit diesen herum, d.h. schau in Excel, wie das Format genau lautet (Format Zelle) und setze diese als String in das Makro.
Noch ein Tipp zu den Eigenschaften [wie .Words(1)] : Im VBA-Editor mit dem Cursor auf eine solche Stelle fahren und dann F1 drücken. Da bekommst Du nicht eine Übersetzung sondern eine ausführliche Hilfe über den Befehl, die Eigenschaft oder die Methode.
Weiterhin happy VBA learning.
Gruss Hansueli