Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Kalendermonate per Makro drucken





Frage

Hallo zusammen, ich habe in Excel einen Kalender erstellt, bei dem ich per Kombinationsfeld einen Monat auswähle. Daraufhin soll der entsprechende Monat ausgedruckt werden und zwar nur der eine Monat. Bei dem Monat soll am besten vorher erst der Druckbereich festgelegt werden und sobald eben ein Monat angewählt wird, soll der entsprechende Monat gedruckt werden. Optimal wäre es, wenn der Cursor zum 1. des angewählten Monats springt. Wer kann mir Tipps geben, wie ich das ganze bewerkstelligen kann ? Vielen Dank CK1976

Antwort 1 von Guenter

Hallo,

um ein konkretes Makro zu schreiben, sind m.E. die Angaben etwas dünn.
Aber Du kannst doch versuchen, mit der Makroaufzeichnung zu arbeiten.
Wenn das nicht funktioniert, dann nochmals im Detail das Problem schildern.

Gruß
GÜnter

Antwort 2 von CK1976

Ist eine Möglichkeit. Gut, ich habe das Makro geschrieben, für jeden Monat ein einzelnes, da jeder Monat ja einen eigenen Druckbereich hat. Wie kann ich nun das Makro, den jeweiligen Monaten im Kombinationsfeld zuweisen ?

Antwort 3 von Guenter

Hallo,

sowas ähnliches könnte funktionieren:


Sub test()
If ActiveCell = Cells(4, 1) Then Call Januar
If ActiveCell = Cells(5, 1) Then Call Februar
If ActiveCell = Cells(6, 1) Then Call Maerz
' und so weiter
End Sub



Nach dem Aufruf im Kombinationsfeld wird die entsprechende Zelle aktiviert und das Makro ausgelöst.

Gruß
Günter


Antwort 4 von CK1976

Ich dank dir schon mal fürs erste. Was muß ich denn für "Cells(4, 1)" schreiben bzw. wofür steht die 4 und die 1, für Spalte und Zeile ? Ich habe das Kombinationsfeld jetzt mit L6 verknüpft. Es fängt an mit Dez2003, Jan2004, Feb2004. Sprich bei Dez2003, steht ne 1 in L6 und so weiter und so fort. Wie gehts nun weiter ? Vielen lieben Dank schon mal

Antwort 5 von Guenter

Hallo,

also, wenn Du im Kombinationsfeld den Monat auswählst, dann erfolgt die Zuweisung einer Zahl in L6? Ist das so gemeint?
Dann muss das Makro geändert werden:


Sub test()
If Cells(6, 12).Value = 1 Then Call Januar
If Cells(6, 12).Value = 2 Then Call Februar
' und so weiter
End Sub


Bei Cells ist erster Wert Reihe, zweiter Wert Spalte. Bitte nochmals überprüfen, ist konnte nicht testen.

Jetzt läuft das so ab: Du wählst im Kombinationsfeld Deinen Monat, die Zahl wird in L6 eingetragen und dann startest Du Dein Makro.

Gruß
Günter

Antwort 6 von CK1976

Das haut noch nicht richtig hin, zumindest druckt er nicht den jeweiligen Monat. Wenn ich die Makros einzeln aufrufe, funktionierts, aber nicht in Verbindung mit dem Kombinationsfeld. Hab jetzt mal was anderes ausprobiert...

Dim a, b As Integer
If ActiveCell = Cells(6, 12).Value = 1 Then
a = 7
b = 43
End If
und so weiter und so fort und am Ende steht dann
Range("A&a:R&b").Select
ActiveSheet.PageSetup.PrintArea="$A$&a:$R$&b"
ActiveWindow.SelectedSheets.PrintOutCopies:=1, Collate:=True

Allerdings zeigt er mir bei dem Range Befehl immer einen Fehler an, wenn ich versuche das Makro zu starten. Müssen die Anführungsstriche anders gesetzt werden. Hab schon mehrere Möglichkeiten versucht, bisher immer ohne Erfolg. Was mache ich falsch ?

Antwort 7 von Guenter

Hallo,

in der Zeile

If ActiveCell = Cells(6, 12).Value = 1 Then


sollte man etwas wegnehmen!

In der If-Abfrage weist Du den Variablen a und b die Werte zu.
Wenn die If-Abfrage nicht durchlaufen wird, besitzen a und b den Wert 0, somit kann die Range-Angabe nicht ausgeführt werden.

Wenn ich mit Range einen Bereich selektieren will verwende ich diese Konstruktion:


Range(Cells(1,a),Cells(18,b)).Select


Bitte nochmals den Bereich prüfen, ob es stimmt.

Ansonsten habe ich gesehen, das bei der Auswahl im Kombinationsfeld ein ListIndex vergeben wird. Mit dem kannst Du auch ein Programm aufrufen:


If ListIndex = 1 Then Call Januar


Aber das ist ein anderes Thema.

Viel Spaß
Günter


Antwort 8 von CK1976

Jetzt komme ich ganz durcheinander. Tut mir leid, wenn ich dich damit schon nerven sollte, aber ich kenn mich mit der Makro-Programmierung leider nicht so gut aus.

Also die Ausgabe aus dem Kombinationsfeld erfolgt in L6. Die Monate gehen von Dezember 2003 (1) bis Dezember 2004 (13).

Das Makro sieht bei mir jetzt folgendermaßen aus:
Sub Druck()
'
' Druck Makro
' Makro am 25.11.2003 von CK1976 aufgezeichnet
Dim a, b As Integer
'
If ActiveCell = Cells(6, 12).Value = 1 Then
a = 7
b = 43
End If
If ActiveCell = Cells(6, 12).Value = 2 Then
a = 40
b = 70
End If
If ActiveCell = Cells(6, 12).Value = 3 Then
a = 71
b = 99
End If
If ActiveCell = Cells(6, 12).Value = 4 Then
a = 100
b = 130
End If
If ActiveCell = Cells(6, 12).Value = 5 Then
a = 131
b = 160
End If
If ActiveCell = Cells(6, 12).Value = 6 Then
a = 161
b = 191
End If
If ActiveCell = Cells(6, 12).Value = 7 Then
a = 192
b = 221
End If
If ActiveCell = Cells(6, 12).Value = 8 Then
a = 222
b = 252
End If
If ActiveCell = Cells(6, 12).Value = 9 Then
a = 253
b = 283
End If
If ActiveCell = Cells(6, 12).Value = 10 Then
a = 284
b = 313
End If
If ActiveCell = Cells(6, 12).Value = 11 Then
a = 314
b = 344
End If
If ActiveCell = Cells(6, 12).Value = 12 Then
a = 345
b = 374
End If
If ActiveCell = Cells(6, 12).Value = 13 Then
a = 375
b = 407
End If
Range(Cells(1,a),Cells(18,b)).Select
ActiveSheet.PageSetup.PrintArea = "$A$&a:$R$&b"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

End Sub

A und B sind jeweils die Zeilen mit dem Monatsanfang (a) bzw. Monatsende (b)

Beim Aufrufen des Makros zeigt er mir folgende Fehlermeldung an
*Laufzeitfehler '1004':
Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen*

Dachte, daß es daran liegen könnte, das die Zellen geschützt sind, aber ich habe selbst den Schutz rausgenommen und die Meldung bleibt.

Was mache ich falsch bzw. wo liegt der Fehler ?
Ich dank dir schon mal sehr im voraus für deine ganze Mühe, Günter

Lieben Gruß
CK1976

Antwort 9 von CK1976

Ideal wäre es, wenn das Programm, nach Aufruf des jeweiligen Monats, nicht nur den Monat ausdruckt, sondern auch sofort an den jeweiligen Monatsanfang springt. Wie könnte ich das bewerkstelligen ? Dann habe ich endlich fertig...

Antwort 10 von Guenter

Hallo,

das Problem mit der Fehlermeldung liegt wahrscheinlich daran, dass die Werte a und b nicht definiert sind, wie ich oben geschrieben habe.

Man kann natürlich auch an den Monatanfang springen. Vielleicht geht das alles besser mit ListIndex. Wenn ein Monat aus dem Kombinationsfeld ausgewählt wird, erhält man einen ListIndex (geht von 0 bis Anzahl -1). Den Wert kannst Du dann in einer If-Anfrage verwenden (Select case würde auch gehen). Ich kann im Augenblick nur auf die Excel VBA-Hilfe verweisen.

Ich werde heute nachmittag keine Zeit haben, aber morgen vormittag wieder. Falls bis morgen nichts geht, kannst Du dich morgen vormittag nochmals im Forum melden. Dann wird es eine Lösung geben.

Gruß
Güntr


Antwort 11 von nighty

hi alle :)

fehlerhafte variante range

Range("A&a:R&b").Select

sollte vielleicht so aussehen

Range("A" & a ":" & "R" & b).Select
A=spalte
a=num
R=spalte
b=num

oder so

Range(A & a ":" & R & b).Select
A=string
a=num
R=string
b=num

wobei asc(string) wie chr$(asci) auch sehr von vorteil sein kann.

gruss nighty





Antwort 12 von CK1976

Haut auch nicht hin, bin langsam am Verzweifeln :-(Habe das Makro ja oben aufgelistet.) Was muß ich genau beim Range-Befehl eingeben ? Welche Infos braucht ihr noch ?

@Günter: Du schreibst, daß a und b definiert werden müssen. Die haben doch genaue Werte.

Und zu dir Nighty: Das haut leider auch nicht hin mit deiner Funktion. Bitte Bitte helft mir, sonst war die ganze Mühe umsonst. Danke euch

Antwort 13 von CK1976

Bin schon mal einen kleinen Schritt weiter und zwar markiert er mir jetzt die jeweiligen Monate schon mal, aber beim Drucken haperts noch.

Sub Druck()
'
' Druck Makro
' Makro am 25.11.2003 von CK1976 aufgezeichnet
Dim a, b, c, d As Long
Dim wert As Integer
wert = Range("L6").Value

Select Case wert

Case Is = 1
a = 9
b = 1
c = 43
d = 18

Case Is = 2
a = 40
b = 1
c = 70
d = 18

Case Is = 3
a = 71
b = 1
c = 99
d = 18

Case Is = 4
a = 100
b = 1
c = 130
d = 18

Case Is = 5
a = 131
b = 1
c = 160
d = 18

Case Is = 6
a = 161
b = 1
c = 191
d = 18

Case Is = 7
a = 192
b = 1
c = 221
d = 18

Case Is = 8
a = 222
b = 1
c = 252
d = 18

Case Is = 9
a = 253
b = 1
c = 283
d = 18

Case Is = 10
a = 284
b = 1
c = 313
d = 18

Case Is = 11
a = 314
b = 1
c = 344
d = 18

Case Is = 12
a = 345
b = 1
c = 374
d = 18

Case Is = 13
a = 375
b = 1
c = 407
d = 18

End Select
Range(Cells(a, b), Cells(c, d)).Select

' Hierbei schreibt er mir immer eine Fehlermeldung:
ActiveSheet.PageSetup.PrintArea = "$b$a:$d$c"

' Und so gehts dann weiter
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

End Sub


Dort wo ich die Fehlermeldung bekomme, soll er ja den Druckbereich markieren. Wenn ich das Makro alleine stehen hab, steht da
ActiveSheet.PageSetup.PrintArea = "$A$9:$R$43"

Habe dann die Variablen eingesetzt, es erscheint ne Fehlermeldung :-(

Antwort 14 von Guenter

Hallo,

was ich gemeint habe ist, wenn in Cells(6,12) nichts steht oder keine Zahl zwischen 1 und 13 steht, dann kommt die Fehlermeldung in der Zeile Range(Cells(... , weil ja a und b nicht festgelegt werden können.

Dann hast Du in den If-Anfrage zweimal =. Das geht nicht. Dann hast Du in der PrintArea noch einen Fehler.

Du hast doch gesagt, dass Du für jeden Monat ein Makro hast, das funktioniert??
Dann kannst Du folgendes machen:


Private Sub ComboBox1_Change()
If ComboBox1.listindex = 0 Then Call januar
If ComboBox1.listindex = 1 Then Call februar
If ComboBox1.listindex = 2 Then Call Maerz
If ComboBox1.listindex = 3 Then Call April
'usw
End Sub


Fall Du Deinem Kombinationsfeld einen anderen Namen gegeben hast, disen entsprechend ändern.

Du kannst auch Deine e-mail angeben, dann schicke ich Dir das Beispiel-Makro zu.


Gruß
Günter

Antwort 15 von Guenter

Hallo,

jetzt war ich etwas zu spät.

Ich hatte oben geschrieben, dass dort noch ein Fehler ist.

Da Du nur die Markierung drucken willst, sollte es so gehen:

Selection.PrintOut Copies:=1, Collate:=True


Du kannst nochmals ein Makro aufzeichnen, indem nur die MArkierung gedruckt wird.

Gruß
Günter

Antwort 16 von CK1976

Meine E-Mail lautet ck1@gmx.li

Ich dank dir. Funktionieren tut es immer noch nicht. Hoffe, das ich aus deiner Beispieldatei schlau werde. Ich dank dir schon mal

Antwort 17 von Guenter

Hallo,

die Beispieltabelle ist unterwegs.

Gruß
Günter

Antwort 18 von CK1976

Hallo Günter,

hab dir auch mal was geschickt. Danke schon mal

Gruß
CK1976

Antwort 19 von Guenter

Hallo,

jetzt sollte es funktonieren.
Tabelle ist unterwegs

Gruß
Günter

Antwort 20 von CK1976

Scheint zu klappen, aber was hast du genau gemacht. Am Makro selbst hat sich ja nix geändert. Hast nur ein anderes Dialogfeld genommen, oder ? Mit welchen Daten (Monaten) und welches Makro hast du damit verknüpft ? Jetzt druckt er aber wenn ich Dezember 2003 auswähle den Januar 2004.

Antwort 21 von Guenter

Hallo,

kleiner Fehler von mir.
So ist das Makro richtig:

Private Sub ComboBox2_Change()
If ComboBox2.ListIndex = 0 Then Call Dez2003
If ComboBox2.ListIndex = 1 Then Call Jan2004
If ComboBox2.ListIndex = 2 Then Call Feb2004
If ComboBox2.ListIndex = 3 Then Call Mar2004
If ComboBox2.ListIndex = 4 Then Call Apr2004
If ComboBox2.ListIndex = 5 Then Call Mai2004
If ComboBox2.ListIndex = 6 Then Call Jun2004
If ComboBox2.ListIndex = 7 Then Call Jul2004
If ComboBox2.ListIndex = 8 Then Call Aug2004
If ComboBox2.ListIndex = 9 Then Call Sep2004
If ComboBox2.ListIndex = 10 Then Call Okt2004
If ComboBox2.ListIndex = 11 Then Call Nov2004
If ComboBox2.ListIndex = 12 Then Call Dez2004
End Sub


Weist Du, wo das eingegeben wird???

Gruß
Günter

Antwort 22 von CK1976

Private Sub ComboBox2_Change()
If ComboBox2.ListIndex = 0 Then Call Dez2003
If ComboBox2.ListIndex = 1 Then Call Jan2004
If ComboBox2.ListIndex = 2 Then Call Feb2004
If ComboBox2.ListIndex = 3 Then Call Mar2004
If ComboBox2.ListIndex = 4 Then Call Apr2004
If ComboBox2.ListIndex = 5 Then Call Mai2004
If ComboBox2.ListIndex = 6 Then Call Jun2004
If ComboBox2.ListIndex = 7 Then Call Jul2004
If ComboBox2.ListIndex = 8 Then Call Aug2004
If ComboBox2.ListIndex = 9 Then Call Sep2004
If ComboBox2.ListIndex = 10 Then Call Okt2004
If ComboBox2.ListIndex = 11 Then Call Nov2004
If ComboBox2.ListIndex = 12 Then Call Dez2004
End Sub

steht jetzt so drin und trotzdem druckt er mir bei Dezember 2003, den Januar 2004 aus ....

Antwort 23 von CK1976

Hab es dir nochmal geschickt. Dank dir

Antwort 24 von Guenter

Hallo,

es stand an der falschen Stelle.
Ist wieder unterwegs.

Gruß
GÜnter

Antwort 25 von CK1976

DANKE
DANKE
Und nochmal DANKE

Verrate mir nur noch ein letztes Mal, wo das Makro geblieben ist, daß die einzelnen Monate aufruft und wie bzw. womit hast du die ComboBox verknüpft ?

Ich weiß zwar nicht, was du gemacht hast, aber es funktioniert.

Vielleicht kannst du mir das etwas näher beschreiben, was du gemacht hast, für die kommenden Jahre.

Nun bist du mich endlich los. Vielen lieben Dank nochmal....

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: