Live-Forum - Die aktuellen Beiträge
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
Fehleingabe oder Abbrechen bei Inputbox
16.07.2019 09:42:27
Dieter(Drummer)
Guten Tag VBA Spezialisten/innen.
Wie mus der Code sein, dass bei Fehleingabe der ID, oder bei Klick auf Button "Abbrechen", der gesamte Vorgang beendet wird, ohne Hinweis auf "Debugging" und "Laufzeit Fehler 13"?
Dieser Code, der funktioniert, wurde mir von "Herber: Regina Resch-Jansen am 14.07.2019" feundlicher Weise gemacht. Dafür nochmal Danke!
Private Sub CommandButton1_Click()
Dim lng_id As Long
lng_id = InputBox("ID?")
Set CommandButton1.Picture = Application.CommandBars.FindControl(ID:=lng_id).Picture
CommandButton1.PicturePosition = fmPicturePositionLeftCenter 'Picture Ausrichtung links vom  _
Buttontext
End Sub

Mit der Bitte um Hilfe.
Gruß,
Dieter(Drummer)

32
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehleingabe oder Abbrechen bei Inputbox
16.07.2019 10:10:28
Beverly
Hi Dieter,
z.B. so:
Dim var_id As Variant
var_id = Application.InputBox("ID?", , , , , , , 1)
If var_id = 0 Then
MsgBox "abgebrochen"
Else
MsgBox "mach was"
End If


Ergänzung/Korrektur...
16.07.2019 10:12:29
Beverly
...funktioniert auch mit Deklarierung als Long:
Dim lng_id As Long
lng_id = Application.InputBox("ID?", , , , , , , 1)
If lng_id = 0 Then
MsgBox "abgebrochen"
Else
MsgBox "mach was"
End If


AW: Herzlichen Dank, Karin, geht prima ...
16.07.2019 10:26:46
Dieter(Drummer)
Hallo Karin,
... habe mir bei Suche im Netz einen abgebrochen und es nicht geschafft.
Nun klappt es wie gewünscht. Mein jetziger Code:
'Herber: von Regina Resch-Jansen am 14.07.2019 15:43:21
'Mit Abbruch Ergänzung von: Herber, Beverly am 16.07.2019 10:12:29
Private Sub CommandButton1_Click()
Dim lng_id As Long
lng_id = Application.InputBox("ID?", , , , , , , 1)
If lng_id = 0 Then
Exit Sub
Else
Set CommandButton1.Picture = Application.CommandBars.FindControl(ID:=lng_id).Picture
CommandButton1.PicturePosition = fmPicturePositionLeftCenter 'Picture Ausrichtung links vom  _
_
Buttontext
End If
End Sub
Nochmal Danke für schnelle und prima Lösung.
Gruß, Dieter(Drummer)
PS Habe noch festgestellt, dass bei Eingabe der ID "1", das Bild wieder gelöscht wird.
Anzeige
Weshalb verwendest du ...
16.07.2019 11:06:42
Beverly
Hi Dieter,
...denn Exit Sub? Ist doch nicht erforderlich - wenn du keine Aktion ausführen willst bei Abbruch, reicht doch folgendes aus:
If lng_id  0 Then
' hier dein Code was gemacht werden soll
End If


AW: Weshalb verwendest du ...
16.07.2019 12:18:37
Dieter(Drummer)
Danke Karin für Info/Frage.
Du hast Recht, Exit Sub, wird nicht gebraucht, hab es enfernt und es funktioniert wie gewünscht.
In diesem Code wird ja explicit CommandButton1 genutzt. Wie müsste den der Code sein, wenn ich mehrere, verschiedene Buttons, hintereinder ansprechen und eine andere ID Nummer angeben möchte?
Da komm ich bisher auch nicht weiter.
Ich habe Verständnis dafür, wenn du mir da nicht weiter helfen könntest, aus immer welchen Gründen.
Mit Gruß und Danke ...
Dieter(Drummer)
Anzeige
Wie meinst du das...
16.07.2019 14:24:27
Beverly
Hi Dieter,
...mehrere Buttons intereinander und andere ID angeben? Du kannst denselben Button doch mehrmals aufrufen und immer eine neue ID eingeben.


AW: Wie meinst du das...
16.07.2019 15:12:59
Dieter(Drummer)
Hallo Karin,
dass ich dem einen Button hintereinander immer wieder eine neue ID eingebn kann, weiß ich.
Ich dachte eben, wenn dass z.B. 3 versch. Buttons da sind, ich mal den Button1, dann Button2, dann Button3 etc., hinter einander eine ID eingeben kann.
Ich kann natürlich auch, wenn Button1 mit ID erledigt, diesen Kopieren und dann den Code wieder neue aufrufen für Button1 usw. So habe ich dann natürlich soviele neue Buttons, mit jeweils eigenem ID, wie ich möchte. Diese Idee habe ich aber erst jetzt, nach deinem Hinweis. Danke.
Den Kopiercode muss ich erst mal per Makrorecoder erstellen und dann hinzufügen.
Danke für deine Info und Meldung.
Gruß, Dieter(Drummer)
Anzeige
Wenn du gleichzeitig...
16.07.2019 16:55:25
Beverly
Hi Dieter,
...mehrere IDs verarbeiten willst - weshalb benutzt du dann nicht anstelle der InputBox ein UserForm mit mehreren TextBoxen?


AW: Wenn du gleichzeitig...
16.07.2019 19:10:10
Dieter(Drummer)
Danke Karin,
für Hinweis und da werde ich mich auch mit beschäftigen.
Mir ging es ursächlich ja darum. per Id die Shapes in den CommandButton zu bekommen und das funktioniert.
Das kopieren des Buttons habe ich geschafft, aber ganz ohne Select habe ich es nicht geschafft.
Desweiteren die Caption im neue kopierten Button, also z.B. CommandButton2, habe ich nicht erreicht. Der neu kopierte Button hat ja die Caption "CommandButton1". Ideal wäre, wenn der neue, kopierte Button, die Caption am Ende, also statt 1 die 2 erhält. So würde der neue Button die richtige Caption haben.
Aber für solche Spezialitäten fehlt mir absolut des Wissen.
Dennoch lieben Dank, Karin, für deine bisherige Hilfe.
Gruß, Dieter(Drummer)
Mein jetziger Code für Kopieren:
Private Sub Kopie_Button()
Worksheets("Tabelle1").Shapes("CommandButton1").Copy
Range("E18").Select
ActiveSheet.Paste
End Sub

Anzeige
Weshalb willst du den Button...
16.07.2019 23:40:42
Beverly
Hi Dieter,
...überhaupt kopieren? Du kannst doch neue Buttons auch per Code erstellen, benennen und auch die Caption ändern:
    Dim oobButton As OLEObject
Set oobButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=Range("E18").Left, _
Top:=Range("E18").Top, Width:=100, Height:=30)
With oobButton
.Name = "CommandButton2"
.Object.Caption = "Button 2"
End With
Aber was bringt dir das ganze denn? Den Code für den Button übernimmt es doch weder beim Kopieren noch beim neu Erstellen...


Anzeige
AW: Weshalb willst du den Button...
17.07.2019 09:05:46
Dieter(Drummer)
Liebe Karin,
erstmal Danke für deine Hilfe mit Codes und Anregungen.
Du hast natürlich Recht, dass der Code (mit "CommandButton1"), im neuen Button nicht übernommen wird.
Dem neuen Button kann ich ja manuell eine Code zuweisen, welchen auch immer.
Mir ging es hauptsächlich darum, dass ich per ID das jeweilige Shape in den Button einfügen kann. Das klappt ja prima mit deinem Code "Inputbox".
Ideal wäre natürlich. wenn der neue Button auch den Code hätte, um per ID ein Shape einzufügen. Natürlich der Code mit der Inputbox. Da müsste dann wohl der neue Namen des Buttons sein, damit per ID ein evtl. anderes Shape eingefügt werden kann. Im ursächlichen Code ist ja der "CommandButton1" integriert.
Aber einen Code dafür, das kann ich nicht erwarten/verlangen! Es wurde schon sehr gut geholfen.
Gruß an Dich und einen erfreulichen Tag,
Dieter(Drummer)
Anzeige
Sicher kann man das...
17.07.2019 10:15:19
Beverly
Hi Dieter,
...realisieren, und zwar mit Klssenprogrammierung, aber beschreibe doch mal genau, was du eigentlich machen willst - weshalb benötigst du überhaupt so viele Button mit ein und demselben Code (nur um die ID auswählen zu können und das Shape einzufügen)?


AW: Sicher kann man das... aber ...
17.07.2019 11:55:39
Dieter(Drummer)
Hi Karin,
mein Wunsch wäre:
1) ein frei wählbare Menge an Buttons (Command)
2) in jeden Button eine frei wählbare ID über Inputbox, für einfügen des entsprechenden Shapes
3) einem frei gewählten Button einen frei wählbaren Code hinzufügen.
Hoffe, ich habe es verständlich erklärt. Alles dient nur dem Zweck der freien Wählbarkeit.
Ich kann mir vorstellen, dass die snich so einfach ist einen Code dafür zu erstellen, übersteigt bei weitem meine Möglichkeiten. Kann auch verstehen, wenn dies einfach zu aufwendig ist.
Ein Ergebnis interessiert mich einfach.
Gruß, Dieter(Drummer)
Anzeige
Sicher kann man...
17.07.2019 12:49:19
Beverly
Hi Dieter,
... Punkt 1) und 2) realisieren, Punkt 3) jedoch nicht - einen "frei wählbaren Code" gibt es nicht, er muss irgendwo abgelegt sein bzw. du musst ihn erst per VBA schreiben (dazu gibt es im Archiv Beispiele wie man das macht).
Wie stellst du dir denn das vor, dass du dem Button erst einen Code zuweist, dass du die ID auswählen kannst und ihm anschließend einen anderen Code? Wozu das ganze? Die Auswahl der ID kannst du doch gleich beim Erstellen des Buttons realisieren und musst ihm nicht erst den Code dafür zuweisen um ihm dann später einen anderen Code zuzuweisen...


Anzeige
AW: Sicher kann man...
17.07.2019 13:11:57
Dieter(Drummer)
Hallo Karin,
da hast Du wieder eine gute Idee, die ID direkt beim Erstellen des neuen Buttons mit zu geben.
Einen neuen Code zu erstellen kann ich natürlich schaffen und ihn dann später dem jeweiligen Button zu zuweisen. Also Punkt 3 ist somit nicht nowendig zu automatisieren.
Wenn die anderen Punkte realisierbar sind, wäre ich schon sehr zufrieden.
Danke, dass du immer noch weiter helfen möchtes, soweit es geht.
Lieben Dank an Dich und Gruß,
Dieter(Drummer)
Im Anhang eine Möglichkeit...
17.07.2019 15:40:26
Beverly
Hi Dieter,
...mittels Klassenprogrammierung. Das Erstellen eines Button wird durch das Makro SchalterErstellen realisiert - es ist dem Formular-Steuerelement im Tabellenblatt zugewiesen (wie du das Makro starten willst bleibt dir überlassen). Zuerst wird mit einer InputBox eine Zelladresse abgefragt, wo der Button erstellt werden soll (einfach in die Zelle klicken). Danach wird dann die ID für das Bild abgfragt. Sollte das bereffende Bild nicht vorhanden sein, bleibt der Button ohne Bild.
Beim Öffnen der Arbeitsmappe und jeweils beim Erstellen eines neuen Button werden alle ActiveX-Button in die Klasse geschrieben (Makro InitSchalter). Dieses Makro kannst du auch von Hand ausführen, falls die Button nicht reagieren (z.B. weil du am Code etwas geändert hast).
Wenn du einen neuen Button erstellst, musst du im Klassenmodul (clsSchalter) dann den Code für den neu erstellten Button ergänzen.
Beachte bitte unbedingt alle Hinweise im Code!
https://www.herber.de/bbs/user/130962.xlsm


Anzeige
AW: Im Anhang eine Möglichkeit...
17.07.2019 16:10:33
Dieter(Drummer)
Liebe Karin,
herzlichen Dank, das ist schon eine prima Variante, mit der ich schon weiter komme. Deine Erklärung dazu ist auch sehr hilfreich.
Eine Bitte noch:
1) Der Text im Button (Caption) sollte am Anfang ein Leerfeld haben
2) Das einzufügende Picture solle links vor dem Text stehen.
Das mit dem Bild wird glaube ich so gemacht:
PicturePositionLeftCenter
'Picture Ausrichtung links vom Text.
Wäre prima, wenn Du das noch eingefügen könntes (2), da ich nicht weiß, wo und wie (1) eingefügt werden muss.
Einfach eine bisher tolle Lösung.
Gruß, Dieter(Drummer)
AW: Im Anhang eine Möglichkeit...
17.07.2019 18:03:48
Beverly
Hi Dieter,
in dem Fall musst der Button aber breiter sein - ändere den Code wie folgt:
                With ooElement
.Object.Caption = " CommandButton" & inZaehler + 1
.Top = rngZelle.Top
.Left = rngZelle.Left
.Width = 150
.Height = 50
.Object.PicturePosition = 1
End With


AW: Geht schon prima, nur noch ein Fehler ...
17.07.2019 19:12:06
Dieter(Drummer)
Liebe Karin,
... habe den Code jetzt ausgewechselt und klappt schon prima. Herzlichen Dank für deine unermüdliche Hilfe.
Ein Fehler ist aber noch da.
Im Code: "SchalterErstellen", gibt es, wenn direkt nach Aufruf "Abbrechen" gewählt wird, der Fehler 424 Objekt erforderlich und diese Zeile wird gelb markiert:
Set rngZelle = Application.InputBox("Zelle für Button auswählen", , , , , , , 8)
Wäre der Fehler ncoh zu beheben?
Gruß, Dieter(Drummer)
Dann bleibt anscheinend nur...
17.07.2019 19:48:33
Beverly
Hi Dieter,
...mit on Error den Fehler zu umgehen:
    On Error Resume Next
Set rngZelle = Application.InputBox("Zelle für Button auswählen", , , , , , , 8)
On Error GoTo 0


AW: Jetzt neuer Fehler ...
17.07.2019 20:09:47
Dieter(Drummer)
Hallo Karin,
jetz taucht neuer Fehler bei Abbrechen auf: Laufzeitfehler 424, Objekt erforderlich und selbe Zeile wird gelb markiert.
Hier mein jetziger Code mit deiner neuen Änderung:
Sub SchalterErstellen()
' Makro zum Erstellen eines CommandButtons
Dim cmbSchalter As MSForms.CommandButton
Dim rngZelle As Range
Dim lng_id As Long
inZaehler = 0
On Error Resume Next
Set rngZelle = Application.InputBox("Zelle für Button auswählen", , , , , , , 8)
On Error GoTo 0
If Not rngZelle Is Nothing Then
lng_id = Application.InputBox("ID?", , , , , , , 1)
If lng_id  0 Then
With Worksheets("Tabelle1")
Application.ScreenUpdating = False
For Each ooElement In .OLEObjects
If ooElement.progID = "Forms.CommandButton.1" Then inZaehler = inZaehler +  _
1
Next ooElement
.OLEObjects.Add "Forms.CommandButton.1"
Set ooElement = .OLEObjects(.OLEObjects.Count)
With ooElement
.Object.Caption = " CommandButton" & inZaehler + 1
.Top = rngZelle.Top
.Left = rngZelle.Left
.Width = 125
.Height = 31
.Object.PicturePosition = 1
End With
ooElement.Object.TakeFocusOnClick = False
End With
Application.OnTime Now + TimeValue("00:00:01"), "InitSchalter"
On Error Resume Next
Set ooElement.Object.Picture = Application.CommandBars.FindControl(ID:=lng_id). _
Picture
On Error GoTo 0
End If
End If
Application.ScreenUpdating = True
End Sub

Gruß, Dieter(Drummer)
Das kann ich nicht nachvollziehen - o.w.T
17.07.2019 22:41:13
Beverly


AW: Habe nochmal getestet und ...
18.07.2019 08:40:17
Dieter(Drummer)
Guten Morgen Karin,
... wenn ich die Inputbox aufgerufen habe, KEINE Zelle ausgewählt habe, oder auch EINE Zeile ausgewählt habe und dann Abbrechen anklicke, kommt der Fehler.
Der Fehler kommt nicht, wenn in die Zelle ausgewählt habe, dann OK klicke und bevor ich die ID eingebe, dann Abbrechen klicke. Das geht mit Abbrechen ohne Fehlerhinweis.
Wenn das nicht abgestellt werden kann, werde ich halt Abbrechen erst dann anklicken, wenn die Zelle ausgewählt wurde und die ID Abfrage kommt. Dann taucht der Fehler NICHT auf.
Dir, liebe Karin, nochmal herzlichen Dank für deine unermüdliche Hilfe und eine prima funktionierende Lösung, mit der ich zurecht komme.
Wünsche dir einen erfolgreichen Tag.
Gruß, Dieter(Drummer)
Ich habe auch nochmal testen lassen...
18.07.2019 18:01:32
Beverly
Hi Dieter,
...und zwar mit Excel2010 (32 bit) - es kommt auch dort keine Fehlermeldung. Hast du Excel 32 oder 64 bit?


AW: Ich habe auch nochmal testen lassen...
18.07.2019 19:23:12
Dieter(Drummer)
Hi Karin,
ich habe:
Excel 14.0 unter Windows (32.Bit)NT 6.02
Gruß, Dieter(Drummer)
Dazu kann ich nichts sagen...
18.07.2019 19:33:18
Beverly
Hi Dieter,
...da ich kein Excel 14.0 zum Testen habe.


AW: Dazu kann ich nichts sagen...
18.07.2019 20:21:51
Dieter(Drummer)
Danke dennoch für deine Hilfe, Karin.
Lieben Gruß, Dieter(Drummer)
PS Sorry für späte Rückmeldung, war ganzen Tag unterwegs.
AW: Info: Code zu neuem Button
18.07.2019 10:19:21
Dieter(Drummer)
Liebe Karin,
den Code für die neue erstellten Buttons, kann man vorher bereits erstellen, z.B. mit "Sub CommandButton1_Klick". So ist direkt, wenn der neue Button erstellt wurde, der passende Code zum Button verbunden.
Gruß und nochmal Danke,
Dieter(Drummer)
Das brauchst du nicht...
18.07.2019 14:18:57
Beverly
Hi Dieter,
...da es sich um Klassenprogrammierung handelt und diese generell im Klassenmodul realisiert wird. Wenn du den Code nicht ins Klassenmodul schreiben willst brauchst du auch keine Klassenprogrammierung und kannst den Code dafür komplett vergessen.
Zu deinem anderen Problem: der Fehler liegt offensichtlich bei dir daran, dass du Excel2010 und ich Excel2016 verwende, da er bei mir nicht auftritt.


AW: Das brauchst du nicht...
18.07.2019 19:24:56
Dieter(Drummer)
Liebe Karin,
werde entsprechen der Klassenprogrammierung die entsprechenden Codes dort einfügen.
Danke für Hinweis.
Lieben Gruß, Dieter(Drummer)
Ja, lerne endlich was und experimentiere nicht
17.07.2019 19:56:24
robert
AW: Habe Caption Änderung geschafft :-)
16.07.2019 19:28:06
Dieter(Drummer)
Hallo Karin,
hier mein Code für die Änderung des kopierten Buttons:
Sub Kopie_aendern()
ActiveSheet.CommandButton2.Caption = "CommandButton2"
End Sub
So langsam gehts weiter ...
Gruß, Dieter(Drummer)

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige