You are not logged in.

wcf.regNote.message

Lila

Beginner

  • "Lila" started this thread

Posts: 22

  • Send private message

1

Friday, February 24th 2006, 12:10pm

Goesse aendern in einer eingebetteten Excel-Tabelle (Word)

Moin Junggs

Hab schon das ganze NEtz durchsucht und nix gefunden, da ich aber weiß, dass ich hier genug schlaue Leute finde poste ich mal mein Problem.

Und zwar habe ich ein VBA geschrieben, dass sich Daten aus einer Acess-Abfrage holt, eine Word.dot (als Vorlage) öffnet und dann die Daten in eine Excel-Tabelle, die in die *.dot eingebunden ist schreibt.

Soweit so gut, funzt alles wunderprächtig, aber dadurch, dass sich die Zeilenzahl der Excel-Tabelle an hand der Daten, die hinein müssen, generiert hat sie immer eine unterschiedliche größe.

Dies wäre ja auch nicht weiter schlimm, wenn das Word das so interpretieren würde, dass an die Excel-Tabelle einfach noch ein paar Zeilen angehängt werden und sich somit die Höhe verändert.

Die Zeilen kommen derzeit im Word an, aber der eingebette Bereich, der für das Excel vorgesehen ist bleibt von der göße her gleich.

Also ich sehe alle Zeilen richtig, nur wurde einfach die Höhe der Zeilen etwas verkleinert, damit wieder alles in dne BEreich passt.
Also die Übertragung von Original zu Word von 100% auf 97% geändert.

Leider finde ich keine VBA-FUnktion, die es mir erlaubt die Größe einfach pro angefügte Zeile um 0,51cm zu erhöhen.

Die Prozente habe ich bereits as Eigenschaft der Tabelle im VBA gefunden führen aber nicht zum gewünschten Ergebnis, wenn ich sie wieder auf 100% setze, da die Höhe dennoch gleich bleibt.

Vielen Dank für eure AUfmerksamkeit!

Benutze übrigens Word und Excel 2003

This post has been edited 2 times, last edit by "Lila" (Feb 24th 2006, 12:14pm)


Prometheus

Administrator

Posts: 3,278

  • Send private message

2

Friday, February 24th 2006, 12:39pm

Ich bin auch nicht ganz sicher aber ich glaube es gab da was von wegen countrows oder in dieser Art und damit kannst Du die Zeilenanzahl ermitteln und dann die Größe der Box anpassen.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Tec

Beginner

Posts: 45

Location: München

Occupation: Diplom-Informatiker (FH)

  • Send private message

3

Friday, February 24th 2006, 12:51pm

Schwer zu beantworten deine Frage ohne Quellcode. Solltest deinen Quellcode hier posten damit wir das nachvollziehen können.
Meine Freeware Webseite * klick *

Ich programmiere auch für Sie!

Lila

Beginner

  • "Lila" started this thread

Posts: 22

  • Send private message

4

Friday, February 24th 2006, 1:21pm

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
Private Sub schreiben(adr As String, plz As String, ort As String, refid As Long, r_nr As Long, lst_rech As Collection)
    Dim filename As String, path As String
    Dim sh As Object
    Dim summe As String
    Dim Word As Object
    Dim rst As Recordset
    Dim sqls As String
    Dim getr As String
    Dim r_adr_ref As String
    Dim Zeile As Integer
    
    Set Word = CreateObject("Word.Application")
   
   'Dateiname generieren
   filename = Left(Form_rechnung.r_jahr.Value, 1) & Right(Form_rechnung.r_jahr.Value, 1)
   Select Case r_nr
     Case Is < 10
       filename = filename & "00"
     Case Is < 100
       filename = filename & "0"
   End Select
   filename = filename & r_nr & Form_rechnung.r_kkurz.Column(1) & "_TEST.doc"
   'Pfad generieren
   path = "X:\" & Form_rechnung.r_jahr.Value & "\@CAD-GmbH\@Rechnung\Rechnungen\"

   'Application ausblenden
   Word.Visible = False
   'Neues Dokument aus Vorlage
   Word.Documents.Add "x:\2006\@Listen\Brief\rechnung.dot", False, wdNewBlankDocument, True
   'Textfeld für Empfängeradresse anwählen
   Word.ActiveDocument.Shapes(1).Select
   

   
   
   With Word.Selection
     'Schreibe Adresse in Feld
     .TypeText Form_rechnung.r_kkurz.Column(5) & Chr(10)
     If Form_rechnung.r_kkurz.Column(6) <> "" Then
        .TypeText Form_rechnung.r_kkurz.Column(6) & Chr(10)
     End If
     If Form_rechnung.r_kkurz.Column(7) <> "" Then
        .TypeText Form_rechnung.r_kkurz.Column(7) & Chr(10)
     End If
     .TypeText adr & Chr(10) & plz & " " & ort

     'Drücke 2x ESC
     .EscapeKey
     .EscapeKey

     'Drücke 'Pos1
     .HomeKey wdStory

     'gehe 4 Wörter nach rechts
     .MoveRight wdWord, 4

     'Markiere die nächsten 4 Wörter rechts von Position
     .MoveRight wdWord, 4, wdExtend

     'Schreibe richtiges Datum
     .TypeText Form_rechnung.r_date.Value

     'Gehe Zu Zeile 6
     .GoTo wdGoToLine, wdGoToAbsolute, 6

     'Gehe 6 Wörter nach rechts
     .MoveRight wdWord, 6

     'Markieren die nächsten 2 Wörter rechts von Position
     .MoveRight wdWord, 2, wdExtend

     'Schreibe Rechnungsnummer
     .TypeText "AR" & Form_rechnung.r_jahr & "-" & r_nr

     'Gehe zu Zeile 9
     .GoTo wdGoToLine, wdGoToAbsolute, 9

     'Markiere die Zeile
     .EndKey wdLine, wdExtend

     'Wenn Bestellnummer
     If Form_rechnung.r_bnr.ValidationRule <> "" Then
       'Bestellnumer schreiben und eine Zeile tiefer
       .TypeText "Ihre Bestellung:" & vbTab & vbTab & Form_rechnung.r_bnr.Value
       .GoTo wdGoToLine, wdGoToAbsolute, 10
     'Wenn keine Bestellnumer aber Bestelldatum
     ElseIf Form_rechnung.r_bnr.Value <> "" Then
       'Schreibe Bestelldatum und eine Zeile tiefer
       .TypeText "Ihre Bestellung:" & vbTab & vbTab & Form_rechnung.r_bdate.Value
       .GoTo wdGoToLine, wdGoToAbsolute, 10
     Else
       'Markierung um 1 Zeichen nach links verringeren und Backspace drücken
       .MoveLeft wdCharacter, 1, wdExtend
       .TypeBackspace
     End If

     'Wenn Angebotsnummer, dann schreiben und eine Zeile tiefer
     If Form_rechnung.r_anr.Value <> "" Then
       .TypeText "Unser Angebot:" & vbTab & vbTab & Form_rechnung.r_anr.Value
       .GoTo wdGoToLine, wdGoToAbsolute, 11
     End If

     'Wenn Lieferantennummer, dann schreiben und eine Zeile tiefer
     If Form_rechnung.r_lnr.Value <> "" Then
       .TypeText "Unsere Lieferanten-Nr.:" & vbTab & Form_rechnung.r_lnr.Value
       .GoTo wdGoToLine, wdGoToAbsolute, 12
     End If

     'Wenn Lieferantennummer, dann schreiben und eine Zeile tiefer
     If Form_rechnung.r_wart.Value <> "" Then
       .TypeText "Wartungsvertrag vom:" & vbTab & Form_rechnung.r_wart.Value
       .GoTo wdGoToLine, wdGoToAbsolute, 13
     End If

     'Exceltabelle holen
     Set sh = Word.ActiveDocument.InlineShapes(1).OLEFormat
     'mit Tabelle mache
     With sh
       'Aktivieren
       .Activate
       'mit Activesheet mache
       With .Object.ActiveSheet
         If lst_rech.Count > 3 Then
           For Zeile = 1 To lst_rech.Count - 3
                 .Rows("3:3").Insert Shift:=xlDown
           Next Zeile
         End If
         Zeile = 2
         For Each itm In lst_rech
            .Cells(Zeile, 1).Value = Zeile - 1
            .Cells(Zeile, 2).Value = itm(1)
            .Cells(Zeile, 3).Value = itm(2)
            .Cells(Zeile, 4).Value = itm(3)
            .Cells(Zeile, 5).FormulaR1C1 = "=RC[-3]*RC[-1]"
            Zeile = Zeile + 1
         Next itm
         
         .Cells(Zeile, 5).FormulaR1C1 = "=SUM(R[-" & Zeile - 2 & "]C:R[-1]C)"

         'Rechnungsbetrag auslesen
         summe = .Cells(Zeile + 2, 5).Text
       End With
     End With
     
     'Hier Tabelle anpassen

     Set sh = Nothing
     '2x ESC drücken
     .EscapeKey
     .EscapeKey

     'Pos1 drücken
     .HomeKey wdStory

     'Gehe zu Zeile 19
     .GoTo wdGoToLine, wdGoToAbsolute, 20

     'Gehe 13 Wörter nach rechts
     .MoveRight wdWord, 12

     'Markiere die nächsten 3 Wörter rechts von Position
     .MoveRight wdWord, 3, wdExtend

     'Schreibe Rechnungsbetrag
     .TypeText summe

     .GoTo wdGoToLine, wdGoToAbsolute, 21
     .MoveRight wdWord, 8
     .MoveRight wdWord, 5, wdExtend
     .MoveLeft wdCharacter, 1, wdExtend
     If Not IsNull(Form_rechnung.r_zahlung.Value) Then
        .TypeText Form_rechnung.r_zahlung.Value
     End If
   End With
'
   'Dokument speichern und schließen
   Word.ActiveDocument.SaveAs path & filename
   Word.ActiveDocument.Close
   Word.Application.Quit
 End Sub

Zeilenanzahl=erhöht sich um die einzufügenden Zeilen

Dadurch ist die Zeilenanzahl bekannt. ;)

?(Weiß vielleicht jemand, wo ich z.B. die Anzahl der anzuzeigenden Zeilen ändern kann, oder was passiert, wenn ich auf das Objekt doppelklicke und dort den Rahmen verändere? ?(

This post has been edited 4 times, last edit by "Lila" (Feb 24th 2006, 2:25pm)


Lila

Beginner

  • "Lila" started this thread

Posts: 22

  • Send private message

5

Tuesday, February 28th 2006, 3:04pm

So Problem mittlerweile gelößt.

Und zwar indem man die Excel-Tabelle aus dem Word raus in eine extra aufgemachte Excelapplication kopiert, dort füllt, die Formate anpasst, die Zeilen einrichten und dann, die Ausgangstabelle löscht und die neuen Zellen als Excelobjekt einfügt.

Also von hinten durch die Brust in's Auge, logisch oda?

Aber nächstes problem, alle Excel-Applications sind lokal definiert und werden auch alle mit dem Quit-Befehl geschlossen, nur bleibt am ende ein Excel offen, wo könnte das Problem liegen udn was kann ich dort (mit VBA) machen?

Übrigens, ich möchte nicht, wie mir in diveren Adminforen geraten wird mit der Maus oben auf das Kreuz für Fenster schließen klicken. ;)

Achja und habe mir auch shcon gedacht, alle Apllications zu killen, aber das würde auch andere Dokumente, die nicht geschlossen werden sollen schließen.

This post has been edited 6 times, last edit by "Lila" (Feb 28th 2006, 3:06pm)


wcf.user.socialbookmarks.titel