Anzeige
Archiv - Navigation
1244to1248
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

Call Aufruf führt zu Fehler

Call Aufruf führt zu Fehler
Peter
Hallo alle zusammen,
leider kann ich meinem vorhergehendem Beitrag nichts mehr hinzufügen, deshalb jetzt der neue Beitrag!
Im Beitrag Highlighten von mehreren Zellen habe ich einen Code gepostet, welcher es mir erlaubt, mehrere Zellen in einer Zeile mittels Shape hervorzuheben. Das funktioniert soweit auch ganz gut.
Erstellt habe ich den Code in einer Tabelle, damit er jetzt auch anderen Tabellen zugänglich ist, habe ich ihn in ein Modul (Marker) ausgelagert und rufe diesen jetzt durch folgenden Befehl auf:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Dim shp As Shape
If Not Intersect(Target, ActiveSheet.Range("F15:z48")) Is Nothing Then
Call Marker
Else
For Each shp In ActiveSheet.Shapes
If shp.Name = "marker" Then
ActiveSheet.Shapes("marker").Delete
Else
End If
Next shp
End If
End Sub
Doch leider kommt es nun bei der Ausführung zu einem eigenartigen Verhalten:
  • in der Tabelle, in welcher ursprünglich der Code entstand: Klicke ich in den ausgwählten Bereich funktioniert alles einwandfrei

  • alle anderen Tabellen: Bei Klick in den ausgwählten Bereich kommt die Fehlermeldung:
    Laufzeitfehler 1004:  Der angegebene Wert ist außerhalb des zulässigen Bereichs
    
    Klicke ich hier auf Debuggen, wird folgende Zeile des Highlight-Codes markeirt:
    With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 20, 10, 10)

  • Vermutlich handelt es sich nur um eine Kleinigkeit, aber ich komm einfach nicht drauf!
    Könnt Ihr mir eventuell bei diesem Problem helfen?
    Danke schon mal im Voraus!
    Viele Grüße
    Peter

    5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    Versuch ...
    24.01.2012 16:25:02
    Matthias
    Hallo Peter
    Vielleicht als Ansatz, die Vorgeschichte kenne ich nicht.
    Da Du mit With ActiveSheet ... arbeitest müsste ja noch mehr Code vorhanden sein.
    Darum bitte also auch nur als Ansatz verstehen!
    Code in Diese Arbeitsmappe
    Option Explicit
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim myDocument As Worksheet
    Set myDocument = ActiveSheet
    On Error Resume Next
    Dim shp As Shape
    If Not Intersect(Target, myDocument.Range("F15:z48")) Is Nothing Then
    myDocument.Shapes.AddShape msoShapeRectangle, 10, 20, 10, 10
    Else
    For Each shp In myDocument.Shapes
    If shp.Name = "marker" Then
    myDocument.Shapes("marker").Delete
    Else
    End If
    Next
    End If
    Set myDocument = Nothing
    End Sub
    
    Gruß Matthias
    Anzeige
    AW: Versuch ...
    24.01.2012 16:35:47
    Peter
    Hallo Matthias,
    danke für deinen Vorschlag!
    Wenn ich den vor dir vorgeschlagenen Code richtig lese, dann erzeugst dieser ein Shape-Objekt, wenn der Shape-Name nicht existiert. Dies geschieht allerdings falls kein Rechteck vorhanden ist, bereits im Modul "Marker". Der von mir gepostete Code soll einzig und alleine das Modul "Marker" aufrufen. Doch leider kommt es bei der Ausführung dieses Moduls zu einem Fehler im Modul, der in allen Tabellen auftritt außer in der ursprünglichen!
    Ich vermute, dass ich irgend einen Bezug auf die erste Tabelle produziert habe, der das Problem verursacht und den ich jetzt nicht mehr finde!
    VG Peter
    Anzeige
    Das hast du doch aus dem Bsp von Sepp, ...
    24.01.2012 16:52:00
    Sepp,
    …Peter!
    Warum nur löschst du das ZeigeObjekt erst und fügst es dann wieder hinzu? Das kann man doch viel eleganter über die Eigenschaft .Visible lösen! Ich mache das in vglbaren Fällen immer so; mehr noch, meine Objekte stehen alle unsichtbar auf einem Blatt. Werden sie in dem benötigt, wdn sie an die entsprd Position, anschld wieder zurück verschoben. Bei Anzeige in anderen Blättern wdn sie im 1. kopiert, im anderen eingefügt und bei Nicht-Bedarf wieder gelöscht. In deinem Fall würde ich aber empfehlen, 1 „Marker” auf jeder Seite permanent zu stationieren. Er könnte ruhig weiter nur Marker heißen, denn es handelt sich ja stets um ein anderes Blatt bei ActiveSheet.Shapes("marker"). Übrigens, wenn du bspw aSh As Worksheet deklarierst und ihm dann mit Set ash = ActiveSheet das aktBlatt zuweist, hast du für ash auch die volle VBE-Intellisense-Unterstützung! Am ProzEnde dann Set ash = Nothing, weil der Speicherplatz für Objekt-Variablen sonst angebl nicht freigegeben wird (das geschieht bei For Each-Objekt-Laufvariablen automatisch, wenn der Zyklus nicht vorzeitig verlassen wird).
    Übrigens ist dein alter Beitrag noch keine 7 Tage alt. Du hättest also auch dort antworten können, wenn du nicht das Forum verlassen hättest, denn Deine Beiträge führt nur noch ins Archiv (um Missbrauch zu vermeiden!). Benutze <<Forumsliste und trage zuvor deinen unikaten Nickname (unter dem du postest) in das Feld davor (bzw darüber) ein. So bleibst du im Forum.
    Gruß Luc :-?
    Anzeige
    AW: Das hast du doch aus dem Bsp von Sepp, ...
    24.01.2012 17:46:32
    Sepp,
    Servus Luc,
    danke für den Hinweis bezüglich des Beantwortens der Beiträge. Das wusste ich bisher nicht!
    Ja richtig, mein Code basiert auf dem Code von Sepp! Hab mich dafür auch brav bedankt! :-)
    Zu deinen Anmerkungen:
    Ich habe inzwischen das Problem ausfindig gemacht. Das Problem lag nur mittelbar am Code. Der Aufruf funktioniert demnach bei allen Tabellen.
    Das Problem war wie vermutet eine Unachtsamkeit! Die anderen Tabellen waren geschützt und damit konnte VBA kein Shape Objekt einfügen. Deshalb werde ich auf deinen Vorschlag eingehen und auf jeden Tabellenblatt ein Shape Objekt platzieren und verstecken.
    Danke für die Hilfe
    Peter
    Anzeige
    Dachte ich mir! Bitte sehr, gern! Gruß owT
    24.01.2012 20:08:19
    Luc:-?
    :-?

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige