Excel Druckbereich über VBA Anfänger braucht hilfe

Moderator: ModerationP

Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon vollchaos1 » 07. Feb 2018, 13:54

Hallo,

ich habe eine Rechnung, und möchte einen Ausdruck für den Kunden und einen anderen Ausduck für mich.
Bei dem Kunden sollen z.B. leere Zeilen nicht erscheinen. Dann sind noch zwei Spalten die auch nicht erscheinen dürfen. Dies möchte ich gerne über einen Button erreichen. Wenn ich auf Kunde drucken gehe, soll eben die abgeänderte Rechnung gedruckt werden.

Da ich ein Anfänger in Sachen VBA bin, brauche ich Hilfe.
vollchaos1
 

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon 1Matthias » 08. Feb 2018, 13:18

Moin!
Wobei brauchst du den genau Hilfe?
Mit der Eigenschaft .Hidden = True kannst du sowohl Zeilen als auch Spalten ausblenden.
Und für die leeren Zeilen müsste man mal den Blattaufbau kennen. Da es eine Rechnung ist, sind da bestimmt auch leere Zeilen auf Grund des Layouts vorhanden die nicht raussolten. Für den betreffenden Bereich würde sich da eine Schleife darüber anbieten, wo man prüft und dann ggf. ausblendet.
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 522
Registriert: 15. Aug 2017, 18:36

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon vollchaos1 » 09. Feb 2018, 15:08

Hallo
es ist so dass ich in der Spalte E15 bis E 47 Zahlen stehen habe, und in G18 bis G 46. Diese dürfen nicht mit gedruckt werden, wenn ich für den Kunden ausdrucke.
Wenn ich den Button Büro nehme, soll alles gedruckt werden.
Ich habe ein VBA für Kunden, dass mir auch die leeren Zeilen nicht gedruckt werden. Wenn es leichter ist, kann ich das Arbeitsblatt auch schicken.

VG
vollchaos1
 

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon 1Matthias » 09. Feb 2018, 19:48

Moin!
Am besten wäre eine Datei hochzuladen und den Bereich zu markieren, welcher nicht gedruckt werden soll bzw. welcher Bereich insg. gedruckt werden sollte.
Zu dem Nichtdrucken noch eine Frage. Sollen die Zeilen ausgeblendet werden (mit allen möglichen Layoutproblemen)? Auf die schnelle wäre sonst das einfachste, wenn du in dem Bereich die Farbe des Inhaltes auf weiß setzt. Das ändert nichts am Layout und man sieht es nicht. Zudem ist es einfach wieder zurück zu setzen.
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 522
Registriert: 15. Aug 2017, 18:36

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon vollchaos » 09. Feb 2018, 20:06

Hallo 1Matthias,

entschuldige, aber du brauchst dir den Kopf nicht zerbrechen. Bin heute auf große Probleme gestoßen, die ich erst einmal weg bringen muss. Ich würde mich wieder melden wenn ich soweit bin, dass ich nicht mehr weiter komme.

Aber trotzdem danke schön

VG

Ps: es sind alle drei Mappen nötig zum Betrieb.
TestRechnung.xlsm
,
Re-Vorlage.xlsm
,
Sp-Vorlage.xlsm
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Never give up
vollchaos
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Feb 2018, 13:41

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon 1Matthias » 12. Feb 2018, 11:21

Moin!
Probiere es mal so. Der Code blendet die leeren Zeilen aus, setzt die Farbe auf weiß, druckt und macht alles wieder rückgängig. Dann hasst du den Ausdruck wie gewollt und die Datei noch im Ursprung. Ggf. muss man noch was am Format ändern.
Code: Alles auswählen
Dim zeile As Long
Dim ende As Long
Application.ScreenUpdating = False
ende = Worksheets("Rechnung").Cells(Rows.Count, 1).End(xlUp).Row - 1

For zeile = ende To 18 Step -1
    If Worksheets("Rechnung").Cells(zeile, 4) = "" Then Worksheets("Rechnung").Rows(zeile).Hidden = True
Next

Worksheets("Rechnung").Range(Worksheets("Rechnung").Cells(17, 4), Worksheets("Rechnung").Cells(ende, 7)).Font.ColorIndex = 2

Worksheets("Rechnung").PrintOut
Worksheets("Rechnung").Range(Worksheets("Rechnung").Cells(17, 4), Worksheets("Rechnung").Cells(ende, 7)).Font.ColorIndex = 0
Worksheets("Rechnung").Rows("17:" & ende).Hidden = False

Application.ScreenUpdating = True

VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 522
Registriert: 15. Aug 2017, 18:36

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon vollchaos » 12. Feb 2018, 12:38

Hallo 1Matthias

im großen und ganzen passt es. Nur ist es ja so, das ich einen Stellplatz Beleg erstelle, dann wenn der Kunde abreist erstelle ich die Rechnung, und da sitzt nämlich mein Problem. Die Abschlussrechnung, ist noch so wie die alte.
Wenn ich am Anfang die Rechnung ausdrucken würde wäre es in Ordnung.

Ich bräuchte diesen Code für die Endrechnung, ist das möglich?


VG
Never give up
vollchaos
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Feb 2018, 13:41

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon 1Matthias » 12. Feb 2018, 15:49

Kannst du das nochmal erklären!? Blicke grad nicht wirklich durch. Bei deinen 3 Anhängen waren die doch auch alle gleich.
Ich dachte du trägst in der Rechnung die Werte ein, gehst auf drucken und für den Kunden kommt nur die zusammengestellte Rechnung. Für dich bleibt die Originaldatei zurück, falls du was ändern musst, willst. Wo bzw. was ist den die Abschlußrechnung?
Am besten nochmal Schritt für Schritt erklären, was du machst und was am Ende der Code erstellen soll (in Bezug auf die Dateien würde reichen, das zusammenfügen habe ich begriffen).
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 522
Registriert: 15. Aug 2017, 18:36

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon vollchaos » 12. Feb 2018, 19:41

Hallo 1Matthias,

Die Testrechnung ist die Arbeitsmappe, in der alles eingetragen wird.
Die anderen zwei Dateien sind nur vorlagen, die in einem Ordner liegen.

So der erste Schritt ist, dass ich alle Daten in der Testrechnung eintrage. Dann gehe ich auf "als Stellplatz speichern".
Wenn dann Abreise ist, gehe ich auf Stellplatz Belege, wähle den Kunden aus und gehe auf Rechnung speichern.
Diese Rechnung sollte dann so aussehen, wie Du den Code geschrieben hast.

Ich habe auch schon einiges versucht, aber da komm ich einfach nicht weiter.

VG
Never give up
vollchaos
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Feb 2018, 13:41

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon 1Matthias » 13. Feb 2018, 14:37

Moin!
Muss nochmal was nachfragen?
Der Code soll in die Sub hier Sub cmdAlsReSp_Click() eingefügt werden, so dass beim Speichern, die Datei dann "komprimiert" darsteht? Soll da auch die Codezeile mit dem Drucken drin sein? Und Der Text in Spalte D bis F ist ja nur ausgeblendet bzw. mit Schriftfarbe weiß. Soll das so bleiben oder der Inhalt gelöscht werden? (kommt drauf an, ob man die Daten später noch braucht)
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 522
Registriert: 15. Aug 2017, 18:36

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon vollchaos » 13. Feb 2018, 19:32

Hallo 1Matthias,

ich müsste dies erst versuchen. Wenn es kein zu großer Aufwand für dich ist könntest du es mit rein machen. Das mit der Farbe bitte so lassen, da ich tatsächlich die Rechnung danach noch brauche.
Denn für das Büro muss ich die Konten-nummern hinten mit ausdrucken. Das bedeutet, ich habe zwei Rechnungen eine für den Gast und eine für das Büro.

VG
Never give up
vollchaos
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Feb 2018, 13:41

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon 1Matthias » 13. Feb 2018, 20:43

Moin!
Also hier mal der angepasste Code der Sub. Konnte es aber nicht testen, das ich ja den Aufbau von dir nicht habe. Auf Grund des Code bin ich davon ausgegangen, dass mappSp deine zu speichernde Mappe ist. In der kürze ich dann alles zusammen. DAs einfach mal an einer Testdatei überprüfen.
Code: Alles auswählen
Private Sub cmdAlsReSp_Click()
Dim mappeVorlage   As Workbook
Dim mappeRe        As Workbook
Dim mappeSp        As Workbook
Dim strDateiName   As String
Dim Bereich        As Range
Dim Zeile          As Long
Dim strName        As String
Dim ReNummer As Long
Dim strText  As String
Dim Antwort
Dim ende As Long

    Set mappeVorlage = ActiveWorkbook
    ReNummer = Worksheets("Daten").Range("K1")

    If Me.ListBox1.ListIndex < 0 Then
        MsgBox "Bitte einen Eintag wählen"
        Exit Sub
    End If
    strText = "Soll der Beleg:" & vbCrLf & Me.ListBox1.List(Me.ListBox1.ListIndex, 0) & vbCrLf
    strText = strText & "als Rechnung mit der Rechnungsnr:" & vbCrLf & ReNummer & vbCrLf & "gespeichert werden?"
    Antwort = MsgBox(strText, vbYesNo, "Rechnung speichern")
    If Antwort <> vbYes Then Exit Sub

'--- Daten aus den Stellplatzbeleg als Rechnung speichern
    strName = ActiveWorkbook.Path & "\SpSpeicher\" & Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
    strDateiName = ActiveWorkbook.Path & "\ReSpeicher\Re_"
    Workbooks.Open strName
    Set mappeSp = ActiveWorkbook
    Worksheets("Rechnung").Range("G5") = ReNummer
    strDateiName = strDateiName & Trim(Str(ReNummer)) & "_" & Replace(Worksheets("Rechnung").Range("B6"), " ", "") & ".xlsx"

'--- Daten eintragen

    Zeile = mappeVorlage.Worksheets("Daten").Range("K2")
    'strDateiName = ActiveWorkbook.Path & "\ReSpeicher\Re_" & ReNummer & "_" & Zeile & ".xlsx"

    mappeVorlage.Worksheets("Daten").Cells(Zeile, 1) = mappeSp.Worksheets("Rechnung").Range("B6")
    If 1 Then
        mappeVorlage.Worksheets("Daten").Cells(Zeile, 2) = "Frau"
    ElseIf 2 Then
        mappeVorlage.Worksheets("Daten").Cells(Zeile, 2) = "Herr"
    Else
        mappeVorlage.Worksheets("Daten").Cells(Zeile, 2) = "Firma"
    End If
    mappeVorlage.Worksheets("Daten").Cells(Zeile, 3) = mappeSp.Worksheets("Rechnung").Range("B7")
    mappeVorlage.Worksheets("Daten").Cells(Zeile, 4) = mappeSp.Worksheets("Rechnung").Range("E7")
    mappeVorlage.Worksheets("Daten").Cells(Zeile, 5) = mappeSp.Worksheets("Rechnung").Range("B8")
    mappeVorlage.Worksheets("Daten").Cells(Zeile, 6) = mappeSp.Worksheets("Rechnung").Range("D8")
    mappeVorlage.Worksheets("Daten").Cells(Zeile, 7) = Zeile
    mappeVorlage.Worksheets("Daten").Cells(Zeile, 8) = strDateiName
    mappeVorlage.Worksheets("Daten").Cells(Zeile, 9) = mappeSp.Worksheets("Rechnung").Range("B9")
    mappeVorlage.Worksheets("Daten").Range("K1") = ReNummer + 1
    mappeVorlage.Worksheets("Daten").Range("K2") = Zeile + 1
   
    '##############  hier mal mein Teil
    Application.ScreenUpdating = False
    With mappeSp.Worksheets("Rechnung")
    ende = .Cells(.Rows.Count, 1).End(xlUp).Row - 1

    For Zeile = ende To 18 Step -1
        If .Cells(Zeile, 4) = "" Then .Rows(Zeile).Hidden = True
    Next
   
    .Range(.Cells(17, 4), .Cells(ende, 7)).Font.ColorIndex = 2
    End With
    Application.ScreenUpdating = True
   
    '######### Ende mein Teil
       
    mappeSp.SaveAs Filename:=strDateiName, FileFormat:=xlOpenXMLWorkbook
    mappeSp.Close

'--- löschen des Stepplatzbelegs
    Application.DisplayAlerts = False
    mappeVorlage.Save
    Kill strName
    Application.DisplayAlerts = True


    strText = "Rechnung Nr: " & Str(ReNummer) & " öffnen?"
    Antwort = MsgBox(strText, vbYesNo, "Rechnung speichern")
    Unload Me
    If Antwort <> vbYes Then Exit Sub

    Workbooks.Open strDateiName

End Sub



Wobei ich aber sagen muss, dass mich dein Code ein wenig irritiert. Du öffnest deinen Belege und ziehst daraus die Daten. Dann wird der Beleg als Rechnung gespeichert. Aber in den Beleg wurden keinen weiteren Daten eingegeben. Lediglich in die Mappe in welcher der Code läuft (deine Testrechnung.xlsm) werden Daten gezogen. Danach wird die xlsm auch noch mit den Daten gespeichert - aber nicht unter einem neuen Rechnungsnamen sondern unter dem Ausgangsnamen. Ist das so richtig?
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 522
Registriert: 15. Aug 2017, 18:36

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon vollchaos » 14. Feb 2018, 08:19

Hallo guten Morgen

als erstes super dein Code ist so wie ich mir es dachte. :D Dankeschön danke
Das mit den Belegen hat den Hintergrund, das ich zwischendurch noch etwas hinzu, oder abziehen muss. Deshalb ist es gut, das erst die Rechnung verkürzt ist. Ich habe noch zwei Ordner dazu, einmal SpSpeicher und ReSpeicher. Der Name ändert sich eigentlich nur von SpSpeicher_Mustermann in Re Rechnungsnummer Mustermann.
Falls Du noch möchtest, bräuchte ich jetzt noch was, wo ich eben für das Büro ausdrucke. Da sollten die Anz, die Preise und Konten-nummern wieder darauf stehen. Vielleicht kann man sowas über einen Button machen? Wie gesagt ich zähle mich zu den Anfängern.
Der nächste große Schritt wird dann die Adressen in Access zu speichern, da Excel an seine Grenzen kommt, ab ca. 250 Rechnungen. Aber ein Schritt nach dem anderen. :wink:

VG
Never give up
vollchaos
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Feb 2018, 13:41

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon 1Matthias » 14. Feb 2018, 09:25

Moin!
An welcher Stelle im Programmablauf soll es denn gedruckt werden? Vor dem Speichern als Rechnung oder wann? Da die Daten ja in der Datei mit den Makro liegen, bräuchtest du doch nur einen Button anlegen und den Code hier zuweisen:
Worksheets("Rechnung").PrintOut
Da steht ja noch alles drin, das ausblenden ist ja nur in der gespeicherten Variante so.
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 522
Registriert: 15. Aug 2017, 18:36

Re: Excel Druckbereich über VBA Anfänger braucht hilfe

Beitragvon Gast » 14. Feb 2018, 15:28

Hallo

ich brauche es in der gespeicherten Version einmal für den Kunden, sprich ausgeblendet nur mit Preis. Dann einmal für das Büro ausgeblendet mit Anzahl, Preis und Kontenummern.

Das Ausblenden bekomme ich ja hin, aber der Button bzw. die zwei machen mir echt Probleme. Egal wie ich es mache sagt mir das Makro der Button ist nicht da oder die Makros sind deaktiviert. Was mache da denn falsch?
Ich habs jetzt so:
'############## hier mal mein Teil
Application.ScreenUpdating = False
With mappeSp.Worksheets("Rechnung")
ende = .Cells(.Rows.Count, 1).End(xlUp).Row - 1

For zeile = ende To 18 Step -1
If .Cells(zeile, 4) = "" Then .Rows(zeile).Hidden = True
Next
' Test .Range(.Cells(17, 5), .Cells(ende, 7)).Font.ColorIndex = 2
End With
' Application.ScreenUpdating = True
'######### Ende mein Teil
Worksheets("Rechnung").PrintOut

Das würde ja auch gehen, aber ich brauch das für den Kunden noch.
Wahrscheinlich verzweifelst bald mit mir :)
VG
Gast
 

Nächste

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste