Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Add-In fehlerhaft

Betrifft: Add-In fehlerhaft von: Reinhard
Geschrieben am: 15.08.2008 19:01:39

Hallo Wissende,

ich habe mir eine xla-Datei gebastelt. Wenn ich die Codes in meine Personl.xls einbaue, so funktioniert es prima. Binde ich aber die xla ein, so funtktioniert es nur wenn ich Excel "leer" starte, also mit der von Excel erstellten leeren Mappe "Mappe1".

Aber starte ich eine xls-Datei per Doppelklick, wodurch dann Excel mit dieser Datei gestartet wird, so steht der Debugger in der Zeile:

Set Bereich = Intersect(ActiveWindow.VisibleRange, Rows(Zelle.Row))

der Prozedur "Faerben2()" und meldet "Fehler beim Laden von Diese Arbeitsmappe", drücke ich das weg kommt der gleiche Fehler für "Tabelle1" usw, also für alle Module der zu öffnenden Datei, danach wird Excel geschlossen, also es kommt die Meldung "Excel muß geschlossen werden usw".

Was muß ich tun um diesen Fehler wegzukriegen?

Hier die Datei: https://www.herber.de/bbs/user/54644.xla

Nachstehend ist der Code.

Danke ^ Gruß
Reinhard

In diese Arbeitsmappe

Option Explicit
Dim AppClass As New clsApp
'
Private Sub Workbook_Open()
   Call Loesch
   FadenkreuzEinAus = True
   Set AppClass.App = Application
End Sub


In Modul1

Option Explicit
Public Fadenkreuzmerker As Range, FadenkreuzEinAus As Boolean
'
Sub Faerben2(Zelle As Range)
Dim Bereich As Range, Z As Range, N As Integer, D As Variant
Dim Senkrecht
Application.ScreenUpdating = False
Set Bereich = Intersect(ActiveWindow.VisibleRange, Rows(Zelle.Row))
Set Bereich = Union(Bereich, Intersect(ActiveWindow.VisibleRange, Columns(Zelle.Column)))
Set Fadenkreuzmerker = Bereich
On Error Resume Next
D = ActiveSheet.Shapes("Rechteck1").Name
If Err.Number = 0 Then
   For Each Z In Bereich
      N = N + 1
      With ActiveSheet.Shapes("Rechteck" & N)
         .Top = Z.Top
         .Left = Z.Left
         .Height = Z.Height
         .Width = Z.Width
      End With
   Next Z
Else
   Err.Clear
   For Each Z In Bereich
      N = N + 1
      ActiveSheet.Shapes.AddShape(msoShapeRectangle, Z.Left, Z.Top, Z.Width, Z.Height).Name = " _
Rechteck" & N
      With ActiveSheet.Shapes("Rechteck" & N)
         .Fill.Visible = msoTrue
         .Fill.Solid
         .Fill.ForeColor.SchemeColor = 13
         .Fill.Transparency = 0.8
         .Line.Visible = msoFalse
         .OnAction = "Markieren"
      End With
   Next Z
End If
Zelle.Select
Ende:
Application.ScreenUpdating = True
End Sub
'
Sub Loesch()
Dim S
On Error Resume Next
For Each S In ActiveSheet.Shapes
   If S.Name Like "Recht*" Then S.Delete
Next S
End Sub
'
Sub Markieren()
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Select
End Sub
'
Sub EinAus()
FadenkreuzEinAus = Not FadenkreuzEinAus
If FadenkreuzEinAus = False Then
   Call Loesch
Else
   If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End If
End Sub


in Klassenmodul clsApp

Option Explicit
Public WithEvents App As Application
'
Private Sub App_SheetActivate(ByVal Sh As Object)
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End Sub
'
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode <> 0 Then
Call Loesch
Call Faerben2(Target)
End If
End Sub
'
Private Sub App_SheetDeactivate(ByVal Sh As Object)
If FadenkreuzEinAus = False Then Exit Sub
If Not Fadenkreuzmerker Is Nothing Then Call Loesch
End Sub
'
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If FadenkreuzEinAus = False Then Exit Sub
'If Application.CutCopyMode = 0 Then Call Faerben2(Target)
Call Faerben2(Target)
End Sub
'
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
If FadenkreuzEinAus = False Then Exit Sub
If Not Fadenkreuzmerker Is Nothing Then Call Loesch
End Sub
'
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End Sub


PS: K.A. warum der Parser von Hans mir da Leerzeilen reinbackt

  

Betrifft: AW: Add-In fehlerhaft von: Luschi
Geschrieben am: 15.08.2008 19:38:58

Hallo Reinhard,

ich habe das AddIn nur mal kurz überflogen, der Fehler tritt auf, weil die Variable 'Zelle' kein Range-Bereich
besitzt also Nothing ergibt.
Also habe ich mich erst mal so beholfen:

Sub Faerben2(Zelle As Range)
If Zelle Is Nothing Then
Exit Sub
End If
'usw.

Warum dieser Fehler auftritt beim Doppelklick auf xls-Datei im Explorer, teste ich mal Morgen.

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Add-In fehlerhaft von: Luschi
Geschrieben am: 15.08.2008 21:01:29

Hallo Reinhard,

Übeltäter gefunden, hier die geänderte Prozedure:

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
'Dieses Ereignis wird auch aufgerufen, wenn die xla-Datei sich öffnet
'AddIn's besitzen aber keine sichtbarn Tabellenblätter und damit
'auch keine 'ActiveCell'
If Wb.Name = ThisWorkbook.Name Then
    Exit Sub
End If
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End Sub

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Add-In fehlerhaft von: Reinhard
Geschrieben am: 16.08.2008 00:03:14

Hallo Luschi,

klappt leider nicht, der Fehler bleibt :-(

Meine Laienhafte Vermutung ist, dieser Klassenmodulcode beginnt bevor die Datei geöffnet ist, also gibt es daher kein ActiveCell *schätz* *abernixweiß*

Gruß
Reinhard


  

Betrifft: AW: Add-In fehlerhaft von: Luschi
Geschrieben am: 16.08.2008 06:42:14

Hallo Reinhard,

habe gerade das korrigierte AddIn nochmals mit Excel 2002 (XP), 2003 und 2007 getestet.
Funktioniert tatellos auch beim Öffnen per Doppelklick im Explorer.
Hier das das ganze AddIn: https://www.herber.de/bbs/user/54647.xla

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Add-In fehlerhaft von: Luschi
Geschrieben am: 16.08.2008 07:59:07

Hallo Reinhard,

habe mit Deinem AddIn mal ein bischen herumgetestet. Die Idee, über den Zellen Rechteck-Objekte zu legen und diese dann einzufärben, finde ich gut. So muß man sich über die Zellhintergrundfarbe keinen Kopf machen; man löscht einfach die Rechtecke und gut ist's. Damit hast Du natürlich das schon von Dir beschriebene Problem, daß man als Startpunkt von Zellselektionen keine Zelle aus dem Fadenkreuz nehmen kann, da der Cursor ja auf ein Rechteck zeigt (deshalb Hand/Finger-Symbol) und nicht auf die darunterliegende Zelle.
Ein bischen Fehlerbehandlung ist auch noch erforderlich. Sobald der User ein Diagrammblatt einfügt bzw. auswählt, schlägt der Vba-Fehlerteufel zu, da es auch hier keine 'ActiveCell' gibt.
Mein Vorschlag: bei allen Ereignis-Routinen, die ein sh-Objekt übergeben, überprüfen, ob es ein Objekt
vom Typ Worksheet ist, z.B.

Private Sub App_SheetActivate(ByVal Sh As Object)
If Sh.Type <> xlWorksheet Then
   Exit Sub
End If
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End Sub

Gruß von Luschi
aus klein-Paris


  

Betrifft: Fadenkreuz von: Reinhard
Geschrieben am: 16.08.2008 15:43:31

Hallo Luschi,

ich habe das mit dem Diagramm eingearbeitet. Funktioniert bei Einfügen Diagrammblatt bestens.

Der anfangs beschriebene Fehler kommt immer noch wenn ich Excel nicht direkt sondern mittels Dateistart öffne. Aber ich habe jetzt anfangs des Codes von Faerben2() ein On Error goto Ende eingebaut und der Fehler ist zwar nicht weg, aber macht sich nicht mehr bemerkbar.

Ich habe noch im Code eingebaut, daß bei Öffnung der xla ein Symbol in der Menuleiste eingefügt wird, mit dem man das Fadenkreuz ein- und ausschalten kann. Ist ja wichtig wenn man die datei verschicken will, da muß es ja draußen sein das Kreuz.

Aus mir unklaren Gründen, aber positiv überrascht, wenn man ein Diagrammblatt eingfügt ist oben das Symbol in der Menuleiste gar nicht zu sehen. Bei Einfügen Tabellenblatt sehr wohl. Ganz so wie wenn ich es bewußt programmiert hätte :-)

Anbei die derzeitig letzte Dateiversion:

https://www.herber.de/bbs/user/54649.xla

Nachfolgend der Code der xla

Ich danke dir für deine Bemühungen und Hilfen
Gruß
Reinhard

Diese Arbeitsmappe:


Option Explicit
Dim AppClass As New clsApp
'
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call SymbolLoeschen
End Sub
'
Private Sub Workbook_Open()
   Call SymbolErzeugen
   Call Loesch
   'FadenkreuzEinAus = True
   Set AppClass.App = Application
End Sub



Modul1

Option Explicit
Public Fadenkreuzmerker As Range, FadenkreuzEinAus As Boolean
'
Sub Faerben2(Zelle As Range)
Dim Bereich As Range, Z As Range, N As Integer, D As Variant
Dim Senkrecht
On Error GoTo Ende
Application.ScreenUpdating = False
Set Bereich = Intersect(ActiveWindow.VisibleRange, Rows(Zelle.Row))
Set Bereich = Union(Bereich, Intersect(ActiveWindow.VisibleRange, Columns(Zelle.Column)))
Set Fadenkreuzmerker = Bereich
On Error Resume Next
D = ActiveSheet.Shapes("Rechteck1").Name
If Err.Number = 0 Then
   For Each Z In Bereich
      N = N + 1
      With ActiveSheet.Shapes("Rechteck" & N)
         .Top = Z.Top
         .Left = Z.Left
         .Height = Z.Height
         .Width = Z.Width
      End With
   Next Z
Else
   Err.Clear
   For Each Z In Bereich
      N = N + 1
      ActiveSheet.Shapes.AddShape(msoShapeRectangle, Z.Left, Z.Top, Z.Width, Z.Height).Name = " _
Rechteck" & N
      With ActiveSheet.Shapes("Rechteck" & N)
         .Fill.Visible = msoTrue
         .Fill.Solid
         .Fill.ForeColor.SchemeColor = 13
         .Fill.Transparency = 0.8
         .Line.Visible = msoFalse
         .OnAction = "Markieren"
      End With
   Next Z
End If
Zelle.Select
Ende:
Application.ScreenUpdating = True
End Sub
'
Sub Loesch()
Dim S
On Error Resume Next
For Each S In ActiveSheet.Shapes
   If S.Name Like "Recht*" Then S.Delete
Next S
End Sub
'
Sub Markieren()
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Select
End Sub
'
Sub EinAus()
FadenkreuzEinAus = Not FadenkreuzEinAus
If FadenkreuzEinAus = False Then
   Call Loesch
Else
   If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End If
End Sub
'
Sub SymbolErzeugen()
Dim cmbb As CommandBarButton
Call SymbolLoeschen
Set cmbb = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton,  _
temporary:=True)
With cmbb
   .Caption = "Fadenkreuz"
   .FaceId = 578
   .OnAction = ThisWorkbook.Name & "!EinAus"
End With
End Sub
'
Sub SymbolLoeschen()
Dim C As CommandBarPopup
For Each C In Application.CommandBars("Worksheet Menu Bar").Controls
   If C.Caption = "Fadenkreuz" Then C.Delete
Next C
End Sub



Klassenmodul clsApp

Option Explicit
Public WithEvents App As Application
'
Private Sub App_SheetActivate(ByVal Sh As Object)
If Sh.Type <> xlWorksheet Then Exit Sub
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End Sub
'
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Type <> xlWorksheet Then Exit Sub
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode <> 0 Then
   Call Loesch
   Call Faerben2(Target)
End If
End Sub
'
Private Sub App_SheetDeactivate(ByVal Sh As Object)
If Sh.Type <> xlWorksheet Then Exit Sub
If FadenkreuzEinAus = False Then Exit Sub
If Not Fadenkreuzmerker Is Nothing Then Call Loesch
End Sub
'
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Type <> xlWorksheet Then Exit Sub
If FadenkreuzEinAus = False Then Exit Sub
'If Application.CutCopyMode = 0 Then Call Faerben2(Target)
Call Faerben2(Target)
End Sub
'
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
If FadenkreuzEinAus = False Then Exit Sub
If Not Fadenkreuzmerker Is Nothing Then Call Loesch
End Sub
'
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
'Dieses Ereignis wird auch aufgerufen, wenn die xla-Datei sich öffnet _
 AddIn's besitzen aber keine sichtbarn Tabellenblätter und damit _
 auch keine 'ActiveCell'
If Wb.Name = ThisWorkbook.Name Then Exit Sub
If FadenkreuzEinAus = False Then Exit Sub
If Application.CutCopyMode = 0 Then Call Faerben2(ActiveCell)
End Sub




  

Betrifft: AW: Fadenkreuz von: Luschi
Geschrieben am: 16.08.2008 18:28:11

Hallo Reinhard,

habe in das AddIn noch ein paar Sicherheitsabfragen eingebaut; hier die neue Datei:
https://www.herber.de/bbs/user/54653.xla

Sollte der Fehler beim Doppelklick im Explorer immer noch auftauchen, dann Schreibe doch mal genau,
bei welcher Zeile er auftritt.

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Fadenkreuz (@Nepumuk @Daniel @Hajo) von: Reinhard
Geschrieben am: 16.08.2008 19:19:21

Hallo Luschi,

habe deine Version jetzt kurz getestet, Fehler ist weg obwohl du das On error auskommentiert hast, sehr schön.

@Alle, wichtig wären mir die Beantwortung der unten fett gedruckten Fragen, falls jemandem der Text zu lang ist :-)

Ich muß mir jetzt mal die Codes vergleichen um herauszuschälen wodran es gelegen habne könnte. Beim ersten Überflug über die Codes fiel mir nichts Relevantes auf.

Der Fehler trat immer auf in

Set Bereich = Intersect(ActiveWindow.VisibleRange, Rows(Zelle.Row))

Ich kam bisher noch nicht dazu auszutesten ob es in dem Moment gar kein ActiveWindow.VisibleRange gibt oder ob es an Zelle.Row liegt oder an beidem.

Achja, wollte ich vorhin schon dazuschreiben, Ehre wem Ehre gebührt, die Idee es mit übergelgten Rechtecken zu versuchen hatte der hiesige Daniel, er ließ mal in einer Beitragsfolge zu einem völlig anderem Thema mal die Aussage fallen daß er da wohl eine Fadenkreuzvariante gebastelt hat die übergelegte Rechtecke enthält.

Und natürlich ist die Idee Klasse, man erspart sich sich zu merken welche Farbe die Zellen haben die man "übermalt", und die Problematik daß das Fadenkreuz mit dem CutCopymodus kollidiert ist auch handelbarer.

Ich habe mir die Codes auf Hajosseite zu fadenkreuz nicht angesehen, nur die Beschreibungen gelesen, und daist ja auch klar erkennbar, ohne die Variante mit den Rechtecken hat man das Problem daß Fadenkreuz und Kopiermodus nicht gleichzeitig gehen.

@Nepumuk, dein Name taucht im Betreff auf weil Hajo schrieb du hättest eine Fadenkreuzvariante gebastelt, am Code wäre ich schon sehr interessiert. Magst du ihn hier posten?

@Daniel Natürlich bin ich auch an deinem Code interessiert.

@Hajo wie es scheint ist die xla jetzt stabil, würde mich echt sehr freuen wenn sie auf deine Seite gelangt, mit dem kleinen Hinweis:
Idee: Daniel
Ausführung: Reinhard (Nordend)
Verbesserungen: Luschi (Klaa Paris)
Natürlich kannste den Hinweis auch weglassen :-)

Was potentiell auch einen Unterschied ausmachen könnte, wobei ich das nihct glaube, ich benutze den Explorer nie, außer gezwungenermaßen auf Fremdrechnern.

Seit vielen Jahren benutze ich den Norton Commander 2.0, ich weiß uralt, aber der hat alles was ich brauche, und da starte ich die Dateien durch Doppelklick oder Enter.

Aber okay, probiere ich halt mal um das auszuschließen xls-dateien mit Explorer zu öffnen und dabei meine xla wo der Fehler kommt zu benutzen.

PS: Ein neues Problemchen tat sich auf, ich habe ja jetzt mehrfach unterschiedliche xla als Add-Inn eingebunden. Warum auch immer, nur bei einer wurde ich von Excel gefragt ob die datei in den Ordner Add-Inn verschoben werden soll, bei anderen xlas kam die Frage nicht.

Frage a) wieso kam die Frage zur Verschiebung nur bei einer xla?
Frage b) wie krieg ich die vorigen xla-Einbidungen wieder aus der Liste die erscheint wenn man den Add-In-Manager aufruft wieder raus?


Danke dir Luschi, bin hochzufrieden mit dem Verlauf dieser Beitragsfolge.


  

Betrifft: *seufz* Frage noch offen wieder vergessen o.w.T von: Reinhard
Geschrieben am: 16.08.2008 19:22:41




  

Betrifft: AW: *seufz* Frage noch offen wieder vergessen o.w.T von: Luschi
Geschrieben am: 16.08.2008 20:45:08

Hallo Reinhard,

zu Frage 2)
Excel schließen - im Explorer (oder NC) die xla-Datei löschen. Dann kommt beim Neustart von Excel die Fehlermeldung, daß die xla-Datei nicht gefunden wurde. Wenn man dann im AddIn-Manager das AddIn deaktivieren will, kommt díe Abfrage, ob das AddIn aus der Liste der AddIn's gelöscht werden soll. Jetzt mit 'Ja' antworten.

zu 1.) Nur nicht so schnell mit den jungen Pferden; wenn durch meine Änderungen der Fehler nicht mehr auftritt, ist es viel besser, sich auf die Suche nach der Ursache des ehemaligen Fehlers zu begeben, als sich zufrieden zurückzulehnen und zu denken, daß jetzt das Non-Plus-Ultra der Vba-Welt erfunden wurde.
Meine Vermutung ist, daß bei einem der auf Deinem Rechner gestarteten Excel-AddIn's Werte im AddIn in den unsichtbaren Tabellen zwischengespeichert werden (ja, das geht).
Mit 'If Wb.IsAddin Then Exit Sub' wurde hier der Fehler aufgehoben. Dadurch kann aber auch der vorhergehende Befehl 'If Wb.Name = ThisWorkbook.Name Then Exit Sub' entfallen; warum wohl???
Du siehst, gut Ding will Weile haben, und umfangreiche Tests sich erst der Himmel des Erfolges.

Einen schönen Samstag-Abend wünscht
Luschi aus klein-Paris
wo das liegt erfährt man hier: http://de.wikipedia.org/wiki/Klein-Paris
(die 1. Erklärung ist in meinem Fall korrekt!)


  

Betrifft: OT Du Namensmißbraucher *schelt* von: Reinhard
Geschrieben am: 16.08.2008 21:49:59

Hallo Luschi,

Klaa Paris ist hier: http://de.wikipedia.org/wiki/Klaa_Paris

und sonst nirgenwo, alles andere sind unwichtige Plagiate :-)))

Was du netterweise noch geschrieben hast muß ich noch testen, aber eher morgen.

Und beim "Zurücklehnen" hast du schwer Recht,
ich gebe aber zu bedenken, für diesen Code auf den ich mit meinen Vba-Kenntnissen recht stolz bin, da habe ich locker 20 Stunden verbraten und da ist es wirklich so, ich habe da zwei Seelen in der Brust, die eine sagt, da ist ein Fehler, der muß gefunden werden, die andere sagt, bau das On Error ein und fertig oder willste nochmal 20 Sutnden auwenden um den den Fehler zu finden.

Gruß
Reinhard
Gruß
Reinhard


  

Betrifft: AW: Fadenkreuz (@Nepumuk @Daniel @Hajo) von: Nepumuk
Geschrieben am: 16.08.2008 22:42:59

Hallo Reinhard,

das ist aber nie ganz fertig geworden. Beim "Rückgängig machen / Wiederholen ist glaub ich immer noch ein Fehler drin. Außerdem war mal geplant bis 10 Schritte zurück und wieder vor zu gehen, dazu gibts auch schon ein Userform und Tabellen, aber der, für den ich das gemacht habe, fand das nicht so wichtig. Kopieren / ausschneiden und einfügen funktioniert aber.

https://www.herber.de/bbs/user/54655.zip

Achja, ein und ausschalten der Funktion per Doppelklick in eine Zelle.

Gruß
Nepumuk


  

Betrifft: AW: Fadenkreuz (@Nepumuk @Daniel @Hajo) von: Reinhard
Geschrieben am: 17.08.2008 11:12:21

Hallo Nepumuk,

danke für den Code, aber bist du dir sicher daß dies die richtige Datei ist?

Ein Fadenkreuz konnte ich da noch nicht finden, nach Doppelklick wird nur die aktive Zelle farblich markiert.

Die Pfeiltasten der Tastatur funktionieren nicht mehr.
Ist obenlinks A1 sichtbar so tut sich bei Pfeil nach oben und Pfeil nach links gar nix mehr, die beiden anderen Pfeiltasten machen nur das was ich gleich beschreibe für alle vier Pfeiltasten (wenn A1 nicht sichtbar ist)

Die Pfeiltasten verändern nicht die Zellposition, sondern verschieben nur das Blatt um eine Zelle, so daß es rein optiscch so wirkt als ob alle Pfeiltasten henau falschrum funktionieren.

Gruß
Reinhard


  

Betrifft: AW: Fadenkreuz (@Nepumuk @Daniel @Hajo) von: Nepumuk
Geschrieben am: 17.08.2008 11:20:43

Mann Reinhard,

drück die Scroll-Lock (Rollen) Taste. Dass ich dir das schreiben muss eieieieieiei. Ich hab auch nie behauptet, dass da ein Fadenkreuz erscheint. Dem Anfrager ging es damals darum die aktive Zelle in einer auffälligen Farbe zu bekommen, da er sehbehindert ist.

Gruß
Nepumuk


  

Betrifft: Fehler 13, Typen unverträglich, Deaktivierung xla von: Reinhard
Geschrieben am: 17.08.2008 11:26:21

Hallo Luschi und alle Anderen,

wenn ich das obige Add-In deaktiviere kommt der Laufzeitfehler 13 (Typen unverträglich) und die Zeile "Next C" im folgenden Code ist markiert.
C hat zu diesem Zeitpunkt den Wert "Nothing"


Sub SymbolLoeschen()
Dim C As CommandBarPopup
For Each C In Application.CommandBars("Worksheet Menu Bar").Controls
     If C.Caption = "Fadenkreuz" Then C.Delete
Next C
End Sub



Bei diesem Code würde ich ja einen Fehler verstehen weil ich die Schleife nicht rückwärts durchlaufe


With Application.CommandBars("Worksheet Menu Bar")
For X=1 To .Controls.count
     If .Controls(X).Caption = "Fadenkreuz" Then .Controls(X).Delete
next X


Aber das liegt ja nicht vor, insofern ist mir oben völlig unklar warum C Nothing ist bzw. beinhaltet.

Danke ^ Gruß
Reinhard


  

Betrifft: AW: Fehler 13, Typen unverträglich, Deaktivierung xla von: Nepumuk
Geschrieben am: 17.08.2008 12:17:03

Hallo Reinhard,

du legst durch deine Objektvariable fest, dass alle Controls in der Menüleiste vom Typ CommandBarPopup sind. Wenn nun ein anderer Typ, z.B. ein Button kommt, dann kann ihn deine Objektvariable nicht aufnehmen, der passt da einfach nicht rein. Darum kommt die Meldung Typ unverträglich.

Also, wenn du nicht 100% weißt, welche Typen von Objekten in einem Auflistungsobjekt vorhanden sind, dann deklariere die Objektvariabel nicht von einem bestimmten Typ, sondern als Objekt. Im Fall der Symbolleiste, kannst du erwarten, dass da nur Commandbarcontrols kommen. Dazu gibt es den Objekttyp Commandbarcontrol der alle unterschiedlichen Controls aufnehmen kann. Darum sollte deine Deklaration so aussehen:

Dim C As CommandBarControl

Gruß
Nepumuk


  

Betrifft: AW: Fehler 13, Typen unverträglich, Deaktivierung von: Reinhard
Geschrieben am: 17.08.2008 12:44:43

Hallo Nepumuk,

danke dir für die ausführliche Erklärung, ich werde das abändern bei Dim.

Zum Scrollen im anderen Beitrag, da wollte ich vorhin nicht antworten um mir mein "Frage noch offen" hier bei Fehler 13 nicht zu sabotieren.

Tja nu, aufs Einfachste kam ich halt nicht, außerdem war mein Hirn noch frisch Reizüberflutet vom Überflug über deine Codeansammlung in deiner xla :-))

Gruß
Reinhard