Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1700to1704
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

Alle Images auf Userform mit gleichem Codeinhalt

Alle Images auf Userform mit gleichem Codeinhalt
20.07.2019 13:48:16
Dieter(Drummer)
Guten Tag VBA Spezialisten/innen,
auf einer Userform, Name "usf1", sind mehrere Images, z.B. img1, img2 etc., mit Pictures.
Der folgende Code legt z.B. für "img2" folgendes Code fest und funktioniert:
1) Eigenschaft: PictureSizeMode = 1 'Stretch
2) Die Höhe und Breite des Image. Ist in Eigenschaften schon eingestellt
3) Image wird auf Vordergrund gestellt, mit ".ZOrder msoBringToFront"
4) Bei Klick auf das Image wird es vergrößert
5) Bei 2. Klick, wird Höhe und Breite des Image, wieder auf Urzustand gesetzt.
Nun meine Frage:
Da ich für jedes Image den Code so festlegen muss, wie für "img2", suche ich einen Code, der alle Images/Pictures, fangen alle mit Namen "img" an mit zus. Zahl an, auf den Code, wie in "img2" und wieder zurück auf den Anfangstand der Höhe und Breite setzt.
Also den Inhalt des Code "img2" gültig für alle Images hat.
Mit der Bitte um Hilfe,
grüßt, Dieter(Drummer)

Private Sub img2_Click()
Me.img2.PictureSizeMode = 1 'Stretch
If Me.img2.Height = 18 Then 'Anfangstand
Me.img2.Width = 18
Me.img2.ZOrder msoBringToFront 'in Vordergrund
Me.img2.Height = 25 'Vergrößerung
Me.img2.Width = 25
Else
Me.img2.Height = 18 'Zürück auf Anfangsstand
Me.img2.Width = 18
End If
End Sub

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Images auf Userform mit gleichem Codeinhalt
20.07.2019 14:06:25
onur
Versuch das mal:
Private Sub img1_Click()
Modify
End Sub
Private Sub img2_Click()
Modify
End Sub
Private Sub Modify()
If Me.ActiveControl.Height = 18 Then 'Anfangstand
Me.ActiveControl.Width = 18
Me.ActiveControl.ZOrder msoBringToFront 'in Vordergrund
Me.ActiveControl.Height = 25 'Vergrößerung
Me.ActiveControl.Width = 25
Else
Me.ActiveControl.Height = 18 'Zürück auf Anfangsstand
Me.ActiveControl.Width = 18
End If
End Sub

AW: Danke Onur, aber es kommt ein Fehhler ...
20.07.2019 14:18:03
Dieter(Drummer)
... Laufzeitfehler "91", Objektvariable oder With-Blockvariable nicht festgelegt.
Die Zeile wird gelb markiert:

If Me.ActiveControl.Height = 18 Then 'Anfangstand

Den Cod habe ich unter der Userform.
Hast Du noch eine Idee?
Gruß, Dieter(Drummer)
Anzeige
AW: Danke Onur, aber es kommt ein Fehhler ...
20.07.2019 14:36:05
onur
Hast Recht, hätte ich besser Testen sollen (Mit Buttons klappt es aber)!
Private Sub image1_Click()
Modify ("Image1")
End Sub
Private Sub image2_Click()
Modify ("Image2")
End Sub
Private Sub Modify(Im)
Dim Ctrl
For Each Ctrl In Me.Controls
If Ctrl.Name = Im Then
a = Me.Controls(Ctrl.Name).Height
If Me.Controls(Ctrl.Name).Height = 18 Then 'Anfangstand
Me.Controls(Ctrl.Name).Width = 18
Me.Controls(Ctrl.Name).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Ctrl.Name).Height = 25 'Vergrößerung
Me.Controls(Ctrl.Name).Width = 25
Else
Me.Controls(Ctrl.Name).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Ctrl.Name).Width = 18
End If
End If
Next
End Sub

Anzeige
AW: Sorry, aber neuer Fehler ...
20.07.2019 14:50:40
Dieter(Drummer)
... "Fehler beim Kompilieren. Argument ist nicht Optional.".
Zeile wird gelb markiert: "Private Sub img2_Click()" und "Modify" wir blau markiert.
Hier mal meine Testdatei zur besseren Übersicht: https://www.herber.de/bbs/user/131005.xlsm
und evtl.ist der Fehler zu beheben.
Gruß, Dieter(Drummer)
AW: Danke Onur, aber es kommt ein Fehhler ...
20.07.2019 14:39:24
onur
Oder besser so:
Private Sub image1_Click()
Modify ("Image1")
End Sub
Private Sub image2_Click()
Modify ("Image2")
End Sub
Private Sub Modify(Im)
If Me.Controls(Im).Height = 18 Then 'Anfangstand
Me.Controls(Im).Width = 18
Me.Controls(Im).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Im).Height = 25 'Vergrößerung
Me.Controls(Im).Width = 25
Else
Me.Controls(Im).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Im).Width = 18
End If
End Sub

Anzeige
AW: Gleicher Fehler wie gerade gensendet. owT
20.07.2019 14:52:36
Dieter(Drummer)
AW: Es kommt der Fehler ...
20.07.2019 14:59:15
Dieter(Drummer)
... Variable nicht definiert, bei: und markiert "(Image2).
Die Images fangen erst bei "img2" an.
Gruß, Dieter(Drummer)
AW: Es kommt der Fehler ...
20.07.2019 15:39:17
onur
Du must noch die Namen DEINER Imageboxen eintragen.
Also z.B. das hier
Private Sub Private Sub img1_Click()_Click(
Modify ("img1")
End Sub

statt
Private Sub image1_Click()
Modify ("Image1")
End Sub

usw.
Ich muss mal meine Verwunderung ausdrücken
20.07.2019 15:04:42
Zwenn
Hallo Dieter,
ohne Dir zu nahe treten zu wollen, wundere ich mich des Öfteren über Fragen von Dir. Nun gibt es keine dummen Fragen sagt man und da gehe ich auch ziemlich weit mit. Was mich aber wundert ist, dass Du viele Deiner Fragen überhaupt (noch) stellen musst.
Ich selbst bin seit wenigen Jahren hier im Forum aktiv. Wenn ich Deinen Namen recherchiere, dann finde ich auf der ersten Seite der Suchergebnisse bereits eine Frage aus 2008 von Dir. Du gibst aber heute noch "Basiskenntnisse in VBA" als Lvl an. Nun ist es so, dass Deine Fragen oft auch zu dieser Angabe passen. Das bedeutet aber auch, nach mindestens 11 Jahren(!) stellst Du Fragen, deren Beantwortung einem VBA-Entwickler mit 11 Jahren Erfahrung eigentlich nicht schwer fallen sollten. Wobei jeder den Wald manchmal vor lauter Bäumen nicht sieht. Da nehme ich mich gar nicht aus.
Als Beispiel nehme ich mal direkt Deine Frage aus diesem Thread. Du fährst einen Ansatz über die Namen der Bildobjekte. Da frage ich mich, warum kommst Du nicht selbst auf die Idee, dass es sich bei allen anzusprechenden Objekten um Objekte der gleichen Klasse handelt, die man deshalb z.B. mit For Each durchgehen kann. Nun hat onur Dir einen Ansatz gegeben, bei dem bei Dir ein Fehler auftaucht, den Du aber offenbar nicht selber einordnen kannst.
Ich halte Dich weiß Gott nicht für blöd, habe aber das Gefühl, Du hast viele "Wissensfetzen" in Deinem Kopf angesammelt, die Du nicht in Zusammenhang bringen kannst. Ich habe auch keine Ahnung welchen Hintergrund Du zum Thema Programmieren hast, tippe aber darauf, dass Du das bisher nicht strukturiert gelernt hast.
Deshalb der konstruktiv gemeinte Rat, beschäftige Dich mal grundsätzlich mit Programmierung. In den meisten Sprachen funktionieren die Grundlagen gleich und werden nur unterschiedlich aufgeschrieben. Sie haben also eine andere Syntax, aber die gleiche Semantik.
Falls Du die Muße dazu hast, kannst Du Deine ganzen "Wissensfetzen" ja mal strukturieren, indem Du einmal systematisch lernst, wie Programmierung funktioniert. Zum Beispiel unter folgendem Link (auch wenn da C# verwendet wird, das spielt absolut keine Rolle):
http://entwickler.de/online/development/einfuehrung-programmierung-grundlagen-teil-1-197189.html
Jetzt bist Du hoffentlich nicht sauer oder fühlst Dich angegriffen. Wie gesagt wundert mich Dein Verhalten einfach und jetzt wollte ich Dich an meinen Gedanken teilhaben lassen.
Viele Grüße,
Zwenn
Anzeige
AW: Danke Zwenn für deine offene ...
20.07.2019 15:26:11
Dieter(Drummer)
Hallo Zwenn,
... Mitteilung. Da kann ich einiges aus deinen Zeilen nachvollziehen und bin nicht sauer.
Mit 75 Jahren halte ich mich immer noch für einen VBA Anfänger, gegenüber den Spezialisten/innen.
Diese Qualifikation werde ich nicht mehr erreichen. Ich mache es aus reinem Spass und manchmal kommt mit Hilfe des Forums etwas vernünftiges dabei heraus. Mein Bruchstückhaftes Wissen über VBA ist und war auch immer aus reinem Hobby heraus. Ich kann auch verstehen, wenn meine Fragen manche Person hier im Forum nerven.
Wobei ich persönliche, negative Anmerkungen, die immer wieder von einer Person auftauchen, ognoriere. Auch meine Frage zu ignorieren, steht jeder Person natürlich zu und dafür habe ich auch Verständnis.
Ich versuche besser zu werden, aber es werden wohl immer Bruchstücke an VBA Wissen fehlen. Meinen Status als VBA Anfänger höher zu setzen, wäre unangemessen und schadet diesem excellenten Forum nicht.
Danke für deine offenen Worte und
Gruß, Dieter(Drummer)
Anzeige
AW: Danke Zwenn für deine offene ...
20.07.2019 15:40:24
Zwenn
Hallo Dieter,
ich bin nicht genervt, ich habe mich halt einfach nur gewundert. Dass Du Rentner bist habe ich Deiner Visitenkarte entnommen. Nichts desto Trotz hast Du ja offenbar Spaß an der ganzen Thematik. Das finde ich total gut. Ich weiß nur aus eigener Erfahrung, dass es noch mehr Spaß macht, wenn man die Zusammenhänge besser versteht :-)
Hier ist die Lösung für Dein Problem auf Basis von onurs Arbeit. Du musst natürlich den erwarteten Parameter übergeben und auch die Variable a muss deklariert werden:

Option Explicit
'Mx: Images Eigenschaften auf PictueSizeMode 1 = Stretch stehen
Private Sub img2_Click()
Modify "img2"
End Sub
Private Sub img3_Click()
Modify "img3"
End Sub
Private Sub img4_Click()
Modify "img4"
End Sub
Private Sub img5_Click()
Modify "img5"
End Sub
Private Sub img6_Click()
Modify "img6"
End Sub
Private Sub Modify(Im As String)
Dim Ctrl As Control
Dim a As Long
For Each Ctrl In Me.Controls
If Ctrl.Name = Im Then
a = Me.Controls(Ctrl.Name).Height
If Me.Controls(Ctrl.Name).Height = 18 Then 'Anfangstand
Me.Controls(Ctrl.Name).Width = 18
Me.Controls(Ctrl.Name).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Ctrl.Name).Height = 25 'Vergrößerung
Me.Controls(Ctrl.Name).Width = 25
Else
Me.Controls(Ctrl.Name).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Ctrl.Name).Width = 18
End If
End If
Next
End Sub

Viele Grüße,
Zwenn
Anzeige
AW: Danke Zwenn für deine offene ...
20.07.2019 15:50:43
onur
Alle Zeilen mit a könen sowieso weg, ist nur Restmüll aus der Testphase.
Jou, habe ich auch grade gesehen
20.07.2019 15:54:19
Zwenn
Nochmal "entrümpelt"

Option Explicit
'Mx: Images Eigenschaften auf PictueSizeMode 1 = Stretch stehen
Private Sub img2_Click()
Modify "img2"
End Sub
Private Sub img3_Click()
Modify "img3"
End Sub
Private Sub img4_Click()
Modify "img4"
End Sub
Private Sub img5_Click()
Modify "img5"
End Sub
Private Sub img6_Click()
Modify "img6"
End Sub
Private Sub Modify(Im As String)
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If Ctrl.Name = Im Then
If Me.Controls(Ctrl.Name).Height = 18 Then 'Anfangstand
Me.Controls(Ctrl.Name).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Ctrl.Name).Height = 25 'Vergrößerung
Me.Controls(Ctrl.Name).Width = 25
Else
Me.Controls(Ctrl.Name).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Ctrl.Name).Width = 18
End If
End If
Next
End Sub

Anzeige
AW: Danke Zwenn für die prima Lösung und ...
20.07.2019 16:05:38
Dieter(Drummer)
Hallo Zwenn,
... ich habe noch die "Stretch ..." Zeile (Fett) hinzugefügt. Jetzt geht es perfekt.
Herzlichen Dank and Dich und natürlich auch an Onur.
Ich kann vor eurem Wissen nur den Hut ziehen.
Manchmal wundert mich wohl auch, das VBA Anfänger mit Codes kommen, die unmöglich von einem Amfänget stammen können und keinen Hinweis haben, dass sie nicht selbst erzeugt sind. Schade ...
Danke nochmal an Dich und Onur und
Gruß, Dieter(Drummer)
Private Sub Modify(Im As String)
Dim Ctrl As Control
Dim a As Long
For Each Ctrl In Me.Controls
If Ctrl.Name = Im Then
a = Me.Controls(Ctrl.Name).Height
If Me.Controls(Ctrl.Name).Height = 18 Then 'Anfangstand
Me.Controls(Ctrl.Name).PictureSizeMode = 1 'Stretch
Me.Controls(Ctrl.Name).Width = 18
Me.Controls(Ctrl.Name).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Ctrl.Name).Height = 25 'Vergrößerung
Me.Controls(Ctrl.Name).Width = 25
Else
Me.Controls(Ctrl.Name).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Ctrl.Name).Width = 18
End If
End If
Next
End Sub

Anzeige
Die Lösung stammt von onur ...
20.07.2019 16:14:01
onur
... nicht von mir.
AW: @Onur und @Zwenn. Danke für ...
20.07.2019 16:28:50
Dieter(Drummer)
Hallo Onur, Hallo Zwenn,
... eine prima funktionierende Lösung. Habe die "Stretch" Zeile noch hinzugefügt und es klappt alles.
Dank an für die Hilfe, Geduld und auch die Anmerkungen ...
Gruß, Dieter(Drummer)
Hier der jetzige, funktionierende Code:
'Code von Herber: Onur mit Ergänzung von Zwenn, am 20.07.2019
Private Sub img2_Click()
Modify "img2"
End Sub
Private Sub img3_Click()
Modify "img3"
End Sub
Private Sub img4_Click()
Modify "img4"
End Sub
Private Sub img5_Click()
Modify "img5"
End Sub
Private Sub img6_Click()
Modify "img6"
End Sub
Private Sub Modify(Im As String)
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If Ctrl.Name = Im Then
If Me.Controls(Ctrl.Name).Height = 18 Then 'Anfangstand
Me.Controls(Ctrl.Name).PictureSizeMode = 1 'Stretch
Me.Controls(Ctrl.Name).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Ctrl.Name).Height = 25 'Vergrößerung
Me.Controls(Ctrl.Name).Width = 25
Else
Me.Controls(Ctrl.Name).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Ctrl.Name).Width = 18
End If
End If
Next
End Sub

Anzeige
AW: @Onur und @Zwenn. Danke für ...
20.07.2019 16:29:43
onur
Gern geschehen!
AW: @Onur und @Zwenn. Danke für ...
20.07.2019 16:32:47
onur
Ich hatte die Sub "Modify" modifiziert:
Nimm das hier (und füge deine Änderung hinzu)
Private Sub Modify(Im)
If Me.Controls(Im).Height = 18 Then 'Anfangstand
Me.Controls(Im).Width = 18
Me.Controls(Im).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Im).Height = 25 'Vergrößerung
Me.Controls(Im).Width = 25
Else
Me.Controls(Im).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Im).Width = 18
End If
End Sub

AW: Danke Dir Onur...
20.07.2019 18:14:55
Dieter(Drummer)
Hallo Onur,
jetzt habe ich den Code, der absolut wie gewüncht funktioniert. Muste nur noch diverse Zeilen (Fett) mit einfügen.
Danke für Deine Geduld und Hilfe.
Gruß, Dieter(Drummer)
Private Sub Modify(Im As String)
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If Ctrl.Name = Im Then
If Me.Controls(Im).Height = 18 Then 'Anfangstand
Me.Controls(Ctrl.Name).PictureSizeMode = 1 'Stretch
Me.Controls(Im).Width = 18
Me.Controls(Im).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Im).Height = 25 'Vergrößerung
Me.Controls(Im).Width = 25
Else
Me.Controls(Im).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Im).Width = 18
 End If
End If
Next
End Sub

AW: Danke Dir Onur...
20.07.2019 18:21:28
onur
Hast wieder die ALTE Version genommen. Die beiden äusseren Schleifen sind völlig unnötig:
Private Sub Modify(Im As String)
If Me.Controls(Im).Height = 18 Then 'Anfangstand
Me.Controls(Im).PictureSizeMode = 1 'Stretch
Me.Controls(Im).Width = 18
Me.Controls(Im).ZOrder msoBringToFront 'in Vordergrund
Me.Controls(Im).Height = 25 'Vergrößerung
Me.Controls(Im).Width = 25
Else
Me.Controls(Im).Height = 18 'Zürück auf Anfangsstand
Me.Controls(Im).Width = 18
End If
End Sub

AW: Danke Dir nochmal Onur...
20.07.2019 18:56:10
Dieter(Drummer)
... habe den Code jetzt von Dir genommen und alles funktioniert.
Danke Dir für Ausdauer und Hilfe,
Gruß, Dieter(Drummer)
Es ist doch nicht das ggw Alter, ...
20.07.2019 15:58:28
Luc:-?
…Dieter,
sondern das späte des Einstiegs in die Welt des Pgmmierens, verbunden mit keinerlei systematischer Erlernung von GrundKenntnissen darin. Das, was andere deines Alters* schon vor Jahrzehnten an Grundlagen erlernten und ihnen heute hilft, auch andere Sprachen mit etwas LernAufwand zu verstehen, versuchst du über Erfragen zu erlernen, wobei du tatsächlich manche Fragen nicht stellen würdest, hättest du die Grundlagen verinnerlicht. Ein Forum ist als VBA-Fernkurs nunmal nicht besonders gut geeignet, obwohl es mitunter auch geht (Bsp: Hajo, der vor ca 18-20 Jahren auch so angefangen haben soll).
Aber auch ganz ohne Pgmmierung tun sich manche dieser Altersgruppe schwer mit EDV, wenn sie vorher nie damit zu tun hatten. Ich kenne mehrere solcher Fälle, weshalb ich das in bedingtem Maße auch verstehe. Aber irgendwann machen's dann doch Übung und Gewöhnung. Nur 11 Jahre sind schon 'ne lange Zeit und mit von Anfang an systematischem Herangehen wären wohl etliche Unsicher­heiten längst Vergangenheit. VBA ist keine Magie, sondern einfach nur Anweisungen an quasi einen fleißigen, aber äußerst dummen Lehrling (neudeutsch Azubi) oder begriffsstutzigen Aushelfer, dem man alles ganz genau sagen muss (solche gibt's auch real!).
* Bspw H.W.Herber, auch robert, nur wenige Jahre jünger Andere und auch ich.
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

AW: Es ist doch nicht das ggw Alter, ...
20.07.2019 16:17:38
Dieter(Drummer)
Hallo Luc :-?,
es gibt Menschen, denen fällt das logische bei VBA leicht, mir nicht.
Neben meinem Hauptberuf als Gschäftsführer im Zeitungsbereich, zusätzlich 50 Jahre in versch. Bands nebenbei Schlagzeug gespielt und hatte viele Auftritte, Mir fehlte einfach die Zeit, um mich tiefer mit VBA zu beschäftigen.
Ich bemühe mich, aber es werden immer Lücken bleiben. Evtl. halte ich mich einfach etwas aus dem Forum zurück, werde aber dennoch täglich mit lesen, soweit ich kann.
Gruß Dieter(Drummer)
Das ist ja gerade auch, das Bemühen, ...
22.07.2019 14:48:13
Luc:-?
…das man bei manchem jungen oder jüngeren Fragensteller mitunter vermisst. Und mitunter führt die Kombination von Bemühen und Zeitmangel zu extremer Selbstausbeutung, was letztlich kaum mal honoriert wird. Extremes Bsp: In meiner Jugend pflegte der damals jüngste Prof der HU zu Berlin (wohl Biologie) unter der AufgabenBelastung stöhnenden Studenten zu entgegnen, der Tag hat 24 Stun­den… Und bei meiner letzten Berufstätigkeit haben die Überstunden nebst Heim(-Entwicklungs-)arbeit (VBA) auch niemanden inter­es­siert.
Luc :-?
AW: Nun ja ...
22.07.2019 16:15:54
Dieter(Drummer)
Hallo Luc :-?,
... so hat jeder seinen Lebensweg, den jeder so gut wie es geht zu meistern versucht ...
Excel mit VBA ist und bleibt einfach nur ein Hobby für mich, ohne es dadurch abzuwerten.
An Qualität in diesem Forum mangelt es ja nicht, nur bei manchen Personen an Umgamgsformen und Benehmen.
Das hat dieses excellente Forum NICHT verdient! Persönliche, öffentliche Angriffe in verbaler Form ... man oh Mann ...
Nun genug genug geschrieben.
Gruß, Dieter(Drummer)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige