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

Userform kopieren und als als Grafik einfügen

Forumthread: Userform kopieren und als als Grafik einfügen

Userform kopieren und als als Grafik einfügen
Pepi
Hallo zusammen
Ich möchte ein Userform kopieren und als Grafik wieder einfügen, damit ersichtlich ist mit welchen Basiswerten eine Tabelle erstellt wurde (Basiswerte werden über Userform eingegeben)
Ctrl-Alt-Printscreen oder ein Bildschirmprogramm (Snagid) geht nicht, da dies automatisch auf Knopfdruck geschehen muss
vielen Dank für Eure Unterstützung
Pepi
Anzeige
AW: Userform kopieren und als als Grafik einfügen
22.02.2010 13:20:05
Uwe
Hallo Pepi,
Option Explicit
Private Declare Sub keybd_event Lib "User32" _
(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Sub CommandButton1_Click()
keybd_event &H2C, 1, 0, 0
DoEvents
With ActiveSheet
.Paste .Range("D4")
End With
End Sub
Gruß Uwe
Anzeige
AW: Userform kopieren und als als Grafik einfügen
22.02.2010 14:27:53
Pepi
Hallo Zusammen
Vom Code her, verstehe ich nicht genau was das Programm macht, doch es öffnet ein mir bisher unbekanntes Programm "PrintKey 2000", das mir erlaubt die UserForm als Bild zu speichern oder auch zu verändern.
Doch möchte ich ohne Umwege die Userform direkt als Grafik auf dem gleichen Tabellenblatt wie die Original-userfom hinkopieren (aber als Grafik)
Bin dankbar für weitere Tipps
Pepi
Anzeige
Was das Programm macht ist einfach...
22.02.2010 14:34:38
Renee
Pepi,
Es schickt einen Tastatur-Event von Alt-PrintScreen an die Applikation.
Diese Windows-Standard-Tastenfolge plaziert einen Screenshot des aktiven Fensters (deine UF) ins Clipboard und mit .Paste würde es wieder ausgelesen.
Da du anscheinend ein Programm hast, dass diesen Event abfängt kann dir schwerlich geholfen werden.
Das ist halt, wenn man nicht bei den installierten Standards bleibt.
GreetZ Renée
Anzeige
AW: Was das Programm macht ist einfach...
22.02.2010 14:45:05
Pepi
Hallo Renée
Schon gut wegen Standards. Neuer PC, habe kein einziges Programm installiert.
Doch ich sollte ich statt Alt-Printscreen "Ctrl-Alt-Printscreen" haben, damit nur das Fenster kopiert wird - dann würde es gehen, wie heisst denn der Code dafür?
vielen Dank
Pepi
AW: Was das Programm macht ist einfach...
22.02.2010 15:53:03
Uwe
Hallo Pepi,
teste mal das.
Gefunden auf
http://www.xlam.ch/pos/code.htm#Screen%20Shot%20eines%20Benutzerformulares%20in%20die%20Zwischenablage%20erstellen
' **************************************************************
'  Modul:  UserForm1  Typ = Userform
Option Explicit
Private Sub CommandButton1_Click()
Me.Repaint
Call UserFormScreenShot
With ActiveSheet
.Paste .Range("D4")
End With
End Sub
'  Modul:  Modul1  Typ = Allgemeines Modul
Option Explicit
Type RECT_Type
left As Long
top As Long
right As Long
bottom As Long
End Type
Declare Function GetActiveWindow Lib "User32" () As Long
Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Sub GetWindowRect Lib "User32" (ByVal Hwnd As Long, lpRect As RECT_Type)
Declare Function GetDC Lib "User32" (ByVal Hwnd As Long) As Long
Declare Function CreateCompatibleDC Lib "Gdi32" (ByVal hdc As Long) As Long
Declare Function CreateCompatibleBitmap Lib "Gdi32" (ByVal hdc As Long, ByVal nWidth As Long, _
ByVal nHeight As Long) As Long
Declare Function SelectObject Lib "Gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Declare Function BitBlt Lib "Gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, _
ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop As Long) As Long
Declare Function OpenClipboard Lib "User32" (ByVal Hwnd As Long) As Long
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, ByVal hMem As Long) As  _
Long
Declare Function CloseClipboard Lib "User32" () As Long
Declare Function ReleaseDC Lib "User32" (ByVal Hwnd As Long, ByVal hdc As Long) As Long
Declare Function DeleteDC Lib "Gdi32" (ByVal hdc As Long) As Long
Global Const SRCCOPY = &HCC0020
Global Const CF_BITMAP = 2
Public Sub UserFormScreenShot()
Dim FormHwnd As Long
Dim DeskHwnd As Long
Dim hdc As Long
Dim hdcMem As Long
Dim rect As RECT_Type
Dim junk As Long
Dim fwidth As Long
Dim fheight As Long
Dim hBitmap As Long
DeskHwnd = GetDesktopWindow()
FormHwnd = GetActiveWindow()
Call GetWindowRect(FormHwnd, rect)
fwidth = rect.right - rect.left
fheight = rect.bottom - rect.top
hdc = GetDC(DeskHwnd)
hdcMem = CreateCompatibleDC(hdc)
hBitmap = CreateCompatibleBitmap(hdc, fwidth, fheight)
If hBitmap  0 Then
junk = SelectObject(hdcMem, hBitmap)
junk = BitBlt(hdcMem, 0, 0, fwidth, fheight, hdc, rect.left, rect.top, SRCCOPY)
junk = OpenClipboard(DeskHwnd)
junk = EmptyClipboard()
junk = SetClipboardData(CF_BITMAP, hBitmap)
junk = CloseClipboard()
End If
junk = DeleteDC(hdcMem)
junk = ReleaseDC(DeskHwnd, hdc)
End Sub
Gruß Uwe
Anzeige
AW: Was das Programm macht ist einfach...
23.02.2010 21:25:41
Peter
Hallo Uwe
Als ich den Code sah, dachte Mensch hast du noch alle - keine Ahnung was da abgeht. Ich habs dann probiert und ich staunte nicht schlecht, als es doch sehr schnell funktionierte - manchmal ist es doch wichtiger "dass es funktioniert" als zu wissen "warum es funktioniert" - nochmals vielen Dank
Gruss aus der CH
Pepi
Anzeige
Der Code funktioniert doch...
22.02.2010 15:57:02
Renee
Pepi,
Wenn ich das austeste, so wird eine Kopie der UF in D4 als TopLeftCell abgelegt.
Was funktioniert denn bei dir nicht ?
Der Code gehört in das Klassenmodul der Userform zum entsprechenden Button, der die Kopie auf das aktive Blatt ablegen soll.
GreetZ Renée
AW: Der Code funktioniert doch...
22.02.2010 18:17:07
Peter
Hallo Renée
Bei mir funktioniert es auch, ich habe das ganze auch ins Klassenmudul kopiert.
Auf meinem PC muss ich Crtr-Alt-PrtScr eingeben damit das Userform kopiert wird mit Alt-PrtScr wird das ganze Fenster kopiert - meine Frage: kann ich Deinen Befehl um "Ctrl" auf "Crtr-Alt-PrtScr" erweitern
vielen Dank
Pepi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Userform als Grafik in Excel einfügen


Schritt-für-Schritt-Anleitung

Um ein Userform in Excel zu kopieren und als Grafik einzufügen, verwendest du VBA. Hier sind die Schritte, die du befolgen solltest:

  1. Öffne den VBA-Editor: Drücke Alt + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer und wähle Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Option Explicit
    Private Declare Sub keybd_event Lib "User32" _
    (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    
    Private Sub CommandButton1_Click()
       keybd_event &H2C, 1, 0, 0 ' Alt-PrintScreen
       DoEvents
       With ActiveSheet
           .Paste .Range("D4") ' Zielzelle
       End With
    End Sub
  4. Füge den Screenshot-Befehl hinzu: Erstelle eine neue Subroutine in deinem Modul:

    Public Sub UserFormScreenShot()
       ' Code für Screenshot hier einfügen (siehe Uwe's Beispiel)
    End Sub
  5. Verbinde die Schaltfläche mit dem Screenshot: Stelle sicher, dass der Code für die Schaltfläche in deinem Userform enthält, um die Userform als Grafik zu kopieren.

  6. Teste die Funktion: Klicke auf den Button in deinem Userform und überprüfe, ob die Grafik in der Zelle D4 eingefügt wurde.


Häufige Fehler und Lösungen

  • Problem: Die Userform wird nicht als Grafik eingefügt.

    • Lösung: Stelle sicher, dass der Code im richtigen Modul ist und dass keine anderen Programme den Screenshot abfangen.
  • Problem: Der Screenshot wird nicht korrekt erstellt.

    • Lösung: Überprüfe, ob die Bildschirmtastenkombination korrekt ist. Möglicherweise musst du Ctrl + Alt + PrintScreen verwenden.

Alternative Methoden

Eine alternative Methode für das Excel Userform kopieren ist die Verwendung von externen Screenshot-Tools wie SnagIt oder Greenshot. Diese Tools bieten oft eine einfachere Benutzeroberfläche und mehr Anpassungsoptionen. Du kannst die Screenshots dann manuell in Excel einfügen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du den Screenshot-Befehl in dein Userform integrieren kannst:

Private Sub CommandButton1_Click()
    Me.Repaint
    Call UserFormScreenShot
    With ActiveSheet
        .Paste .Range("D4")
    End With
End Sub

Du siehst, dass der Befehl Me.Repaint die Userform vor dem Screenshot aktualisiert, um sicherzustellen, dass alle Änderungen sichtbar sind.


Tipps für Profis

  • Benutze DoEvents: Dies sorgt dafür, dass Excel Zeit hat, den Screenshot-Befehl zu verarbeiten, bevor du die Grafik einfügst.
  • Wähle die Zielzelle sorgfältig: Überlege dir, wo du die Grafik einfügen möchtest, um die Übersichtlichkeit deiner Tabelle zu wahren.
  • Teste in verschiedenen Excel-Versionen: Manchmal können Unterschiede in den Excel-Versionen das Verhalten von VBA beeinflussen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Userform immer korrekt kopiert wird? Achte darauf, dass keine anderen Anwendungen im Vordergrund sind, während du den Screenshot machst.

2. Kann ich den Code anpassen, um die Grafik in eine andere Zelle einzufügen? Ja, ändere einfach die .Paste .Range("D4") Zeile in die gewünschte Zelle, z.B. .Paste .Range("E5").

3. Was tun, wenn der Screenshot nicht funktioniert? Prüfe, ob die Tastenkombination korrekt ist und ob andere Programme, die Screenshots abfangen, geschlossen sind.

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