Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
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

Screenshot abspeichern mit VBA

Screenshot abspeichern mit VBA
11.06.2021 10:01:44
Johannes
Hallo zusammen,
heute habe ich voller Stolz meinen ersten VBA code hier zu Bewunderung veröffentlicht!
(nur ein kleiner Spaß, Ich weiß sehr gut, dass der code ehe eine "Krankheit als gut ist)
Ziel ist es ein koordiniertes abfragen von Datenquellen mit abschließendem speichern als .htm
und dann wieder als .xlsm, weil als .htm Arbeitsmappe meine Codes und abfragen nicht mehr gelaufen sind.
Leider ist die Datei extrem groß und somit auch langsam als Webseite und da mir auf der Webseite eigentlich ein Screenshot reichen würde
hab ich leider erfolglos einige Codes und auch Makro Rekords probiert zum Thema Screenshot.
Könnte mir jemand bitte mich von meinem Leid erlösen und mir helfen anstatt HTML-File, einem Screenshot vom
"Druckbereich" oder "A1:V47" auf demselben Speicherplatz zu speichern.
Jetzt mein Code der so weit funktioniert
Vielen Dank
Hannes

Sub save2()
Dim Duration, Start
Duration = 60
Start = Timer
Do While Timer 
und die codes die ich versucht habe aber nicht funktionieren (alle .jpg zeigen nur weisses bild).

Sub bild()
' nur weisses bild im abgespeicherten .JPG aber perfekte grafik mitten im Bildschirm
CODE 1
Application.ScreenUpdating = False
Dim bild As Chart
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
Selection.CopyPicture
Set bild = Charts.Add
On Error Resume Next
bild.ChartArea.Clear
bild.Location Where:=xlLocationAsObject, Name:=ws.Name
Set bild = ActiveChart
bild.Paste
With ActiveSheet.Shapes(Right(bild.Name, InStr(1, bild.Name, "Dia") + 1))
.Height = Selection.ShapeRange.Height + 50
.Width = Selection.ShapeRange.Width + 50
'pfad anpassen!!!!!
bild.Export Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\test.jpg", filterName:="jpg"
.Delete
End With
Application.ScreenUpdating = True
End Sub
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CODE 2
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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:="G:\FTP_Main_Folder\Hannes\Webseite Excel\" & ThisWorkbook.Name & ".jpg", filterName:="JPG"
.Parent.Delete
End With
Application.ScreenUpdating = True
'leider nur ein weisses feld im .jpg
End Sub
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CODE 3 Makro record
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sub Screenshot_Macro_2()
' Screenshot_Macro_2 Makro
' 2. versuch
Sheets("All").Select
ActiveWindow.SmallScroll ToRight:=-1
Range("A1:V47").Select
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Sheets("Tabelle1").Select
ActiveSheet.Paste
ActiveSheet.Shapes.Range(Array("Picture 4")).Select
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Screenshot abspeichern mit VBA
11.06.2021 10:32:52
Nepumuk
Hallo Johannes,
teste mal:
Code:

[Cc][+][-]

Option Explicit Sub bild() Dim objChartObject As ChartObject Dim objRange As Range Application.ScreenUpdating = False Set objRange = Range(ActiveSheet.PageSetup.PrintArea) objRange.CopyPicture Set objChartObject = ActiveSheet.ChartObjects.Add(Left:=0, Top:=0, _ Width:=objRange.Width + 50, Height:=objRange.Height + 50) With objChartObject .Activate With .Chart .Paste .Export Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\test.jpg", filterName:="jpg" End With .Delete End With Set objRange = Nothing Set objChartObject = Nothing Application.ScreenUpdating = True End Sub

Gruß
Nepumuk
Anzeige
AW: Screenshot abspeichern mit VBA
11.06.2021 11:13:07
Johannes
Danke Nepumuk
ich denke ich habs richtig eingefügt, weil es funktioniert,
aber ich habe auf dem Screenshot einen weißen streifen von 2 cm unten und rechts,
an was könnte das liegen?
So sieht das jetzt bei mir aus, wenn dir noch was auffällt sags mir bitteschön.
Merci nochmal für die schnelle Antwort
<pre>Sub save2()
Dim Duration, Start
Dim objChartObject As ChartObject
Dim objRange As Range
Duration = 60
Start = Timer
Do While Timer < Start + Duration
DoEvents
Loop
'Alle Workbook aktualisieren
ActiveWorkbook.RefreshAll
'alle Alerts aus(keine Speicherabfrage)
Application.DisplayAlerts = False
'speicherns als webseite
' ChDir "G:\FTP_Main_Folder\Hannes\Webseite Excel\wwwroot"
' ActiveWorkbook.SaveAs Filename:= _
' "G:\FTP_Main_Folder\Hannes\Webseite Excel\wwwroot\VPS 2021-06a_CopyFX_autosave.htm" _
' , FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
Application.ScreenUpdating = False
Set objRange = Range(ActiveSheet.PageSetup.PrintArea)
objRange.CopyPicture
Set objChartObject = ActiveSheet.ChartObjects.Add(Left:=0, Top:=0, _
Width:=objRange.Width + 50, Height:=objRange.Height + 50)
With objChartObject
.Activate
With .Chart
.Paste
.Export Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\test.jpg", filterName:="jpg"
End With
.Delete
End With
Set objRange = Nothing
Set objChartObject = Nothing
Application.ScreenUpdating = True
'speicherns als excel mit Makro
ChDir "G:\FTP_Main_Folder\Hannes\Webseite Excel"
ActiveWorkbook.SaveAs Filename:= _
"G:\FTP_Main_Folder\Hannes\Webseite Excel\VPS 2021-06a_CopyFX_autosave.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
'alle Alerts wieder ein
Application.DisplayAlerts = True
Cells(1, 2) = Now ' Datum + Zeit zum berechnen vergangenen zeit seit update
'test box nach einem durchlauf (temporär)
save2
End Sub</pre>
Anzeige
AW: Screenshot abspeichern mit VBA
11.06.2021 12:00:55
Nepumuk
Hallo Johannes,
das liegt an den +50 die draufgerechnet werden. das habe ich aus deiner Prozedur entnommen.
Ändere die Zeile so:

Set objChartObject = ActiveSheet.ChartObjects.Add(Left:=0, Top:=0, _
Width:=objRange.Width, Height:=objRange.Height)
Gruß
Nepumuk
AW: Screenshot abspeichern mit VBA
11.06.2021 13:00:15
Johannes
Hallo Nepomuk,
genau das war's, Ich hatte beim Herumprobieren auch schon mit +0 versucht, aber deine Lösung ist natürlich besser.
Wenn du, mir noch bei einem Problem helfen könntest an dem ich gerade rumknabbere.
Ich will die aktuelle Uhrzeit in A1 anzeigen und updaten.
Ich habe einen code gefunden aber habe so meine Probleme mit dem integrieren in meinem code, da fehlt's mir noch an den Basics
wenn du nochmal ein paar Minuten Zeit für einen Anfänger hättest wäre super.
Vielen dank nochmal
Hannes
Folgenden Code in das Codefenster von DieseArbeitsmappe
Option Explicit

Private Sub Workbook_Open()
Zeitmakro
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=DaEt, Procedure:="Zeitmakro", Schedule:=False
End Sub
und in ein allgemeines Modul diesen
Option Explicit
' Code "Zeitmakro" von Hajo Ziplies,
Public DaEt As Date
Sub Zeitmakro()
ThisWorkbook.Worksheets("Tabelle1").Range("A1") = Format(Time, "hh:mm:ss")
DaEt = Now + TimeValue("00:00:01")
Application.OnTime DaEt, "Zeitmakro"
End Sub In Tabelle1 A1 wird die laufende Zeit angezeigt.
Anzeige
AW: Screenshot abspeichern mit VBA
11.06.2021 13:16:21
Nepumuk
Hallo Johannes,
an "DieseArbeitsmappe" kommst du über den Projektexplorer (Das Fenster links oben) dort mit einem Doppelklick auf "DieseArbeitsmappe" öffnet das entsprechende Modul.
Ein "allgemeines Modul" erzeugst du über die Menüleiste im VBA-Editor - Einfügen - Modul.
Gruß
Nepumuk
AW: Screenshot abspeichern mit VBA
11.06.2021 13:59:30
Johannes
Ok danke nochmal, werd nachher ausprobieren, Mus jetzt aber leider weg von meinem Computer
Hast mir super geholfen
Schönen Tag noch und ein super WE
Hannes
AW: Screenshot abspeichern mit VBA
12.06.2021 09:02:07
Johannes
Guten Morgen an alle,
Die Hauptfrage ist zwar geklärt, und ich weiß nicht, ob ich jetzt einen neuen Thread öffnen sollte, also frag ich mal ganz frech hier noch weiter um Hilfe.
Meine Idee den Screenshot als Image zu speichern war zwar richtig aber leider refresh't die Webseite das Bild nicht, sondern zeigt immer dasselbe erste Image, und somit wertlos zur Kontrolle der Tabelle. Anscheinend ist es nicht so leicht das Image neu zu laden, oder ich interpretiere google falsch.
Also fand ich diesen code für VBA der Objekte als HTM File abspeichert.
Leider war mir kein Erfolg vergönnt, also mach ich wieder mal was falsch und
bitte euch um Hilfe "nur das Image als .HTM abspeichern"
danke im Voraus
Hannes
ActiveWorkbook.SaveAs _
Filename:="C:\Reports\myfile.htm", _
FileFormat:=xlHTML
ich habs dan versucht mit
.SaveAs _ Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\VPS 2021-06a_CopyFX_autosave.htm", _ FileFormat:=xlHTML
und mit
.Export Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\VPS 2021-06a_CopyFX_autosave.htm" filtername:="htm"
und auch
With Application.DefaultWebOptions
.RelyonVML = True
.AllowPNG = True
.PixelsPerInch = 96
End With
With ActiveWorkbook
.WebOptions.AllowPNG = False
With .PublishObjects(1)
.FileName ="G:\FTP_Main_Folder\Hannes\Webseite Excel\VPS 2021-06a_CopyFX_autosave.htm"
.Publish
End With
End With
Anzeige
AW: Screenshot abspeichern mit VBA
12.06.2021 13:57:13
Johannes
Hallo, an alle
nach meinem wunderbaren Samstag am Computer und einigen versuchen habe ich diesen code umgebaut und in meinen eingefügt.
Leider produziert er mir eine weiße Seite nur mit Datum, weiß jemand an was es hängt? Oder hängen kann?
'Save als HTM versuch #4
With ThisWorkbook.PublishObjects
Call .Add(SourceType:=xlSourceRange, Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\CopyFX_Live.htm", _
Sheet:="All", Source:="$A$1:$V$47", HtmlType:=xlHtmlStatic, _
DivID:="Tabelle1").Publish(Create:=True)
End With
AW: Screenshot abspeichern mit VBA
14.06.2021 11:28:12
Johannes
Einen wunderschönen Montagmorgen,
hallo Nepomuck
Ein update, das Updaten des Sheets all mit diesem Code funktioniert jetzt, aber ich habe eine Fehlermeldung ab und zu, anscheinend, wenn ich an der Arbeitsmappe arbeite und anscheinend nicht auf dem "Sheet All" bin. Könnte ich da was ändern, dass es nicht passiert?
Sub Publish_HTM()
With ThisWorkbook.PublishObjects
Call .Add(SourceType:=xlSourceRange, Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\wwwroot\CopyFX_Live1.htm", _
Sheet:="All", Source:="$A$1:$V$47", HtmlType:=xlHtmlStatic, _
DivID:="Tabelle1").Publish(Create:=True)
End With
End Sub Und-Oder wäre es möglich diesen code zu ändern
das der screenshot immer von.... Sheet"All" ...nimmt egal wo man gerade ist.
das =range Sheet All......PageSetup.PrintArea oder so
'Screenshot Nepomuck HerbersExcel
Application.ScreenUpdating = False
Set objRange = Range(ActiveSheet.PageSetup.PrintArea)
objRange.CopyPicture
Set objChartObject = ActiveSheet.ChartObjects.Add(Left:=0, Top:=0, _
Width:=objRange.Width, Height:=objRange.Height)
With objChartObject
.Activate
With .Chart
.Paste
.Export Filename:="G:\FTP_Main_Folder\Hannes\Webseite Excel\wwwroot\CopyFX_Live.jpg", filterName:="jpg"
End With
.Delete
End With
Set objRange = Nothing
Set objChartObject = Nothing
Application.ScreenUpdating = True
Die Echtzeitanzeige hat mir nur probleme gemacht und alles im 5 sekundentackt upgedatet und somit alles blockiert(wahrscheinlich mein Fehler). Gibts da eine andere lösung die man auch abschalten kann?Is aber nicht so wichtig
und weil mir das VBA wirklich spass macht und ich mich da weiterentwickeln will, noch eine frage die ich noch nicht so richtig in mich reinkriege.
"Diese Arbeitsmappe" --->

Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:10:00"), "SaveThis"
End Sub
Das Workbook_Open() kann ich ja nur einmal benutzen,
wenn ich mehrere Sub laufen lassen will bei workbook open kann ich dann die alle untereinander schreiben vor "End Sub "?
ist die reihenfolge wichtig? Bei dem thema stockt es grade ein bischen
Oder besser, ein neues modul einfügen und alle subs aus diesem aufrufen.
etwa so.
Sub Name
Versuch1()
Dim..
Dim...
Dim...
Sub1
EndSub
Sub2
EndSub
Sub3
EndSub
oder
Sub1
Sub2
Sub3
EndSub
EndSub
EndSub
danke für die wahnsinnsgeduld die du mit mir hast
Hannes
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige