Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Shape in Userform laden

Forumthread: Shape in Userform laden

Shape in Userform laden
05.01.2003 14:54:28
Felix
Hallo liebe Helfer in der Not,
Kann mir jemand helfen?

Habe ein Schape in einer Tabelle und möchte es in die Userform laden. Wie geht das? Habe nichts entsprechendes gefunden.

Name des Shapes: Sheets ("Start").Shapes("K_1")

Danke
Gruß
Felix




Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Shape in Userform laden
05.01.2003 15:31:49
L.Vira
Direkt geht das nicht, nur über den Umweg Kopieren und dann in einem Bildbearbeitungsprogramm z.B. als Gif abspeichern und über LoadPicture einfügen. Wenn das automatisch passieren soll, gehts auch nur über einen Umweg. Leeres Diagramm einfügen, Shape dort hineinkopieren und das diagramm als Gif oder jpg exportieren.
Anzeige
Re: Shape in Userform laden
05.01.2003 15:49:18
Felix
Vielen Dank L. Vira,
leider habe ich noch nicht die Kompetenz errecht um mir einen solchen Code zu schnitzen.

Hat jemand eventuell die Zeit und Lust mir ein Beispiel ins Forum zu stellen?

Wäre wirklich toll.

Danke
Felix

Re: Shape in Userform laden
05.01.2003 16:08:53
L.Vira
ich bezweifele, dass dir jemand eine Komplettlösung bieten will, weil das schon relativ komplex ist. Vielleicht versuchst du mal, das schrittweise zu realisieren.
Dabei kann dir der Makrorekorder gute Dienste leisten.
Anzeige
Re: Shape in Userform laden
05.01.2003 16:14:45
andre
hallo felix,
schaue mal in die recherche, suche in den themenlisten - grafik ...
dort findest du u.a. einen hinweis
https://www.herber.de/workshops/shapeinuf/shapeinuf.htm
und mehr.
auch unter diagramm in userform suchen!
gruss andre
Anzeige
Re: Shape in Userform laden
05.01.2003 17:13:45
Nepumuk
Hallo Felix,
du musst noch den Bereich anpassen, in dem sich das Diagramm befindet. Günstig ist es, das Diagramm dem ausgewählen Breich genau anzupassen, dann hats du nicht den Rest der Zellen in dem Gif-Bild.

Option Explicit
Dim container As Chart, containerbok As Workbook, Obnavn As String, Sourcebok As Workbook
Function SelectArea() As String
Dim Internrange As Range
On Error GoTo Brutt
Set Internrange = Range("c3:i22") 'Hier Bereich anpassen
SelectArea = Internrange.Address
Exit Function
Brutt:
SelectArea = "A1"
End Function
Function sShortname(ByVal Orrginal As String) As String
Dim iii As Integer
sShortname = ""
For iii = 1 To Len(Orrginal)
If Mid(Orrginal, iii, 1) <> " " Then sShortname = sShortname & Mid(Orrginal, iii, 1)
Next
End Function
Private Sub ImageContainer_init()
Workbooks.Add (1)
ActiveSheet.Name = "GIFcontainer"
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Worksheets(1).Range("A1")
ActiveChart.Location Where:=xlLocationAsObject, Name:="GIFcontainer"
ActiveChart.ChartArea.ClearContents
Set containerbok = ActiveWorkbook
Set container = ActiveChart
End Sub
Sub MakeAndSizeChart(ih As Integer, iv As Integer)
Dim Hincrease As Single, Vincrease As Single
Obnavn = Mid(ActiveChart.Name, Len(ActiveSheet.Name) + 1)
Hincrease = ih / ActiveChart.ChartArea.Height
ActiveSheet.Shapes(Obnavn).ScaleHeight Hincrease, msoFalse, msoScaleFromTopLeft
Vincrease = iv / ActiveChart.ChartArea.Width
ActiveSheet.Shapes(Obnavn).ScaleWidth Vincrease, msoFalse, msoScaleFromTopLeft
End Sub
Public Sub GIF_Snapshot()
Dim varReturn As Variant, MyAddress As String, SaveName As Variant, MySuggest As String
Dim Hi As Integer, Wi As Integer, Suffiks As Long
Set Sourcebok = ActiveWorkbook
MySuggest = sShortname(ActiveSheet.Name)
ImageContainer_init
Sourcebok.Activate
MyAddress = SelectArea
If MyAddress <> "A1" Then
SaveName = "C:\WINDOWS\TEMP\Diagramm"
Range(MyAddress).Select
Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
If SaveName = False Then
GoTo Avbryt
End If
If InStr(SaveName, ".") Then SaveName = Left(SaveName, InStr(SaveName, ".") - 1)
Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
Hi = Selection.Height + 4
Wi = Selection.Width + 6
containerbok.Activate
ActiveSheet.ChartObjects(1).Activate
MakeAndSizeChart ih:=Hi, iv:=Wi
ActiveChart.Paste
ActiveChart.Export Filename:=LCase(SaveName) & ".gif", FilterName:="GIF"
ActiveChart.Pictures(1).Delete
Sourcebok.Activate
End If
Avbryt:
On Error Resume Next
Application.StatusBar = False
containerbok.Saved = True
containerbok.Close
End Sub

In die Userform folgenden Code:

Option Explicit
Private Sub UserForm_Activate()
Image1.Picture = LoadPicture("C:\WINDOWS\TEMP\Diagramm.gif")
End Sub

Gruß
Nepumuk

Anzeige
Re: Shape in Userform laden
05.01.2003 17:15:39
Felix
Vielen Dank Andre,
der Tip war schon nicht schlecht.

leider habe ich nur das Problem, das ich unterschiedliche Shapes (je nach Listboxauswahl) laden wollte. Nun gut, eventuell kann ich es ja mal zu einem späteren Zeitpunkt (wenn ich mehr weiß).

Mein Problem kann ich nicht mit dem Makrorecorder lösen, da er ja auf der Modulebene nichts aufzeichnet. (somit bekomme ich auch nicht das Shape in die Userform.

Dennoch vielen Dank für die Anregungen.

Gruß
FELIX


Anzeige
Vielen Dank Nepumuk
05.01.2003 17:22:43
Felix
Ohje, Ohje

Vielen Dank Nepumuk.

Mein lieber Herr Gesangsverein.

So ein Aufwand hatte ich nicht erwartet.

Den Code muß ich erst mal in einer ruhigen Minute verdauen.

Danke
Gruß
Felix

;
Anzeige

Infobox / Tutorial

Shape in Userform laden


Schritt-für-Schritt-Anleitung

Um ein Shape aus einer Excel-Tabelle in eine Userform zu laden, gehst du folgendermaßen vor:

  1. Vorbereitung: Stelle sicher, dass du das gewünschte Shape in deiner Excel-Tabelle hast. In diesem Beispiel verwenden wir das Shape mit dem Namen "K_1" auf dem Blatt "Start".

  2. Diagramm einfügen: Füge ein leeres Diagramm in dein Excel-Arbeitsblatt ein. Dieses Diagramm wird als Container für dein Shape dienen.

  3. VBA-Code erstellen: Öffne den VBA-Editor (Alt + F11) und füge den folgenden Code in ein neues Modul ein:

    Option Explicit
    
    Dim container As Chart
    Dim containerbok As Workbook
    
    Sub ImageContainer_init()
       Workbooks.Add (1)
       ActiveSheet.Name = "GIFcontainer"
       Charts.Add
       ActiveChart.ChartType = xlColumnClustered
       ActiveChart.Location Where:=xlLocationAsObject, Name:="GIFcontainer"
       ActiveChart.ChartArea.ClearContents
       Set containerbok = ActiveWorkbook
       Set container = ActiveChart
    End Sub
    
    Sub GIF_Snapshot()
       Dim MyAddress As String
       Dim SaveName As String
       Set Sourcebok = ActiveWorkbook
       ImageContainer_init
       MyAddress = "C3:I22" ' Hier den Bereich anpassen
       SaveName = "C:\WINDOWS\TEMP\Diagramm"
    
       Range(MyAddress).CopyPicture Appearance:=xlScreen, Format:=xlBitmap
       ActiveSheet.ChartObjects(1).Activate
       ActiveChart.Paste
       ActiveChart.Export Filename:=LCase(SaveName) & ".gif", FilterName:="GIF"
       containerbok.Close
    End Sub
  4. Shape skalieren: Verwende die msoscalefromtopleft-Methode, um das Shape in der gewünschten Größe anzuzeigen. Füge den folgenden Code hinzu:

    ActiveSheet.Shapes("K_1").ScaleHeight 1, msoFalse, msoScaleFromTopLeft
    ActiveSheet.Shapes("K_1").ScaleWidth 1, msoFalse, msoScaleFromTopLeft
  5. Userform aktivieren: Füge den folgenden Code in die Userform ein, um das Bild anzuzeigen:

    Private Sub UserForm_Activate()
       Image1.Picture = LoadPicture("C:\WINDOWS\TEMP\Diagramm.gif")
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Das Shape wird nicht korrekt angezeigt.

    • Lösung: Überprüfe, ob der Bereich, den du kopierst, korrekt definiert ist. Stelle sicher, dass das Shape sichtbar ist.
  • Fehler: Der Pfad zum Speichern des Bildes ist ungültig.

    • Lösung: Stelle sicher, dass der Pfad, in dem du das Bild speichern möchtest, existiert und dass du die nötigen Berechtigungen hast.

Alternative Methoden

Wenn du eine einfachere Methode bevorzugst, kannst du das Shape auch manuell in ein Bildbearbeitungsprogramm kopieren und dort als Bild speichern. Anschließend kannst du das Bild mit LoadPicture in die Userform laden. Diese Methode ist weniger automatisiert, aber einfacher, wenn du nur gelegentlich Shapes laden musst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du ein Shape in eine Userform laden kannst:

  1. Erstelle ein Shape in Excel und nenne es "K_1".
  2. Verwende den obigen VBA-Code, um das Shape in eine Userform zu laden.
  3. Stelle sicher, dass die Userform ein Bildsteuerelement namens Image1 enthält.

Tipps für Profis

  • Makrorekorder nutzen: Der Makrorekorder kann dir helfen, den VBA-Code zu generieren. Achte darauf, die Schritte genau zu befolgen, um die benötigten Befehle zu erfassen.
  • Code optimieren: Überlege, wie du den Code modularisieren kannst, um ihn wiederverwendbar zu machen. Das erleichtert die Anpassung für verschiedene Shapes.

FAQ: Häufige Fragen

1. Kann ich mehrere Shapes in einer Userform laden?
Ja, du kannst den oben genannten Code anpassen, um verschiedene Shapes je nach Auswahl in einer Listbox zu laden.

2. Welche Excel-Version benötige ich?
Die beschriebenen Methoden funktionieren in den meisten aktuellen Excel-Versionen, die VBA unterstützen.

3. Was ist msoscalefromtopleft?
msoscalefromtopleft ist eine Konstante in VBA, die angibt, dass das Shape von der oberen linken Ecke skaliert werden soll.

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