Grafik position mit vba ändern im Excel-Sheet

Hallo,
folgendes Problem:

Ich möchte in meinem Excel-Sheet Grafiken per Auswahlmenü an eine bestimmte Position verschieben. Zwar kann ich die Grafiken um einen bestimmten Betrag verschieben. Doch das ist nicht ganz das was ich suche.

Ich möchte einfach nur, dass die entsprechende Grafik(die übrigens in einer anderen Tabelle ist, als das Auswahlmenü) auf eine bestimmte Position gesetzt wird.

Es gibt dafür doch bestimmt 2 kurze Befehle. Leider hat ausgiebige Excel-Recherche noch nichts ergeben.

Vielen Dank schonmal!!!

hmm…
hab auf die schnelle auch nix rausgefunden, aber mal so ein kleiner Wink mit dem Zaunpfahl…

Excel hat keine negativen Dimensionen.
Sprich: Du kannst ein Bild nur nach ganz links oben verschieben aber nicht aus dem Blickfeld raus…

ergo: machst Du einfach sowas hier:

Sub bild\_verschieben()
 ActiveSheet.Shapes("Picture 1").Select
 Selection.ShapeRange.IncrementLeft -50000 ' weit nach links
 Selection.ShapeRange.IncrementTop -50000 ' weit nach oben
 Selection.ShapeRange.IncrementLeft 100 ' und zurechtrücken
 Selection.ShapeRange.IncrementTop 200 ' und zurechtrücken
End Sub

Gruß
Munich

Erst mal Danke!

Ist leider nicht die eleganteste Lösung. Ich muss mit dieser Aktion mehrere Grafiken verschieben, ist also von der Laufzeit nicht das beste. Aber funktionert vorerst wunderbar.

Falls doch noch jemand eine Idee hat, tut euch keinen Zwang an.:smiley:

sub wieauchimmer()
Application.Screenupdating = false

(deine Schleife mit dem Verschiebevorgang)

Application.Screenupdating = true

end sub

Grüße
Munich

Ich möchte in meinem Excel-Sheet Grafiken per Auswahlmenü an
eine bestimmte Position verschieben. Zwar kann ich die
Grafiken um einen bestimmten Betrag verschieben. Doch das ist
nicht ganz das was ich suche.
Ich möchte einfach nur, dass die entsprechende Grafik(die
übrigens in einer anderen Tabelle ist, als das Auswahlmenü)
auf eine bestimmte Position gesetzt wird.
Es gibt dafür doch bestimmt 2 kurze Befehle. Leider hat
ausgiebige Excel-Recherche noch nichts ergeben.

Hi Gottfried,
Was genau meinst du mit Auswahlmenü und was genau wähslt du da aus?
Warum munich auf negative zahlen aufgrund deiner Anfrage kommt verstehe ich eh nicht :smile:
Jedes Bild hat Werte für Links, Oben, breite , Höhe.
Es gibt da mehrere Möglichkeiten wie deine „Auswahl“ aufgebaut sein könnte, deshalb bitte mehr Infos dazu.
Gruß
Reinhard
ps @Munich, k.A. ob das mit negativen Positionszahlen ging , jedenfalls konnte man (nur gelesen hab) bei Zeiten von Win3.1 in die win.ini oder sonstwo reinschreiben dass das Windowsfenster eine bestimmte Position hatte und auch Größe Breite, nur, dieser Bereich war außerhalb des sichtbaren Bereichs. Ergo, man sah nix, man hatte also einen schwarzen? Bildschirm, Windowsfenster lief, aber man sah es nicht, netter Kollegensherz:smile:

Hi Gottfried,
Was genau meinst du mit Auswahlmenü und was genau wähslt du da
aus?
Warum munich auf negative zahlen aufgrund deiner Anfrage kommt
verstehe ich eh nicht :smile:
Jedes Bild hat Werte für Links, Oben, breite , Höhe.
Es gibt da mehrere Möglichkeiten wie deine „Auswahl“ aufgebaut
sein könnte, deshalb bitte mehr Infos dazu.
Gruß
Reinhard

Gottfried ist nur meine Email-Adresse. Ich heiße Tobias.

Mit Auswahl meine ich eine Combobox, die moment aus 10 Einträge von 5 bis 10 besteht.
Ich will einen Kalender erstellen, in dem ich Ereignisse platziere. Die Combobox wird dabei gewählt um die Tage zwischen Ereignis A und B zu kennzeichnen. Wird z.B in der Combobox der Eintrag „5“ gewählt, so sind zwischen den Marken von A und B 5 Tage. Bei entsprechend anderer Wahl sind es mehr oder weniger Tage.
Das was Munich geschrieben hat funktioniert wunderbar. Die Bilder können nicht weiter als an der linken Rand verschoben werden. Bei entsprechender Verschiebung nach rechts kann ich die Marken dann richtig platzieren. Ein kleines Problem dabei ist nur, dass dies nur funktioniert, wenn die Spaltenbreite nicht verändert wird.
Wäre also schön, wenn ich auch dafür noch eine Lösung finde.:smiley:

Hier noch ein kleiner Ausschnitt aus meinem momentanen Code:
Private Sub ComboBox1_Change()
Dim status As String
status = ComboBox1.Text
Select Case status
Case „5“
'VPH
Sheets(„VPH“).Shapes(„Picture 161“).IncrementLeft -100000
Sheets(„VPH“).Shapes(„Picture 161“).IncrementLeft 2307
'VPAH
Sheets(„VPAH“).Shapes(„Picture 77“).IncrementLeft -100000
Sheets(„VPAH“).Shapes(„Picture 77“).IncrementLeft 2309
'VPPR
Sheets(„VPPR“).Shapes(„Picture 77“).IncrementLeft -100000
Sheets(„VPPR“).Shapes(„Picture 77“).IncrementLeft 2307
'VPH
Sheets(„VPKR“).Shapes(„Picture 141“).IncrementLeft -100000
Sheets(„VPKR“).Shapes(„Picture 141“).IncrementLeft 2307

Case „6“
'VPH
Sheets(„VPH“).Shapes(„Picture 161“).IncrementLeft -100000
Sheets(„VPH“).Shapes(„Picture 161“).IncrementLeft 2282
'VPAH
Sheets(„VPAH“).Shapes(„Picture 77“).IncrementLeft -100000
Sheets(„VPAH“).Shapes(„Picture 77“).IncrementLeft 2284

End Select
End Sub

Ich habe übrigens noch ein weiteres Problem.

Nachdem die verschobenen Grafiken Marken in einem Kalender darstellen, ich aber ab und an Teile(Wochen) dieses Kalender nicht anzeigen möchte, sollten auch die enstprechenden Teile dieser Grafiken ausgeblendet werden.

Ist das irgendwie möglich?
Momentan verschiebt Excel mir die Grafiken und „schneidet“ und blendet nicht die entsprechenden Teile aus.

Danke!!!

Hi Tobias,

Mit Auswahl meine ich eine Combobox, die moment aus 10
Einträge von 5 bis 10 besteht.

10?, komme auf 6 *g

Ich will einen Kalender erstellen, in dem ich Ereignisse
platziere. Die Combobox wird dabei gewählt um die Tage
zwischen Ereignis A und B zu kennzeichnen. Wird z.B in der
Combobox der Eintrag „5“ gewählt, so sind zwischen den Marken
von A und B 5 Tage. Bei entsprechend anderer Wahl sind es mehr
oder weniger Tage.

Also die Combobox nimmt Werte zwischen 5 und 10 ein.

Das was Munich geschrieben hat funktioniert wunderbar. Die
Bilder können nicht weiter als an der linken Rand verschoben
werden. Bei entsprechender Verschiebung nach rechts kann ich
die Marken dann richtig platzieren. Ein kleines Problem dabei
ist nur, dass dies nur funktioniert, wenn die Spaltenbreite
nicht verändert wird.

Das verschieben macht der Makrorekorder. Warum nicht gleich absolut positionieren? lege dir so eine Tabelle an in z.B. Blatt3

Tabellenblattname: Tabelle3
 A B C D E 
1 VPH VPAH VPPR VPKR 
2 5 234 334 117 18 
3 6 112 127 345 20 
4 7 213 456 678 22 
5 8 112 33 43 23 
6 9 34 4 34 24 
7 10 22 1000 5 27 

Dann diesn Code benutzen:

Option Explicit
Option Base 1
Private Sub ComboBox2\_Change()
Dim Wert, n As Byte, Links, Spa As Integer, Spalten As Integer, Zeilen As Long
Wert = Array("5", "6", "7", "8", "9", "10")
With Worksheets("Tabelle3")
 For n = 1 To 6
 Select Case Wert(n) = CStr(ComboBox2)
 Case True
 Spalten = .Range("IV1").End(xlToLeft).Column
 Zeilen = .Range("A65536").End(xlUp).Row
 For Spa = 2 To Spalten
 Worksheets(Cells(1, Spa)).Shapes("Picture 4").Left = Application.WorksheetFunction.VLookup(Wert(n), .Range(Cells(2, 2), Cells(Zeilen, Spalten)), Spa, 0)
 Worksheets(Cells(1, Spa)).Shapes("Picture 5").Left = Application.WorksheetFunction.VLookup(Wert(n), .Range(Cells(2, 2), Cells(Zeilen, Spalten)), Spa, 0)
 Next Spa
 Exit For
 Case Else
 End Select
 Next n
End With
End Sub

Noch ist ein fehlerchen drin in der left-Zuweisung, aber vielleicht
ist das egal. Falls du auch Spaltenbreiten verändern willst ist der Code eh hinfällig.
Angenommen Bild 1 soll immer links oben die gleichen Werte haben wie G34:
Worksheets(„VPS“).Shapes(„Picture1“).Left=Worksheets(„VPS“).Range(„G34“).left
Worksheets(„VPS“).Shapes(„Picture1“).top=Worksheets(„VPS“).Range(„G34“).top

Und falls die Breite von G34 wichitg ist:
Worksheets(„VPS“).Shapes(„Picture1“).width=Worksheets(„VPS“).Range(„h34“).left-Worksheets(„VPS“).Range(„G34“).left

Gruß
Reinhard

Erst noch mal Danke Reinhard!

Worksheets(„VPS“).Shapes(„Picture1“).Left=Worksheets(„VPS“).Range(„G34“).left
Worksheets(„VPS“).Shapes(„Picture1“).top=Worksheets(„VPS“).Range(„G34“).top

Das sind beinahe die Methoden die ich Suche.
Ich möchte die Grafiken immer an dem rechten Ende einer bestimmen Zelle platzieren. Gibt es einen ähnlichen Befehl wie die oben für rechts. Einfach „Right“ funktioniert leider nicht.

DANKE!!!

Worksheets(„VPS“).Shapes(„Picture1“).Left=Worksheets(„VPS“).Range(„G34“).left
Worksheets(„VPS“).Shapes(„Picture1“).top=Worksheets(„VPS“).Range(„G34“).top
Das sind beinahe die Methoden die ich Suche.
Ich möchte die Grafiken immer an dem rechten Ende einer
bestimmen Zelle platzieren. Gibt es einen ähnlichen Befehl wie
die oben für rechts. Einfach „Right“ funktioniert leider
nicht.

Hi Tobias,
gibt es glaub nicht, aber brauchst du ja auch nicht
die linke Ecke von H 34 ist die rechte Ecke von G 34
die Untere Linie von G 34 ist die obere Linie(Top) von G 35
Gruß
Reinhard

Hi Tobias,
gibt es glaub nicht, aber brauchst du ja auch nicht
die linke Ecke von H 34 ist die rechte Ecke von
G 34
die Untere Linie von G 34 ist die obere Linie(Top) von
G 35
Gruß
Reinhard

Das ist mir klar. Da sich meine Grafiken aber über mehrere Zellen ziehen und nunmal die rechten Zellen die Referenzzellen sind wäre ein „right“ Befehl hilfreich gewesen.

Aber trotzdem Danke für deine Mühe!!!

gibt es glaub nicht, aber brauchst du ja auch nicht
die linke Ecke von H 34 ist die rechte Ecke von
G 34
die Untere Linie von G 34 ist die obere Linie(Top) von
G 35

Das ist mir klar. Da sich meine Grafiken aber über mehrere
Zellen ziehen und nunmal die rechten Zellen die Referenzzellen
sind wäre ein „right“ Befehl hilfreich gewesen.

Hi Tobias,
mir unklar was dich an dem kleine Offsetbefehl so stört. Nagut, basteln wir halt eine Right2 Funktion*g

Option Explicit
Sub tt()
'MsgBox Right2(Range("IV3"))
MsgBox Right2(Range("G34"))
MsgBox Range("G34").Offset(0, 1).Left
End Sub

Function Right2(Zelle As Range)
If Zelle.Column Gruß
Reinhard

Vielen Dank Reinhard.
Ich sehe, du verstehst dein Handwerk :wink:.

Ich glaube ich suche aber eine andere Lösund für das Problem. Ich will mit CheckBoxen Bereiche(Spalten) des Kalenders ausblenden können. Falls in diesem Bereich eine Grafik ist, soll dies auch bereichsweise mit ausgeblendet werden. Das funktioniert aber leider nicht. Da die Grafiken nur Marken darstellen, werde ich versuchen, dieses vorerst mit Zellenformatierungen zu lösen. Dann hat sich dieses „right“ Problem auch gelöst.