Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Excel VBA -- Tabellenblätter auswählen und drucken
Frage
Hallo zusammen,
ich habe eine Excel-Datei mit mehreren Tabellenblättern.
Über ein Formular (das bereits funktioniert und die 3 Werte
AuswahlTabelle1 bis 3 zurückgibt) soll ausgewählt werden, welche der 3 Tabellenblätter ausgedruckt werden sollen.
Um herauszufinden, wie man die Tabellenblätter markiert und anschließend den Druckauftrag startet,
habe ich ein Makro aufgezeichnet und dann versucht, den Code entsprechend anzupassen, indem ich den Inhalt der
inneren Klammer versucht habe durch Verketten zu einem String "zusammenzubaseln", was aber leider nicht
funktioniert hat..
Der Originalcode für das Markieren war:
[code]
sheets(Array("Tabelle1", "Tabelle2").Select
[/code]
...und das war mein Versuch, wäre nett, wenn mir jemand weiterhelfen könnte, die denn die Zeile, in der die
Tabellenblätter ausgewählt werden, auszusehen hat..
Im voraus schonmal vielen Dank!
Nun aber der Code
[code]
Option Explicit
Private Sub Button_Drucken Click()
Dim owB As workbook
Set owBDatei = Thisworkbook
Dim Auswahl As string
Formular_Druckauswahl.Hide
' Mappen abhängig von Auswahl markieren
If Auswahl_Tabelle1= True Then
Auswahl = Auswahl & """Tabelle1"""
End If
If AuswahlTabelle2 = True Then
if Auswahl<>"" then
Auswahl = Auswahl & ", ""Tabelle1"""
Else
Auswahl = Auswahl & """Tabelle1"""
End If
End If
If AuswahlTabelle3 = True Then
If Auswahl <> "" Then
Auswahl = Auswahl & ", ""Tabelle2"""
Else
Auswahl = Auswahl & """Tabelle2"""
End If
End If
MsgBox Auswahl
If Auswahl <> "" Then
owBDatei.sheets(Array(Auswahl)).select
owBDatei.sheets("Tabelle1").ACtivate
ACtivewindow.selectedsheets.Printout
else
msgbox "Auswahl erforderlich!"
end if
End Sub
[/code]
Antwort 1 von nighty
hi snailhouse :-)
vielleicht hilfreich :-)
gruss nighty
vielleicht hilfreich :-)
gruss nighty
Option Explicit
Sub MehrereSheets()
Dim SammelSheets As String, Tab1 As String, Tab2 As String
Dim ShIndex As Integer
Do
Tab1 = InputBox("Wie heißt das erste zu bearbeitende Tabellenblatt?", "Tabellenblattauswahl")
Loop While SheetExists(Tab1) = False
Do
Tab2 = InputBox("Wie heißt das letzte zu bearbeitende Tabellenblatt?", "Tabellenblattauswahl")
Loop While SheetExists(Tab2) = False
For ShIndex = Sheets(Tab1).Index To Sheets(Tab2).Index
SammelSheets = SammelSheets & Worksheets(ShIndex).Name & ","
Next
SammelSheets = Mid(SammelSheets, 1, Len(SammelSheets) - 1)
Worksheets(Split(SammelSheets, ",")).Select
End Sub
Public Function SheetExists(strName As String) As Boolean
On Error Resume Next
SheetExists = Not Sheets(strName) Is Nothing
End Function
Antwort 2 von snailhouse
Hallo nighty,
vielen Dank für die Antwort, so ging's auch.
Ich bin heute durch eine Hilfestellung eines Kollegen auf folgende Lösung gekommen:
Auch das funktioniert.
Gruß
Jürgen
vielen Dank für die Antwort, so ging's auch.
Ich bin heute durch eine Hilfestellung eines Kollegen auf folgende Lösung gekommen:
Auch das funktioniert.
Gruß
Jürgen
Option Explicit
Private Sub Button_Drucken_Click()
Dim oWB As Workbook
Set oWB = ThisWorkbook
Dim oWsListe As Worksheet
Set oWsListe = oWB.Worksheets("Tabelle1")
Dim MappenArray() As String
Dim I As Integer
ReDim MappenArray(2)
Formular_Druckauswahl.Hide
' Schritt 1: ermitteln der Anzahl der ausgewählten Tabellenblätter
I = -1
If Auswahltabelle1 = True Then
I = I + 1
End If
If Auswahltabelle2 = True Then
I = I + 1
End If
If Auswahltabelle3 = True Then
I = I + 1
End If
ReDim MappenArray(I) ' Ende Ermittlung Anzahl der ausgewählten Tabellenblätter
' Schritt 2: Füllen des Arrays für Tabellenblattmarkierung
I = 0
If Auswahltabelle1 = True Then
MappenArray(I) = "Tabelle1"
I = I + 1
End If
If Auswahltabelle2 = True Then
MappenArray(I) = "Tabelle2"
I = I + 1
End If
If Auswahltabelle3 = True Then
MappenArray(I) = "Tabelle3"
End If
Sheets(MappenArray).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
oWsListe.Cells(3, 1).Select
End Sub