Anzeige
Archiv - Navigation
1552to1556
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

Script erfolgreich - dennoch Fehlermeldung - why?

Script erfolgreich - dennoch Fehlermeldung - why?
01.05.2017 21:10:21
Krasnaplesenij
Hallo Leute,
help me! :)

1. Zustand:

Userbild
Durch das Bestätigen eines Formulars, wird in der Exceltabelle, in Spalte 7, ein Button generiert.
Bei jedem weiteren Ausführen wird in der Tabelle je eine neue Zeile beschrieben, wo auch in Spalte 7 wieder der gleiche Button erzeugt wird.
Code:
Dim myBtn As Object
Dim intLetzteVolleZeile As Long
intLetzteVolleZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set myBtn = ActiveSheet.Buttons.Add(Cells(intLetzteVolleZeile, 7).Left, Cells( _
intLetzteVolleZeile, 7).Top, Cells(intLetzteVolleZeile, 7).Width, Cells(intLetzteVolleZeile, 7). _
Height)
With myBtn
.Name = "G" & intLetzteVolleZeile
.Caption = "Auslagern"
.OnAction = "FormularAuslagernAufruf"
End With
Cells(intLetzteVolleZeile, 7) = myBtn.Name
Somit stehen irgendwann beliebig viele Zeilen in der Tabelle und in Spalte 7 genauso viele Buttons untereinander.
Zusätzlich wird für eine spätere Zuordnung/Verarbeitung in die Zelle, auf welcher der Button platziert wird, der Name des Buttons im Zelleninhalt vermerkt.
2. Zustand:
Später soll ein Klick auf eines dieser Buttons einige Aktionen starten und zwar innerhalb der Zelle, in der sich der gerade angeklickte Button befindet.
Zusätzlich soll der Button nach der Aktion spurlos gelöscht werden!
Hierzu wird mittels einer For-Next-Schleife und einer If-Verzweigung geprüft, ob der gerade angeklickte Button den gleichen Namen besitzt, wie der Inhalt der hinter ihm verdeckt liegenden Zelle.
Wenn das der Fall ist, dann soll die Löschung des Buttons erfolgen.
Code:
Dim i As Integer
For i = 2 To 20
Dim myBtn As Object
Set myBtn = ActiveSheet.Shapes(Application.Caller)
Cells(i, 7).Select
If Selection.Value = " " Then Exit For
' Vorübergehende Nachrichtenbox-Anzeige zur Nachverfolgung
' MsgBox myBtn.Name
' If Selection.Value = " " Then Exit For
If myBtn.Name = Cells(i, 7).Value Then myBtn.Delete
Next i
3. Problem
Das Script läuft so durch wie geplant und löscht den richtigen Button. Allerdings kommt ein Laufzeitfehler (siehe Screenshot), dass das Objekt zum Löschen nicht gefunden werden konnte. Hä? Wieso passiert das und wie könnte man das beheben/umgehen?
Userbild
Für jede hilfreiche Antwort bin ich sehr dankbar!
Viele Grüße
Krasnaplesenij

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Script erfolgreich - dennoch Fehlermeldung - why?
01.05.2017 21:20:26
Sepp
Hallo Krasna,
erstens gehören Dim und Set in deinem Fall außerhalb der For-Next-Schleife und zweitens hast du mit "Shapes(Application.Caller)" doch schon den zu löschenden Button ermittelt, wozu also die Schleife?
Gruß Sepp

AW: Script erfolgreich - dennoch Fehlermeldung - why?
01.05.2017 22:08:17
Krasnaplesenij
Hallo Sepp,
ja ich hatte dim und set erst außerhalb der Schleife, ich hatte nur herum experimentiert, weil der Fehler "konnte Objekt nicht finden" angezeigt wurde und hab es probiert indem ich es in die Schleife mit reinnehme. Hat aber keinen Unterschied gemacht.
Den Button habe ich mit Application.Caller zwar wie du sagst gefunden, aber mir fehlt die Verknüpfung zu der jeweiligen Zeile, in der sich der Button befindet. Somit kann ich nicht irgenwelche Aktionen bezogen auf die Zeile starten, wie z.B. Zellen der Zeile in der der Button geklickt wurde rot hinterlegen mit z.B. Range("A10:I10").Interior.Color = vbred.
Deswegen die Idee gewesen den Zeilen, sobald der Button erschaffen wird auch den Inhalt des Button-Namens zu verpassen um später zu checken ob der geklickte Button mit dem Zelleninhalt übereinstimmt. So weiß VBA dann in welcher Zeile es ist und kann weitere Aktionen durchführen.
Sicherlich gibt es da auch andere Lösungen, auf die ich aber leider nicht gekommen bin.
Gruß
Krasna
Anzeige
AW: Script erfolgreich - dennoch Fehlermeldung - why?
01.05.2017 22:17:39
Sepp
Hallo Krasna,
dafür gibts die Eigenschaft .TopLeftCell.
Dim myBtn As Object

Set myBtn = ActiveSheet.Shapes(Application.Caller)

myBtn.TopLeftCell.EntireRow.Interior.ColorIndex = 6

die bezieht sich auf die Zelle die unter der oberen linken Ecke des Buttons liegt.
Gruß Sepp

Anzeige
AW: Script erfolgreich - dennoch Fehlermeldung - why?
02.05.2017 06:43:15
Krasnaplesenij
Hallo Sepp,
danke dir. Ich probiere es heute abend mal aus, da komme ich erst dazu und dann melde ich mich.
Ist es eigentlich auch mit der Eigenschaft TopLeftCell möglich den Button zu löschen?
Oder braucht man das garnicht? Einfach myBtn.delete und fertig?
Gruß
Krasna
AW: Script erfolgreich - dennoch Fehlermeldung - why?
02.05.2017 20:56:48
Krasnaplesenij
Hallo Sepp,
vielen vielen Dank für deine Hilfe! Hatte viel zu kompliziert gedacht und du hast mich wieder in die richtige Bahn geleitet. Haben nun mit deinem Tipp alles, was ich bis dato an Aktionen durch das Anklicken des Buttons durchführen wollte, erfolgreich gemeistert.
Gruß
Krasna!
BeforeDoubleClick-Event anstelle von Buttons
01.05.2017 22:28:25
Buttons
Hi
warum viele Buttons anlegen?
über das BeforeDoubleKlick-Event kannst du im Prinzip jede Zelle als Button verwenden.
die Angeklickte Zelle ist dann in der Variablen TARGET als Range-Objekt hinterlegt, so dass du genau weißt, welche Zelle angeklickt wurde und kannst entsprechend reagieren.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige