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

Forumthread: Tabellenblatt mit Userform drucken

Tabellenblatt mit Userform drucken
Pepi
Hallo zusammen
Ich möchte ein Tabellenblatt mit einer Unserform zusammen drucken - habe diesen Code gefunden.
.Shapes(1).Top = .Rows(18).Top gibt aber mit Win7, Office 2010 folgenden Fehler:
"Der Index in der angegeben Sammlung ist ausserhalb des zulässigen Bereichs."
Kann mir jemand weiterhelfen? Vielen Dank
Pepi
Private Declare Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" ( _
ByVal wCode As Long, _
ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Private Const KEYEVENTF_KEYUP = &H2
' --------------------------------------------------------------------------------------------
Public Sub XprcPrintForm()
Dim intAltScan As Integer
intAltScan = MapVirtualKey(vbKeyMenu, 0&)
Call keybd_event(vbKeyMenu, intAltScan, 0&, 0&)
Call keybd_event(vbKeySnapshot, 0&, 0&, 0&)
DoEvents
Call keybd_event(vbKeyMenu, intAltScan, KEYEVENTF_KEYUP, 0&)
With Tabelle1
.Paste
.Shapes(1).Top = .Rows(18).Top
.Shapes(1).Left = .Columns(1).Left
With .Shapes(1)
.LockAspectRatio = msoFalse
.Height = 220
.Width = 1000
End With
.PrintOut
.Shapes(1).Delete
End With
End Sub

Anzeige
AW: Tabellenblatt mit Userform drucken
12.04.2012 16:05:13
Rudi
Hallo,
Win7 32 oder 64 bit?
Bei 64 bit versuchs mal so:
  #If win64 Then
Private Declare ptrsafe Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" _
(ByVal wCode As Longptr, ByVal wMapType As Longptr) As Longptr
Private Declare ptrsafe Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Longptr, _
ByVal dwExtraInfo As Longptr)
Private Declare Sub ptrsafe Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Longptr)
#Else
Private Declare Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" ( _
ByVal wCode As Long, _
ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
#End If
Stör dich nicht an den Kompilermeldungen bei der Eingabe.
Gruß
Rudi
Anzeige
AW: Tabellenblatt mit Userform drucken
12.04.2012 17:14:58
Pepi
Hallo Rudi
vielen Dank für die schnelle Antwort
Ich verstehe den code leider nicht - doch wenn ich den 64bit code in das Modul anstelle meinem kopiere, bleibt die letzte Zeile rot "Private Declare Sub ptrsafe Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Longptr)" - was auf einen Fehler hindeutet, den ich aber nicht rausfinden kann.
vielleicht siehst Du ihn
vielen Dank
Pepi
Anzeige
AW: Tabellenblatt mit Userform drucken
12.04.2012 18:24:17
Rudi
Hallo,
da ist ein Dreher drin.
  #If win64 Then
Private Declare ptrsafe Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" _
(ByVal wCode As Longptr, ByVal wMapType As Longptr) As Longptr
Private Declare ptrsafe Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Longptr, _
ByVal dwExtraInfo As Longptr)
Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Longptr)
#Else
Private Declare Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" ( _
ByVal wCode As Long, _
ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
#End If

Gruß
Rudi
Anzeige
AW: Tabellenblatt mit Userform drucken
13.04.2012 08:45:08
Pepi
Hallo Rudi
Der neue Code gibt zwar keine roten Zeilen mehr, aber das Makro
Public Sub XprcPrintForm()
Dim intAltScan As Integer
intAltScan = MapVirtualKey(vbKeyMenu, 0&)
Call keybd_event(vbKeyMenu, intAltScan, 0&, 0&)
Call keybd_event(vbKeySnapshot, 0&, 0&, 0&)
DoEvents
Call keybd_event(vbKeyMenu, intAltScan, KEYEVENTF_KEYUP, 0&)
With Tabelle1
.Paste
.Shapes(1).Top = .Rows(18).Top
.Shapes(1).Left = .Columns(1).Left
With .Shapes(1)
.LockAspectRatio = msoFalse
.Height = 220
.Width = 1000
End With
.PrintOut
.Shapes(1).Delete
End With
End Sub
macht bei .Shapes(1).Top = .Rows(18).Top immer noch einen Fehler.
Vieleicht gibt es ja einen anderen Zugang - ich möchte eine Tabelle mit einem Userform ausdrucken!
mfg
Pepi
Anzeige
AW: Tabellenblatt mit Userform drucken
15.04.2012 08:48:43
fcs
Hallo Pepi,
evtl. gibt es bei der Zählung der Shapes noch ein Problem.
Unter Excel 2010, Windows Vista funktioniert folgendes. Hier wird dann immer das zuletzt eingefügte Shape-Objekt angesprochen. D.h. es gibt keine Probleme, wenn auf dem Blatt noch andere Shape-Objekte vorhanden sind.
Gruß
Franz
Public Sub XprcPrintForm()
Dim intAltScan As Integer, objShape As Shape
intAltScan = MapVirtualKey(vbKeyMenu, 0&)
Call keybd_event(vbKeyMenu, intAltScan, 0&, 0&)
Call keybd_event(vbKeySnapshot, 0&, 0&, 0&)
DoEvents
Call keybd_event(vbKeyMenu, intAltScan, KEYEVENTF_KEYUP, 0&)
With Tabelle1  'Codename des Tabellenblatts ggf. anpassen
'oder
'    With Worksheets("Tabelle XYZ")
'oder
'    With ActiveSheet
.Paste
Set objShape = .Shapes(.Shapes.Count)
objShape.Top = .Rows(18).Top
objShape.Left = .Columns(1).Left
With objShape
.LockAspectRatio = msoFalse
.Height = 220
.Width = 1000 'ca. 480 für A4-hoch, ca. 740 für A4-quer
End With
UserForm1.Hide      'zum Testen Userform ausblenden
.PrintPreview       'zum Testen
'        .PrintOut
objShape.Delete
UserForm1.Show     'zum Testen Userform wieder einblenden
End With
End Sub

Anzeige
AW: Tabellenblatt mit Userform drucken
16.04.2012 08:15:55
Pepi
Hallo Franz
Lieben Dank für Deine Bemühungen
Leider erhalte ich den Fehler "MapVirtualKey" Sub oder Funktion nicht definiert
vom Ansatz her finde ich diesen Code sehr interessant
vielleicht kannst Du mir nochmals helfen
mfg
Pepi
AW: Tabellenblatt mit Userform drucken
16.04.2012 12:17:49
fcs
Hallo Pepi,
zusätzlich zu dieser Prozedur muss du auch die Deklarationen von Rudi verwenden.
Diese Codezeilen muss du als erste Zeilen im Modul einfügen - vor allen Subs und Functions.
Gruß
Franz
Anzeige
AW: Tabellenblatt mit Userform drucken
19.04.2012 08:06:32
Pepi
Hallo Franz und Co.
Jetzt habe ich den ganzen Code zusammen - keine Fehlermeldung. Das Makro macht aus den ganzen Bildschirm einen Printscreen, ruft den Screenshoot-Editor aus und das ganze wird gedruckt.
Was ich brauche ist aber: Das Exceltabellenblatt soll ganz normal gedruckt werden und falls sich ein geöffnetes Userform darauf befindet, soll dieses mitgedruckt werden.
Ich somit immer noch auf weitere Hilfe angewiesen.
mfg
Pepi
Anzeige
;

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

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