Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro um bestimmte Spalten zu drucken

Makro um bestimmte Spalten zu drucken
addi23
Hallo Zusammen,
ich suche eine VBA Programmierung in der man fix hinterlegen kann welche Spalten aus einer großen
Excel Liste man im "Landscape-Format" auf eine Seite angepasst (fit to one page) auf den Standarddrucker senden kann.
In der VBA Programmierung sollte ich dann fix z.b. Spalte A, C, F, H, Z hinterlegen können und die komplette Liste darunter (bis zu dem maximalen Zeileneintrag) in einer Spalte sollte gedruckt werden.
Alle anderen Spalten sollen aussen vor gelassen werden.
Wenn die letzten Einträge z.B. in A25, C37, F48, H5, Z32 stehen sollte der Druckbereich dennoch in allen Spalten bis Zeile 48 gehen, da F48 den "untersten" Eintrag hat.
Habt Ihr eine Idee?
Vielen Dank schon mal vorab.
VG
addi23
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro um bestimmte Spalten zu drucken
05.08.2011 21:06:41
fcs
Hallo addi,
das Grundgerüst ist einfach. Blende in einer Schleife alle Spalten aus, die nicht gedruckt werden sollen und ermittle die max. Anzahl Zeilen in den sichtbaren Zeilen.
Druckbereich anpassen, Drucken - fertig.
Aber hier gibt es ja noch einiges an Zusatzaufgaben, die berücksichtigt werden müssen.
1. Standarddrucker in Windows ermitteln und ggf. zum aktiven Drucker machen
2. Aktuelle Einstellungen (Ansicht, Drucken etc) vor dem Drucken sichern (als benutzerdefinierte Ansicht)
3. Seite für das Drucken einrichten
3. Drucken
4. bemerkten aktiven Drucker wieder setzen und Einstellungen wieder herstellen.
Gruß
Franz
Option Explicit
'Quelle für Name des Windows-Standarddruckers
'http://spotlight-wissen.de/archiv/message/1186222.html
Private Declare Function GetProfileString Lib "kernel32" _
Alias "GetProfileStringA" (ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long) _
As Long
Private Sub GetStdPrinterName(PrinterName$, Driver$, Port$)
Dim Buffer$, r&, x&, y&
Buffer = Space(8192)
r = GetProfileString("windows", "Device", "", Buffer, Len(Buffer))
If r Then
Buffer = Mid(Buffer, 1, r)
x = InStr(Buffer, ",")
PrinterName = Mid(Buffer, 1, x - 1)
y = InStr(x + 1, Buffer, ",")
Driver = Mid(Buffer, x + 1, y - x - 1)
Port = Mid(Buffer, y + 1)
Else
PrinterName = ""
Driver = ""
Port = ""
End If
End Sub
Sub PrintMyColumns()
Dim wb As Workbook, wks As Worksheet, Spalte&, ZeileMax&, SpalteMax&
Dim sPrinter$, sPrinterAktiv$, PrinterName$, Driver$, Port$
Dim sMyPresentView$
Dim statusOrientation&
Set wb = ActiveWorkbook
'aktuelle Ansichtseinstellungen merken
sMyPresentView = "MeineAktuelleAnsicht"
wb.CustomViews.Add ViewName:="MeineAktuelleAnsicht", _
PrintSettings:=True, RowColSettings:=True
'Windows-Standarddrucker ermitteln
Call GetStdPrinterName(PrinterName, Driver, Port)
'MsgBox "Standarddrucker: " & vbLf & PrinterName & vbLf & Driver & vbLf & Port ' Testzeile
sPrinterAktiv = Application.ActivePrinter 'Aktiven Drucker merken
If UCase(Left(sPrinterAktiv, Len(PrinterName)))  UCase(PrinterName) Then
'Trennwort zwischen Druckername und Port ermitteln
sPrinter = Left(sPrinterAktiv, InStrRev(sPrinterAktiv, " ") - 1)
sPrinter = Mid(sPrinter, InStrRev(sPrinter, " ", -1) + 1)
sPrinter = PrinterName & " " & sPrinter & " " & Port
Application.ActivePrinter = sPrinter
End If
Set wks = ActiveSheet
With wks
'Spalten ausblenden, die nicht gedruckt werden sollen, letzte Datenzeile in den _
zu druckenden Zeilen ermitteln
Application.ScreenUpdating = False
'Alle Spalten und Zeilen einblenden
.Columns.Hidden = False
.Rows.Hidden = False
SpalteMax = .Cells.SpecialCells(xlCellTypeLastCell).Column
For Spalte = 1 To SpalteMax
Select Case Spalte
Case 2, 3, 5 To 8, 12 To 15, 18, 22 'zu druckende Spalten
ZeileMax = Application.WorksheetFunction.Max(ZeileMax, _
.Cells(.Rows.Count, Spalte).End(xlUp).Row)
Case Else
.Columns(Spalte).Hidden = True
End Select
Next
With .PageSetup
'Seite Einrichten für Druckausgabe
.PrintArea = wks.Range(wks.Cells(1, 1), _
wks.Cells(ZeileMax, Spalte)).Address(ReferenceStyle:=xlA1)
statusOrientation = .Orientation
If .Orientation = xlPortrait Then
.Orientation = xlLandscape
End If
.LeftMargin = Application.CentimetersToPoints(1)
.RightMargin = Application.CentimetersToPoints(1)
.TopMargin = Application.CentimetersToPoints(1.8)
.HeaderMargin = Application.CentimetersToPoints(1.4)
.BottomMargin = Application.CentimetersToPoints(1)
.FooterMargin = Application.CentimetersToPoints(1)
'Drucken auf eine Seite
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
Application.ScreenUpdating = True
End With
.PrintOut Preview:=True, ActivePrinter:=sPrinter
End With
'Ansicht vor dem Drucken inkl. Druckeinstellungen wieder herstellen
wb.CustomViews(sMyPresentView).Show
wb.CustomViews(sMyPresentView).Delete
Application.ActivePrinter = sPrinterAktiv
End Sub

Anzeige
AW: Makro um bestimmte Spalten zu drucken
06.08.2011 09:44:03
addi23
Hallo Franz,
wo kann ich denn die Spalten in der Programmierung hinterlegen, die fix gedruckt werden sollen?
Ich habe das Makro mal so laufen lassen, dann werden alle Spalten ausgewählt und der Druck startet nicht automatisch, kann man das auch noch hinterlegen?
Vielen Dank und viele Grüße,
addi23
Anzeige
AW: Makro um bestimmte Spalten zu drucken
06.08.2011 12:05:32
fcs
Hallo addi,
wenn du ohne Anzeige der Seitenvorschau direkt drucken willst,
dann folgende Zeile
    .PrintOut Preview:=True, ActivePrinter:=sPrinter
'ändern in
.PrintOut Preview:=False, ActivePrinter:=sPrinter
wo kann ich denn die Spalten in der Programmierung hinterlegen, die fix gedruckt werden sollen?
Wer lesen (und ein klein wenig verstehen) kann ist hier stark im Vorteil.
Die zu druckenden Spalten werden in dieser Zeile festgelegt:
        Case 2, 3, 5 To 8, 12 To 15, 18, 22 'zu druckende Spalten
Die Spalten müssen hier per Nummer festgelegt werden A=1, B=2 usw. Wenn mehrer nebeneinander liegende Spalten gedruckt werden sollen, dann kann mit to auch einen Bereich angeben.
VG
Franz
Anzeige
AW: Makro um bestimmte Spalten zu drucken
07.08.2011 09:38:38
addi23
Hi Franz,
vielen Dank.
Deine Programmierung macht genau das was ich mir vorgestellt habe!!
TOP!!!
Gruß,
addi23
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro zum Drucken bestimmter Spalten in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)".
    • Wähle "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    Private Declare Function GetProfileString Lib "kernel32" _
    Alias "GetProfileStringA" (ByVal lpAppName As String, _
    ByVal lpKeyName As String, ByVal lpDefault As String, _
    ByVal lpReturnedString As String, ByVal nSize As Long) _
    As Long
    
    Private Sub GetStdPrinterName(PrinterName$, Driver$, Port$)
       ' Code zur Ermittlung des Standarddruckers
    End Sub
    
    Sub PrintMyColumns()
       ' Code zum Drucken der gewünschten Spalten
    End Sub
  4. Definiere die Spalten, die gedruckt werden sollen. Ändere den folgenden Abschnitt im Code:

    Case 2, 3, 5 To 8, 12 To 15, 18, 22 'zu druckende Spalten

    Ersetze die Zahlen durch die entsprechenden Spaltennummern, die du drucken möchtest (z.B. A=1, B=2, etc.).

  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro aus:

    • Drücke ALT + F8, wähle PrintMyColumns aus und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Problem: Das Makro druckt alle Spalten.

    • Lösung: Stelle sicher, dass du die gewünschten Spalten im Code korrekt angegeben hast. Überprüfe die Zeile:
      Case 2, 3, 5 To 8, 12 To 15, 18, 22
  • Problem: Der Druck startet nicht automatisch.

    • Lösung: Ändere die Zeile:
      .PrintOut Preview:=True, ActivePrinter:=sPrinter

      zu:

      .PrintOut Preview:=False, ActivePrinter:=sPrinter

Alternative Methoden

  • Drucken über die Excel-Oberfläche:

    • Wähle die gewünschten Spalten aus, gehe zu "Datei" > "Drucken" und passe die Druckoptionen an.
  • Nutzung von Filtern:

    • Filtere die Daten nach den gewünschten Kriterien und drucke anschließend nur die sichtbaren Zeilen.

Praktische Beispiele

  1. Drucken der Spalten A, C und F: Ändere die Zeile im Code zu:

    Case 1, 3, 6 ' A, C, F
  2. Drucken von Spalten A bis C und E: Verwende:

    Case 1 To 3, 5 ' A, B, C, E

Tipps für Profis

  • Makro anpassen: Du kannst das Makro weiter anpassen, um spezifische Zeilen zu drucken, indem du den Bereich im Code veränderst.
  • Druckbereich festlegen: Nutze die Funktion PrintArea, um nur bestimmte Bereiche zu drucken und verwende die Option .FitToPagesWide für eine optimale Darstellung.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um nur bestimmte Zeilen zu drucken?
Du kannst den Druckbereich im Code anpassen, indem du den PrintArea auf die gewünschten Zeilen festlegst.

2. Was mache ich, wenn das Makro nicht funktioniert?
Überprüfe den Code auf Fehler und stelle sicher, dass die VBA-Einstellungen in Excel aktiviert sind. Manchmal kann auch ein Neustart von Excel helfen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige