Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
304to308
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
304to308
304to308
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

laufzeitfehler 40036

laufzeitfehler 40036
09.09.2003 13:44:15
Claudia
Hallo zusammen,

ich brauche bitte, bitte Hilfe von Euch! Ich bin glaube ich schon ziemlich weit ohne meine VBA Kenntnisse gekommen, jedoch läuft das Makro noch immer nicht, so wie ich es mir vorstelle.

Im Code der Tabellenmappe steht folgendes:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 1 Then
Call Makro_1
End If
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 2 Then
End If
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 3 Then
Call Makro_3
End If
If Target.Address = Sheets("Parameter").Range("$D$23") And Target.Value = 4 Then
Call Makro_4
End If
End Sub


Es soll die Zelle D23 in der Tabelle "Parameter" beobachtet werden und wenn sich der Wert in dieser Zelle ändert, dann soll ein bestimmtes Makro ausgeführt werden.

Das funktioniert aber nicht - liegt es evtl. daran, was in der Excel-Hilfe steht?

Wenn ich die Makros selber starte, bricht es mit der Fehlermeldung "Laufzeitfehler 13" Typen unverträglich ab und die oben gekennzeichnete Zeile ist gelb markiert.

Und Chage ist wirklich der richtige Befehl, um automatisch eine Werteveränderung in der Zelle D22 zu erkennen? In der Hilfe von Excel steht:

Syntax

Private Sub Worksheet_Change(ByVal Ziel As Range)
Ziel   Der geänderte Bereich. Er kann mehr als eine Zelle umfassen.
Anmerkungen
Dieses Ereignis tritt nicht ein, wenn sich Zellen während einer Neuberechnung verändern. Verwenden Sie das Calculate-Ereignis, um eine Neuberechnung des Tabellenblattes aufzufangen.
Ist meine Veränderung der Zelle nicht eine Neuberechnung?
Ein zweites Problem ist nun folgendes. Die Makros, die ich starten möchte, starten nicht. :-)
Es kommt die Fehlermeldung "Laufzeitfehler 40036" und die Zeile " Sheets("Parameter").Select" ist markiert. Hier der Code:
Sub Makro_3()
Application.ScreenUpdating = False
Sheets("Parameter").Visible = True
Sheets("Parameter").Select
Range("B27:D74").Select
Selection.Copy
Sheets("Übersicht").Select
Range("R7:T54").Select
ActiveSheet.Paste
'   vorherigen Status (Tag) setzen
Sheets("Parameter").Select
Range("C20").Select
Selection.Copy
Range("C22").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Sheets("Parameter").Visible = False
Application.ScreenUpdating = True
End Sub


Hilfe, Hilfe.... es kann doch nicht sein, dass ich schon so weit gekommen bin und nun aufgeben muss...

Wer kann mir helfen?

Liebsten Gruß,
Claudi

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: laufzeitfehler 40036
09.09.2003 14:25:55
Galenzo
Das Worksheet_Change-Ereignis wird bei Änderungen in der Tabelle ausgelöst.
Dazu wird im Parameter "Target" die geänderte Zelle übergeben.
Du kannst nun zunächst abfragen, ob diese Zelle auch die Zelle D23 ist:
So:

if not intersect(range("D23"),target) is nothing then .......

und dann über eine "select case"-Verzweigung auf den Wert
der Zelle ("target.value") reagieren.

also:

if not intersect(range("D23"),target) is nothing then
select case target.value
1: call makro1
2: call makro2
end select
end if
Anzeige
AW: laufzeitfehler 40036
09.09.2003 14:45:44
Claudia
Hallo Galenzo,

vielen Dank für deine Antwort.

Leider wird das Makro noch nicht automatisch gestartet. Wird momentan überhaupt das aktuelle Tabellenblatt "Parameter" angesprochen? So in etwa: Target.Address = Sheets("Parameter").Range("$D$23") Der Code sieht mit deiner Hilfe aktuell so aus:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Range("D23"), Target) Is Nothing Then
Select Case Target.Value
1: Call Makro_1
2: Call Makro_2
3: Call Makro_3
4: Call Makro_4
End Select
End If
End Sub


Weitere Hilfe/ Vorschläge?

Liebsten Gruß,
Claudi.
Anzeige
AW: laufzeitfehler 40036
09.09.2003 15:06:12
ChrisL
Hi Claudi

If Target.Address = "$D$23" Then...

Gruss
Chris
AW: laufzeitfehler 40036
09.09.2003 16:57:11
Claudia
Hola Chris,

so etwa? Funktioniert aber nicht. Die Makros starten nicht, obwohl sich der Inhalt der Zelle durch die Formel ändert.


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = Sheets("Parameter").Range("$D$23") Then Exit Sub
On Errot GoTo ErrorHandler
Application.EnableEvents = False
Select Case Target.Value
Case 1
Call Makro_1
Case 2
Call Makro_2
Case 3
Call Makro_3
Case 4
Call Makro_4
End Select
ErrorHandler:
Application.EnableEvents = True
End Sub


Liebsten Gruß, Claudi.
Anzeige
AW: laufzeitfehler 40036
09.09.2003 16:57:21
Claudia
Hola Chris,

so etwa? Funktioniert aber nicht. Die Makros starten nicht, obwohl sich der Inhalt der Zelle durch die Formel ändert.


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = Sheets("Parameter").Range("$D$23") Then Exit Sub
On Errot GoTo ErrorHandler
Application.EnableEvents = False
Select Case Target.Value
Case 1
Call Makro_1
Case 2
Call Makro_2
Case 3
Call Makro_3
Case 4
Call Makro_4
End Select
ErrorHandler:
Application.EnableEvents = True
End Sub


Liebsten Gruß, Claudi.
AW: laufzeitfehler 40036
09.09.2003 17:03:31
ChrisL
Hi Claudi

Also erstens...

If Target.Address = Sheets("Parameter").Range("$D$23") Then

und...

If Target.Address = "$D$23" Then...

...ist ja wohl nicht das Gleiche oder?

Zweitens wenn sich der Wert aufgrund einer Formel ändert, dann löst es kein Worksheet_Change Ereignis aus. Du musst das Ereignis auf die Zellen beziehen, welche das Formelergebnis beeinflussen.

Gruss
Chris
Anzeige
AW: laufzeitfehler 40036
09.09.2003 17:23:17
Claudia
Hola Chris,

noch mal ganz langsam zum mitschreiben bitte.... :-)

Sorry, ich versuche schon den ganzen Tag eine Lösung zu finden - bin aber erst mit meinen nicht vorhandenen VBA Kenntnissen bis zu dem oben geschriebenen Code gekommen - also noch nicht sehr weit.

Gut erstens habe ich geändert:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$D$23" Then Exit Sub
On Errot GoTo ErrorHandler
Application.EnableEvents = False
Select Case Target.Value
Case 1
Call Makro_1
Case 2
Call Makro_2
Case 3
Call Makro_3
Case 4
Call Makro_4
End Select
ErrorHandler:
Application.EnableEvents = True
End Sub


Der Code sieht nun so aus - wobei ich schon 6 verschiedene Varianten erfolglos getestet habe. Unter Zweitens sagts du nun aber auch genau das, was ich in der Hilfe von Excel lesen konnte. Gibt es denn keine "Ereignisprozedur, welche die Wertveränderung in einer Zelle bei Neuberechnung erkennt? Ich kann mich nämlich nicht auf die Zellen beziehen, welche das Formelergebnis beeinflussen, da ich mir die Werte 1-4 zunächst errechen muss. Oder habe ich dich falsch verstanden?

Liebsten Gruß und danke für deine Mühe,
Claudi.
Anzeige
AW: laufzeitfehler 40036
09.09.2003 17:40:00
ChrisL
Hi Claudia

Aber irgendwie kommt doch deine Formelresultat zu stande. Da muss es doch irgend welche Zellen geben, die das Resultat beeinflussen.

Gruss
Chris
AW: laufzeitfehler 40036
09.09.2003 17:45:52
Claudia
Hola Chris,

ja in Zelle 23 steht folgende Formel:

=WENN(C20=C22;WENN(C20="falscher Tag";1;WENN(C20="gleicher Tag";2;));WENN(C20="gleicher Tag";3;WENN(C20="falscher Tag";4;)))

Meinst du jetzt die Zelle C20, bzw. C22?

Diese sind aber auch Zellverknüpfungen, bzw. andere Formeln. Ganz zu Anfang wähle ich mir aus einem Listenfeld einen von 7 verschiednen Einträgen (Wochentagen) und ich rechne sie dann um in:
Wechsel falscher_Tag_auf_falscher_Tag -> start Makro 1
Wechsel gleicher_Tag_auf gleicher_Tag -> start Makro 2
Wechsel falscher_Tag_auf_gleicher_Tag -> start Makro 3
Wechsel gleicher_Tag_auf_falscher_Tag - start Makro 4

Liebsten Gruß, Claudi.
Anzeige
AW: laufzeitfehler 40036
09.09.2003 17:55:13
ChrisL
Hi Claudi

Na also, jetzt kommen wir der Sache doch langsam auf den Grund. Jetzt noch die Frage um was für ein Listenfeld es sich handelt (VBA oder Formular) ;-)

Jedenfalls musst du das Makro direkt anhand des Listenfeldes auslösen. Falls ein Formular-Listenfeld, mit Makro verbinden (rechte Maustaste) und falls VBA...

Select Case ListBox1.ListIndex

Case 0
Call Makro1

Case 1
Call Makro2

etc.

End Select

Gruss
Chris
AW: laufzeitfehler 40036
09.09.2003 18:18:11
Claudia
Hallo Chris,

danke, danke, danke!!!! Du bist echt der Größte! :o)

Ich habe nun das folgende Makro meiner Listbox zugewiesen und in ein normales Modul kopiert und nun scheint alles zu funktionieren:


Sub Aenderung()
Application.ScreenUpdating = False
Sheets("Parameter").Visible = True
Sheets("Parameter").Select
If (Range("$D$23").Value = 1) Then
Call Makro_1
End If
If (Range("$D$23").Value = 2) Then
End If
If (Range("$D$23").Value = 3) Then
Call Makro_3
End If
If (Range("$D$23").Value = 4) Then
Call Makro_4
End If
Sheets("Parameter").Visible = False
Application.ScreenUpdating = True
Sheets("Übersicht").Select
End Sub


Danke, danke, danke! Manchmal scheint es eher an der Fomulierung der Frage zu scheitern.... glücklicherweise hast du lange genug nachgebohrt. Ich danke dir für deine Geduld.

Einen schönen Abend.

Claudi.
Anzeige
AW: laufzeitfehler 40036
09.09.2003 18:24:04
ChrisL
Hi Claudia

Gern geschehen... und jetzt noch ein bischen Kosmetik... ;-)


Sub Aenderung()
Select Case Sheets("Parameter").Range("D23")
Case 1
Call Makro1
Case 2
Call Makro2
etc.
End Select
End Sub


Das Blatt musst du nicht einblenden, um einen Wert abzufragen.

Gruss
Chris
AW: laufzeitfehler 40036
09.09.2003 18:48:23
Claudia
Hola Chris,

habe die Kosmetik auch noch umgesetzt und es funktioniert sogar.

Wenn du die anderen Makros sehen würdest, welche ich durch deinen Code aufrufe, würdest du warscheinlich lachen, da die glaube ich sehr vile Kosmetik nötig hätten. :o)

Danke dir!

Claudi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige