Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Selection per Makro als Bild speichern

Selection per Makro als Bild speichern
03.01.2019 20:42:00
Dominik
Hallo,
ich versuche per Makro den in einer Excel markierten Bereich als jpg abzulegen. Hintergrund ist, dass ich Teile eine Excel-Datei auf einem großen Fernseher anzeigen möchte. Die Excel enthält einen JAhreskalender, und immer nur die aktuelle KW soll auf dem Fernseher angezeigt werden. Ich dachte also der Anwender markiert immer die aktuelle Woche und exportiert diese dann mittels Makro als Bild exportiert, das kann ich dann in eine html-Seite einbetten und automatisch aktualisieren. Habe zwei Varianten aus dem Forum getestet, das Ergebnis ist jedoch immer ein weißes Bild. Habt ihr einen Tipp?

Sub ExportBlattAlsBild()
Dim Bild As Chart
Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
Application.ScreenUpdating = False
Set Bild = Charts.Add
Bild.ChartArea.Clear
Bild.Paste
Bild.Export "C:\Users\dgreiwe\Downloads\test\ExcelHintergundBild.jpg"
Application.DisplayAlerts = False
Bild.Delete
Application.DisplayAlerts = True
Set Bild = Nothing
Application.ScreenUpdating = True
End Sub


Sub BereichAlsBildExportieren()
Application.ScreenUpdating = False
Range(ActiveSheet.PageSetup.PrintArea).CopyPicture Appearance:=xlPrinter, Format:=xlPicture
With ActiveSheet.ChartObjects.Add(0, 0, Range(ActiveSheet.PageSetup.PrintArea).Width, Range( _
_
ActiveSheet.PageSetup.PrintArea).Height).Chart
.Paste
.Export Filename:="C:\Users\dgreiwe\Downloads\test\" & ThisWorkbook.Name & ".jpg",  _
FilterName:="JPG"
.Parent.Delete
End With
Application.ScreenUpdating = True
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Selection per Makro als Bild speichern
03.01.2019 21:17:00
Sepp
Hallo Dominik,
da gibts was feines von Nepumuk.
Modul Modul1
Option Explicit 
 
'? 2015 by Nepumuk - http://www.herber.de/forum/messages/1458287.html 
 
Private Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" (ByRef _
  PicDesc As PICT_DESC, ByRef RefIID As GUID, ByVal fPictureOwnsHandle As LongPtr, ByRef _
  IPic As IPicture) As LongPtr 
Private Declare PtrSafe Function CopyImage Lib "user32.dll" (ByVal handle As LongPtr, _
  ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As LongPtr 
Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal _
  wFormat As Long) As Long 
Private Declare PtrSafe Function OpenClipboard Lib "user32.dll" (ByVal hwnd As LongPtr) As _
  Long 
Private Declare PtrSafe Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) _
  As LongPtr 
Private Declare PtrSafe Function DeleteObject Lib "gdi32.dll" (ByVal hObject As LongPtr) _
  As Long 
Private Declare PtrSafe Function CLSIDFromString Lib "ole32.dll" (ByVal lpsz As Any, ByRef _
  pCLSID As GUID) As Long 
Private Declare PtrSafe Function EmptyClipboard Lib "user32.dll" () As Long 
Private Declare PtrSafe Function CloseClipboard Lib "user32.dll" () As Long 
 
Private Type GUID 
  Data1 As Long 
  Data2 As Integer 
  Data3 As Integer 
  Data4(0 To 7) As Byte 
End Type 
 
Private Type PICT_DESC 
  lSize As Long 
  lType As Long 
  hPic As LongPtr 
  hPal As LongPtr 
End Type 
 
Private Const PICTYPE_BITMAP As Long = 1 
Private Const CF_BITMAP As Long = 2 
Private Const IMAGE_BITMAP As Long = 0 
Private Const LR_COPYRETURNORG As Long = &H4 
Private Const GUID_IPICTUREDISP As String = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}" 
 
Private Function PastePicture(ByRef prlngptrCopy As LongPtr) As IPictureDisp 
 
  Dim lngReturn As Long, lngptrPointer As LongPtr 
 
  If CBool(IsClipboardFormatAvailable(CF_BITMAP)) Then 
 
    lngReturn = OpenClipboard(CLngPtr(Application.hwnd)) 
 
    If lngReturn > 0 Then 
 
      lngptrPointer = GetClipboardData(CF_BITMAP) 
 
      prlngptrCopy = CopyImage(lngptrPointer, IMAGE_BITMAP, 0&, 0&, LR_COPYRETURNORG) 
 
      Call CloseClipboard 
 
      If lngptrPointer <> 0 Then Set PastePicture = CreatePicture(prlngptrCopy, 0) 
 
    End If 
  End If 
End Function 
 
Private Function SaveClipboardImage(FileName As String) As Boolean 
  Dim lPicType As Long, oPic As Variant 
  lPicType = xlBitmap 
  Set oPic = PastePicture(lPicType) 
  If oPic Is Nothing Then Exit Function 
  SavePicture oPic, FileName 
  SaveClipboardImage = True 
End Function 
 
Private Function CreatePicture(ByVal lngptrhPic As LongPtr, ByVal lngptrhPal As LongPtr) As IPictureDisp 
 
  Dim udtPicInfo As PICT_DESC, udtID_IDispatch As GUID 
  Dim objPicture As IPictureDisp 
 
  Call CLSIDFromString(StrPtr(GUID_IPICTUREDISP), udtID_IDispatch) 
 
  With udtPicInfo 
    .lSize = Len(udtPicInfo) 
    .lType = PICTYPE_BITMAP 
    .hPic = lngptrhPic 
    .hPal = lngptrhPal 
  End With 
 
  Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture) 
 
  Set CreatePicture = objPicture 
 
  Set objPicture = Nothing 
 
End Function 
 
Public Function SaveRange2Image(ByRef Target As Range, ByVal FileName As String) As Long 
  Static slngptrCopy As LongPtr 
 
  Call OpenClipboard(0&) 
  Call EmptyClipboard 
  Call CloseClipboard 
 
  If slngptrCopy <> 0 Then Call DeleteObject(slngptrCopy) 
 
  Target.CopyPicture Appearance:=xlScreen, Format:=xlBitmap 
 
  If SaveClipboardImage(FileName) Then 
    SaveRange2Image = -1 
  Else 
    SaveRange2Image = 0 
  End If 
 
End Function 
 
 
' Der Aufruf erfolgt so. 
Sub test() 
Const conFILENAME As String = "D:\Forum\Test.jpg" 
 
If SaveRange2Image(Selection, conFILENAME) = -1 Then 
  MsgBox conFILENAME & " wurde erstellt" 
Else 
  MsgBox "Fehler" 
End If 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Selection per Makro als Bild speichern
04.01.2019 19:18:57
Dominik
Hallo,
vielen Dank, das Script klappt wunderbar.

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige