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

Selection.ShapeRange

Forumthread: Selection.ShapeRange

Selection.ShapeRange
30.10.2004 16:45:30
Stefan
Guten Tag
Ich füge mit VBA (Ctrl + V) eine neue (mit PrintScreen) Grafik ein. Nun möchte ich diese in der Excel-Tabelle noch bearbeiten. Aus Sicherheit, ob Einfügen funktioniert, möchte ich zuerst feststellen, ob überhaupt eine Grafik eingefügt worden ist (es gibt nur diese). Dann soll diese unbenannt werden mit einer Nummer, z.B. 80001 und dannach möchte ich den linken und den rechten Einzug kürzen. Wie könnte ich das geschickt anstellen. Wichtig ist mir die Code-Sicherheit, d.h. wenn keine Grafik in der Tabelle eingefügt worden ist, sollte der Code die Rountine verlassen. Wie könnte ich das machen?
Grüsse
Stefan
Anzeige
AW: Selection.ShapeRange
K.Rola
Hallo,
gibt es außer dieser Grafik noch andere Shapes in dem Blatt, z.B. Schaltflächen?
Gruß K.Rola
AW: Selection.ShapeRange
Stefan
Guten Tag
Verflixt ja, Du hast Recht, noch eine einzige CommandBox, diese heisst cmbDrucken.
Grüsse
Stefan
AW: Selection.ShapeRange
K.Rola
Hallo,
das macht ja nichts, muss nur berücksichtigt werden.
Du kannst also eine ganz eingache Abfrage machen:
If activesheet.shapes.count 2 then exit sub
Btw., das mit dem Einzug habe ich nicht verstanden.
Gruß K.Rola
Anzeige
AW: Selection.ShapeRange
Stefan
Hallo
Wenn ich das per Makro aufzeichnung mache:
Application.CommandBars("Control Toolbox").Visible = True
Range("C6").Select
.Name = 88000 sollte möglich sein
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -75.75
Selection.ShapeRange.IncrementTop -36.75
Selection.ShapeRange.PictureFormat.Brightness = 0.5
Selection.ShapeRange.PictureFormat.Contrast = 0.5
Selection.ShapeRange.PictureFormat.ColorType = msoPictureAutomatic
Selection.ShapeRange.PictureFormat.CropLeft = 144.01
Selection.ShapeRange.PictureFormat.CropRight = 144.01
Selection.ShapeRange.PictureFormat.CropTop = 144#
Selection.ShapeRange.PictureFormat.CropBottom = 144#
Application.CommandBars("Control Toolbox").Visible = False
Anzeige
AW: Selection.ShapeRange
K.Rola
Hallo,
leicht verwirrt, was hat die toolbox damit zu tun?
Gruß K.Rola
AW: Selection.ShapeRange
Stefan
Guten Abend
Tja, die habe ich versehentlich aktiviert. Ist nicht zu beachten (Werkzeugsammlung)
Grüsse
Stefan
AW: Selection.ShapeRange
K.Rola
Hallo,
nun nochmal zum Verständnis, du erstellst mit der Taste Druck/print einen screenshot
und willst diesen dann mit VBA in die Tabelle einfügen und formatieren, soweit richtig?
Ggf. muss ich noch weiter nachbohren.
Mit Increment platzierst du das teil ja relativ zur Einfügeposition. ist das so gewollt, oder soll die Position absolut bestimmt werden und falls ja, wie?
Gruß K.Rola
Anzeige
AW: Selection.ShapeRange
Stefan
Guten Abend
Ich habe auch ein bischen getüfftelt. Und folgendes geht. Ich bin mir aber nicht sicher, ob das nicht noch besser gemacht werden könnte. Eigentlich mag ich .Activate und .select nicht besonders. Könnte man das noch direkter und raffinierter machen als mein ziemlich plumper Code. Aber für das Verständnis hilfts.
Ich bin für jeden Hinweis dankbar. Das hilft auch zum mich zu verbessern.
Besten Dank.
Grüsse
Stefan
With Workbooks(CONvorlage).Worksheets("Daten")
.Activate
.Range("C5").Select
SendKeys "^v", True
.Range("D48").Value = Application.UserName
If .Pictures.Count = 1 Then
.Pictures(1).ShapeRange.Name = txtName.text
With .Shapes(txtName.text)
.PictureFormat.CropLeft = 11#
.PictureFormat.CropRight = 27#
.PictureFormat.CropTop = 22#
.PictureFormat.CropBottom = 9#
.Width = 500
.LockAspectRatio = msoTrue
End With
Else
MsgBox "Das 'Bild' konnte leider nicht erfolgreich" & Chr(13) & _
"eingefügt werden. Bitte versuche die" & Chr(13) & _
"Erstellung noch einmal. Besten Dank.", vbInformation, _
"Administrator"
Exit Sub
End If
end with
Anzeige
AW: Selection.ShapeRange
K.Rola
Hallo,
ja, das geht auch ohne select ect., nur weiß ich noch immer nicht, wo das Bild herkommt?
Deshalb hatte ich zuvor gefragt, ob du manuell einen screenshot machst?
Gruß K.Rola
AW: Selection.ShapeRange
Stefan
Guten Abend
Eigentlich ist das so, ich starte aufgrund eines CommandButton-Ereignis aus einer UserForm heraus ein PrintScreen von der UserForm. Darauf startet eine Excel-Mappen-Vorlage und dort soll dann auf "C5" das geknipste Bild eingefügt und formatiert werden. Das Problem ist, dass ich einerseits für den PrintScreen den Fokus auf der Userform haben muss (diesen Code habe ich) und darauf den Fokus auf die Tabelle wechseln muss (geht anscheinend nur mit minimieren und maximieren der Excel-Application). Nur Wenn der Fokus (Aktives Windows) gesichert auf der Tabelle steht, kann ein Einfügen bei gleichzeitig offener UserForm gemacht werden (da hilft auch Modeless nichts). Deshalb meine fast ängstlichen bemühungen mit zusätzlichem .select und .activate. Aber ich habe keine Ahnung, ob das helfen würde. Hast Du eine Idee für die Vereinfachung?
Grüsse
Stefan
Anzeige
AW: Selection.ShapeRange
K.Rola
Hallo,
warum verklausulierst du deine Frage eigentlich so? Du willst also einen Sreenshot
von deinem userform in eine Tabelle einfügen, richtig?
Gruß K.Rola
AW: Selection.ShapeRange
Stefan
Hallo,
Genau so. Verklausulieren? Das derzeitige Problem bestand nicht beim PrintScreen und auch nicht auf dem Fokus der UserForm, auch nicht beim Oeffnen einer Arbeitsmappe, noch beim Einfügen. Sondern eben beim sicheren Ansprechen des 'pictures' und Formatieren derselben. Da interessiert mich, was es für Möglichkeiten gibt.
Grüsse
Stefan
Anzeige
AW: Selection.ShapeRange
K.Rola
Hallo,
na gut, lassen wir es mal dabei. Wie du ein vorhandenes Bild formatierst, bekommst du mithilfe des Makrorekorders heraus.
Gruß K.Rola
AW: Selection.ShapeRange
Stefan
Hallo
Ok. Ich verstehe zwischen den Zeilen, dass Du an einer besseren Lösung als via SendKey und PrintScreen gedacht hast und meinen Weg als ziemlich umständlich siehst. Natürlich wäre ein Hinzufügen eines Bildes mit gleichzeitigem Namensgebung möglich, jedoch kaum via SendKey-Tastenkombination. Das sehe ich ein. Doch das ist vom Ablauf hergesehen nicht anders möglich. Das Ganze bleibt eine, sagen wir mal, Krücke. Aber es ist leider derzeit nicht anders möglich als von einem in eine UserForm integriertem WebBrowser eine 1:1 Abbildung in eine Datei zu kriegen als via PrintScreen oder via "Snagit". Einen Ausdruck schon, dafür gibt es einen sensationellen Code, der die Druckeinstellung öffnet.
Trotzdem vielen Dank für Deine Bemühungen und noch einen schönen Rest des Wochenendes.
Grüsse
Stefan
Anzeige
AW: Selection.ShapeRange
K.Rola
Hallo,
das Problem ist, dass du nur in den Kathegorien denkst, die dir bekannt sind und nun
damit eine Lösung "basteln" willst. Das versperrt den Blick auf Alternativen, die du halt nicht kennst.
Gruß K.Rola
AW: Selection.ShapeRange
Stefan
Hallo,
Klare Worte und sie sind wahr. Jetzt bin ich zerknirscht. Sag jetzt bloss, dass es eine Alternative gibt, dann bin ich auch noch Paff. Denn ich suche schon lange und habe einiges ausprobiert.
Grüsse
Stefan
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

Arbeiten mit Selection.ShapeRange in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Grafik einfügen: Stelle sicher, dass du die Grafik, die du einfügen möchtest, in der Zwischenablage hast (z.B. durch einen Screenshot).

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (deinWorkbookName)" und wähle Einfügen -> Modul.

  4. Code einfügen: Füge den folgenden VBA-Code in das Modul ein:

    Sub InsertAndFormatPicture()
       Dim shp As Shape
       Dim ws As Worksheet
    
       Set ws = ThisWorkbook.Worksheets("Daten")
       ws.Activate
       ws.Range("C5").Select
    
       ' Füge die Grafik ein
       ActiveSheet.Paste
    
       ' Überprüfe, ob eine Grafik eingefügt wurde
       If ws.Pictures.Count > 0 Then
           Set shp = ws.Pictures(ws.Pictures.Count)
           shp.ShapeRange.Name = "80001"
    
           ' Positioniere die Grafik
           shp.ShapeRange.IncrementLeft -75.75
           shp.ShapeRange.IncrementTop -36.75
    
           ' Hier kannst du weitere Formatierungen hinzufügen
       Else
           MsgBox "Keine Grafik eingefügt."
           Exit Sub
       End If
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die Grafik einzufügen und zu formatieren.


Häufige Fehler und Lösungen

  • Fehler: Keine Grafik eingefügt
    Lösung: Stelle sicher, dass du die Grafik korrekt in die Zwischenablage kopiert hast, bevor du das Makro ausführst.

  • Fehler: ShapeRange nicht gefunden
    Lösung: Überprüfe, ob du die ShapeRange korrekt referenzierst. Verwende ws.Pictures anstelle von Selection.

  • Fehler: Ungültige Zeilenposition
    Lösung: Achte darauf, dass die Position, die du mit IncrementLeft und IncrementTop angibst, innerhalb des Arbeitsblatts liegt.


Alternative Methoden

  • Direktes Einfügen ohne Zwischenablage: Du kannst Bilder auch direkt aus einer Datei einfügen, indem du ws.Pictures.Insert("PfadZurDatei") verwendest. Dies ist oft stabiler als das Arbeiten mit der Zwischenablage.

  • Verwendung von UserForms: Wenn du eine UserForm verwendest, um Screenshots zu erstellen, kannst du den Screenshot direkt in ein Image-Control auf der UserForm einfügen, bevor du es in das Arbeitsblatt überträgst.


Praktische Beispiele

Ein einfaches Beispiel, um die Grafik in Excel VBA mit ShapeRange zu bearbeiten:

Sub FormatInsertedPicture()
    Dim shp As Shape

    Set shp = ActiveSheet.Shapes(1) ' Annahme: Das erste Shape ist das Bild
    shp.ShapeRange.PictureFormat.Brightness = 0.5
    shp.ShapeRange.PictureFormat.Contrast = 0.5
    shp.ShapeRange.PictureFormat.CropLeft = 10
End Sub

Dieses Beispiel zeigt, wie du die Helligkeit und den Kontrast einer eingefügten Grafik anpassen kannst.


Tipps für Profis

  • Vermeide die Verwendung von Select und Activate: Diese Methoden können den Code verlangsamen und sind oft unnötig. Verwende stattdessen direkte Referenzen auf Objekte.

  • Nutze Fehlerbehandlung: Implementiere On Error Resume Next und If Err.Number <> 0 Then für robustere Skripte.

  • **Verwende

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige