Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
964to968
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
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler bei Abhandlung der Prozedur

Fehler bei Abhandlung der Prozedur
09.04.2008 16:10:46
Toxma
Hallo,
kann jemand helfen? Hab hier so eine ellenlange Prozedur, kann man die irgendwie kürzen, wenn nicht, kann man das ganze dann auch in ein Makro legen oder gibt da irgend eine andere Lösung. Ich sterbe hier bald ab. Einmal bekomme ich die Fehlermeldung Prozedur zu groß, ein andermal funktioniert alles nicht mehr. Füge den Code mal hier bei, die Datei ist leider 4 MB, also nicht zum hochladen geeignet.
Danke schon mal an der Stelle.
'Einblenden von Button in Abhängikeit der PW-Eingabe

Private Sub Worksheet_Change(ByVal target As Range)
Application.ScreenUpdating = False
On Error Resume Next
'Einblenden von Button in Abhängikeit der PW-Eingabe
Const TZ = "_" ' Trennzeichen
Dim s(60) As String, i%
' Übereinstimmungen  B1  K7
'A
s(1) = "A" & TZ & "?"
s(2) = "A" & TZ & "ETW zur Kapitalanlage"
s(3) = "A" & TZ & "Bestandsobjekt"
s(4) = "A" & TZ & "Neubau"
s(5) = "A" & TZ & "Neubau - Wunschberechnung"
s(6) = "A" & TZ & "Neubau - Kauf vom Bauträger"
s(54) = "A" & TZ & "?"
s(55) = "A" & TZ & "ETW zur Kapitalanlage"
s(56) = "A" & TZ & "Bestandsobjekt"
s(57) = "A" & TZ & "Neubau"
s(58) = "A" & TZ & "Neubau - Wunschberechnung"
s(59) = "A" & TZ & "Neubau - Kauf vom Bauträger"
If Not Application.Intersect(target, Range("B1:K15")) Is Nothing Then
s(0) = Sheets("Zinskondition").Range("B1").Value & TZ & _
Range("K15").Value
For i = 1 To 60
If s(i) = s(0) Then ' Übereinstimmung gefunden
SetButton i
Exit Sub
End If
Next i
SetButton 0 ' Alle ausblenden wenn keine Übereinstimmung
End If
End Sub


'Einblenden der Button in Abhängigkeit der Auswahl


Private Sub SetButton(intParam%)
Select Case intParam
'Bei Eingabe 0
Case 0
Case 1
' Erste Bedingung s(1) = "A" & TZ & "?"
Case 2
' Bedingung s(2) = "A" & TZ & "ETW zur Kapitalanlage"
Case 3
' Bedingung s(3) = "A" & TZ & "Bestandsobjekt"
Case 4
' Bedingung s(4) = "A" & TZ & "Neubau"
Case 5
' Bedingung s(5) = "A" & TZ & "Neubau - Wunschberechnung"
Case 6
' Bedingung s(5) = "A" & TZ & "Neubau - Kauf vom Bauträger"
Case 60
' Bedingung s(5) = "A" & TZ & "Neubau - Kauf vom Bauträger"
End Select
End Sub


Gr. T.

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 16:28:50
Luc:-?
...entdecken, Toxma!
Was mir auffällt, ist nur, dass du ScreenUpdating nicht wieder einstellst. Außerdem kann ich nicht erkennen, inwiefern deine Ereignisprozedur den SetButton-Aufruf vom Passwort abhängig macht. Wenn das schon der ganze PgmCode ist, ist mir unverständlich, weshalb der zu lang sein sollte (es sei denn, er vermehrt sich von selbst!)... ;-)
Vielleicht solltest du noch die Reaktion auf Ereignisse abschalten, solange auf das 1.Ereignis reagiert wird, damit daraus kein Endlosprozess wird (Application.EnableEvents=False/True).
Gruß Luc :-?

Anzeige
AW: Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 17:00:51
Toxma
Hallo Luc,
dank für den Hinweis. Was meinst Du mit "Reaktion auf Ereignisse abschalten?".
Das Passwort setzt sich wie folgt zusammen: zb steht in Zelle B1 der Wert "A", "B", oder "C" bis eben "G". Bei der Auswahl in Zelle K15, wird entsperchend der getroffnenen Übereinstimmung die oder der jeweilige Button ein- bzw. ausgeblendet. Dies ist je nach Auswahl eine unterschiedliche Anzahl von Button. Siehe hier:
Sheets("Vorstellung").CommandButton1.Visible = True
Sheets("Vorstellung").CommandButton2.Visible = True
Sheets("Passwort").CommandButton1.Visible = False
Sheets("Passwort").CommandButton2.Visible = True
Sheets("Passwort").CommandButton3.Visible = True
Sheets("Passwort").CommandButton4.Visible = True
Sheets("Passwort").CommandButton7.Visible = True
Sheets("Passwort").CommandButton9.Visible = False
Sheets("Passwort").CommandButton10.Visible = False
Sheets("Passwort").CommandButton13.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton1.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton3.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton4.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton5.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton6.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton7.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton8.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton7.Visible = True
Sheets("(Quick-Check Wunschberechnung)").CommandButton1.Visible = True
Sheets("(Quick-Check Wunschberechnung)").CommandButton2.Visible = True
Sheets("(Quick-Check Wunschberechnung)").CommandButton3.Visible = True
Sheets("(Quick-Check Wunschberechnung)").CommandButton4.Visible = True
Sheets("(Quick-Check Wunschberechnung)").CommandButton5.Visible = True
Sheets("(Quick-Check - Berechnung)").CommandButton1.Visible = True
Sheets("(Quick-Check - Berechnung)").CommandButton2.Visible = False
Sheets("(Quick-Check - Berechnung)").CommandButton3.Visible = True
Sheets("(Quick-Check - Berechnung)").CommandButton4.Visible = True
Sheets("(Quick-Check - Berechnung)").CommandButton5.Visible = True
Sheets("(Quick-Check - Berechnung)").CommandButton6.Visible = True
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton1.Visible = False
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton2.Visible = False
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton3.Visible = True
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton4.Visible = True
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton5.Visible = True
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton6.Visible = True
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton7.Visible = False
Sheets("Eingabe (Finanzierungsprüfung)").CommandButton10.Visible = False
Ich hab auch schon eine anderer Variante probiert, in der der Code etwas abgewandelt wurde, mit hilfe aus dem Forum aber auch hier bekomme ich die Fehlermeldung Prozedur zu groß.

Private Sub Worksheet_Change(ByVal target As Range)
Application.ScreenUpdating = False
On Error Resume Next
'Einblenden von einzelner Button in Abhängikeit Auswahl B1 und K13
Const TZ = "_" ' Trennzeichen
Dim s(60) As String, i%, n, z
' Übereinstimmungen  B1  K15
For n = 1 To 60 Step 6
z = z + 1
s(n + 0) = Chr(64 + z) & TZ & "?"
s(n + 1) = Chr(64 + z) & TZ & "ETW zur Kapitalanlage"
s(n + 2) = Chr(64 + z) & TZ & "Bestandsobjekt"
s(n + 3) = Chr(64 + z) & TZ & "Neubau"
s(n + 4) = Chr(64 + z) & TZ & "Neubau - Wunschberechnung"
s(n + 5) = Chr(64 + z) & TZ & "Neubau - Kauf vom Bauträger"
Next n
If Not Application.Intersect(target, Range("B1:K15")) Is Nothing Then
s(0) = Sheets("Passwort").Range("B1").Value & TZ & Sheets("Passwort").Range("K15").Value
For i = 1 To 60
If s(i) = s(0) Then ' Übereinstimmung gefunden
SetButton i
Exit Sub
End If
Next i
SetButton 0 ' Alle ausblenden wenn keine Übereinstimmung
End If
Application.ScreenUpdating = True
End Sub


'Einblenden der Button in Abhängigkeit der Auswahl


Private Sub SetButton(intParam%)
Application.DisplayAlerts = False
Call AlleVerbergen
Call Zeigen
Select Case intParam
'Bei Eingabe 0
Case 0  'Bei Eingabe 0 in Zelle B1 = "?"
'alle  ausblenden
Case 1 'Bei Eingabe A = Zelle B1 = "?" in K15
'aus/einblenden
Case 2 'Bei Eingabe A = Zelle B1 = "ETW zur Kapitalanlage" in K12
'aus/einblenden
Case 3 'Bei Eingabe A = Zelle B1 = "Bestandsobjekt" in K12
'aus/einblenden
Case 4 'Bei Eingabe A =  Zelle B1 = "Neubau" in K12
Case 5 'Bei Eingabe A =  Zelle B1 = "Neubau  - Wunschberechnung" in K12
'aus/einblenden
Case 6 'Bei Eingabe A =  Zelle B1 = "Neubau- Kauf vom Bauträger" in K12
'aus/einblenden
Case 60 'Bei Eingabe K =  Zelle B1 = "Neubau - Kauf vom Bauträger" in K12
'aus/einblenden
Case Else
End Select
Application.DisplayAlerts = True
End Sub


'TB Blätte ausblenden
Sub AlleVerbergen()
Application.DisplayAlerts = False
Dim Blattname As Variant, n As Integer, CB As Shape
Blattname = Array("Tabelle1", "Passwort", _
"Eingabe (Quick-Check)", "Vorstellung", _
"Darl.-Anlage", _
"Ergebnis (Fin.-Plan-Bestand)")
For n = 0 To UBound(Blattname)
For Each CB In Worksheets(Blattname(n)).Shapes
If CB.Name Like "Command*" Then CB.Visible = False
Next CB
Next n
Application.DisplayAlerts = True
End Sub


Sub Zeigen()
End Sub


Anzeige
AW: Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 17:28:00
Reinhard
Hi Toxma,
"Reaktion auf Ereignisse" = Application.Enableevents=true/false
gemäß deiner For i=1 to 60 step 6 läüft die vom Buchstaben "A" bis "J", du sprichst mal von "A"-"G", mal von "A"-"K", was gilt denn nun? wahrscheinlich "J" ?
Was hat sich mit K12 auf sich? Was mit K13? Soll das alles K15 heißen?
Warum überprüfst du in der If-Abfrage Range("B1:K15") wo du doch nur Zelle B1 und K15 überwachen willst, bzw. willst du das überhaupt, wann soll denn der Code reagieren, bei Eingabe in B1, in K15, in B1 oder K15, oder doch bei Eingabe irgendwo in B1:15 ?
Gruß
Reinhard

Anzeige
AW: Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 20:25:04
Torge
Hallo Reinhard,
danke für Deine Hinweise. Also die einzelnen Aktionen sollen bei erfolgen, wenn in Zelle B1, sagen wir Wert "A" steht und in K13 etwas ausgewählt wurde. Hier mal eine Beispieldatei von mir. Diese ist nur etwas kleiner als mein Original. Die Funktionsweise ist die gleiche, eben hier nur weniger Code. Hoffe macht es etwas verständlicher.
https://www.herber.de/bbs/user/51389.zip
Gr. T.

AW: Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 20:53:50
Erich
Hallo Torge,
mit ein paar Änderungen (Dim s(), Laufschleife für n, Range("B1,K13") statt Range("B1:K13"))
sollte es so funzen:

Private Sub Worksheet_Change(ByVal Target As Range)
'Einblenden von einzelner Button in Abhängikeit
'des Wertes in B1 und der getroffenen Auswahl
'in Zelle K13
Const TZ = "_" ' Trennzeichen
Dim s(15) As String, i%, n, z
If Not Application.Intersect(Target, Range("B1,K13")) Is Nothing Then
'     Application.ScreenUpdating = False
'     On Error Resume Next
For n = 1 To 11 Step 5
z = z + 1
s(n + 0) = Chr(64 + z) & TZ & "?"
s(n + 1) = Chr(64 + z) & TZ & "Bestand"
s(n + 2) = Chr(64 + z) & TZ & "Neubau"
s(n + 3) = Chr(64 + z) & TZ & "ETW - Selbstnutzung"
s(n + 4) = Chr(64 + z) & TZ & "Neubau - Kauf vom Bauträger"
Next n
' Übereinstimmungen  B1  K13
s(0) = Range("B1").Value & TZ & Range("K13").Value
For i = 1 To 16
If s(i) = s(0) Then ' Übereinstimmung gefunden
SetButton i
Exit Sub
End If
Next i
SetButton 0 ' Alle ausblenden wenn keine Übereinstimmung
End If
End Sub

Daneben möchte ich dir eine andere Möglichkeit aufzeigen:
Statt die Ein-/Ausblend-Abhängigkeit von den Eingaben Logik im VBA-Code abzulegen,
könntest du den Zusammenhang auch in eine Tabelle schreiben und die Eingaben dann in VBA
anhand der Tabelle auswerten.
So könnte die Tab. z. B. aussehen: https://www.herber.de/bbs/user/51391.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 21:18:13
Torge
Hallo Erich,
erstmal vielen dank für die Hinweise. Wie machst Du das in Excel, seh ich noch nicht ganz durch, hast Du da irgendwie ein weiteres oder ähnliches Beispiel?
Gr. T.

AW: Kürzungsmöglichkeit
10.04.2008 10:12:00
Erich
Hallo Torge,
schau dir diese Mappe mal an: https://www.herber.de/bbs/user/51405.xls
Vorläufig werden darin nur die Zeilen 3 bis 10 im Blatt "Buttons" ausgewertet.
Wenn die Zuordnungen und die richtigen Blattnamen da stehen, kannst du statt der 10
den dahinter stehenden Kommentar aktivieren.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Kürzungsmöglichkeit
10.04.2008 11:48:19
Toxma
Hallo Erich,
super Dank, sieht sehr gut aus. Letzte Frage, was meinst Du mit "Wenn die Zuordnungen und die richtigen Blattnamen da stehen, kannst du statt der 10 den dahinter stehenden Kommentar aktivieren.?" Meinst Du, der Eintrag eines "x" in die jeweilige Zelle des entsprechenden TB-Namen in der sich der Button befindet? Steig da noch nicht ganz so hinter. Ich frage nur noch einmal, weil meine Datei ziemlich groß an MB ist und dort ca. 20 TB-Blätter vorhanden sind und in jedem die entsprechenen Button, welche sich je nach Auswahl ein- oder ausblenden müssen. Und funktioniert dies auch, wenn einzelne TB ausgeblendet sind? Ich hab es noch nicht probiert, mach ich aber heute. Ist echt super, wenn das alles so funktioniert, dann hätte ich mein Problem gelöst in dieser Sache zumindest.
Gruß und Danke aus Berlin
T

Anzeige
AW: Kürzungsmöglichkeit
10.04.2008 12:17:38
Reinhard
Hi Toxma,
For zz = 3 To 10 '.Cells(.Rows.Count, 2).End(xlUp).Row
ändern in
For zz = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
das Hochkomma ist das Kommentarkennzeichen in Vba, was danach steht in der Zeile wird nicht als Code betrachtet, naja, halt als Kommentar zu der Codezeile :-)
Noch gar nicht gestet ob's geht, früher (Basic ohne V) kennzeichnete ein "REM" (Remarks) Kommentare
Gruß
Reinhard

AW: Kürzungsmöglichkeit
10.04.2008 12:25:00
Toxma
Hallo Reinhard,
danke für den Hinweis aber mit der Änderung bekomme ich eine Fehlermeldung.
Häng die Datei mal mit ran. Habe jetzt in TB 2 und 3 Button eingefügt, die werden leider nicht angezeigt und ich weiss nicht warum nicht.
https://www.herber.de/bbs/user/51409.xls
Gr. T

Anzeige
AW: Kürzungsmöglichkeit
10.04.2008 12:35:00
Erich
Hi Torge,
du hast jetzt zwar die Zeilen bis 16 mit passenden Werten gefüllt,
aber die Routine verarbeitet nur die Zeilen bis 10.
Mach doch mal aus "For zz = 3 To 10" jetzt "For zz = 3 To 16"
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Kürzungsmöglichkeit
10.04.2008 12:44:00
Toxma
Hallo Erich,
bin ich auch gerade drauf gekommen.
Also super super Danke funktioniert toll, auch mit Ausblenden des TB. Frage damit erledigt.
Vielen Dank für die Hilfe, wünsch Dir ein angenehme restliche Woche bis zum nächsten mal.
Gr. T.

AW: Kürzungsmöglichkeit
11.04.2008 11:19:14
Toxma
Hallo Erich,
entschuldige, muss hoffe ist nicht ungelegen. Hab noch ein Problem. Kann ich Dir mal meinen Originaldatei schicken. Bis jetzt hat alles so funktioniert wie Du beschrieben hattes. Hab das bei mir jetzt eingebaut und erweitert und plötzlich funktioniert es nicht mehr. Vielleicht kannst Du Dir die Mappe noch einmal anschauen und siehst eventuell den Fehler. Müsste dazu aber eine andere Mail haben, weil die Datei sonst hier zu groß wäre zum hochladen.
Danke T.

Anzeige
AW: Kürzungsmöglichkeit
11.04.2008 11:39:29
Erich
Hallo Torge,
klar, du kannst mir gern mal deine Mappe schicken.
Schau mal (hier oben) in Forums-Seiten - Profile - Profilliste
Dort findest du bei Erich G. eine Mail-Adresse (wg. Spam etwas verklausuliert...).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

"...früher kennzeichnete ein REM Kommentare..."
10.04.2008 13:45:25
Luc:-?
Das ist auch heute noch so, Reinhard!
Apostroph ist nur die Abkürzung dafür... ;-)
Gruß Luc :-?

AW: Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 17:49:27
Rudi
Hallo,
als Ansatz /Ersatz für
Sheets("Passwort").CommandButton1.Visible = False
Sheets("Passwort").CommandButton2.Visible = True
Sheets("Passwort").CommandButton3.Visible = True
Sheets("Passwort").CommandButton4.Visible = True
Sheets("Passwort").CommandButton7.Visible = True
Sheets("Passwort").CommandButton9.Visible = False
Sheets("Passwort").CommandButton10.Visible = False
Sheets("Passwort").CommandButton13.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton1.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton3.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton4.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton5.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton6.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton7.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton8.Visible = False
Sheets("Eingabe (Quick-Check)").CommandButton7.Visible = True

Sub tt()
Dim arrVisible, arrBtn
arrVisible = Array(0, -1, -1, -1, -1, 0, 0, 0)
arrBtn = Array(1, 2, 3, 4, 7, 9, 10, 13)
ButtonsOnOff Sheets("Passwort"), arrBtn, arrVisible
arrVisible = Array(0, 0, -1, -1, 0, -1, -1, 0)
arrBtn = Array(1, 2, 3, 4, 5, 6, 7, 8)
ButtonsOnOff Sheets("Eingabe (Quick-Check)"), arrBtn, arrVisible
End Sub



Sub ButtonsOnOff(wks As Worksheet, arrButtons, arrVisible)
For i = 0 To UBound(arrButtons)
wks.Controls("CommandButton" & arrButtons(i)).Visible = arrVisible(i)
Next
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Ich kann hierbei keine Kürzungsmöglichkeit...
09.04.2008 20:32:58
Torge
Hallo Rudi,
vielen dank für den Hinweis. Versteht das aber leider nicht ganz, kannst Du mir das kurz erläutern? Kann oder wie muss ich das bei den verschiedenen Case-Anweisungen anwenden? Das ist hier mal meine Musterdatei. Vielleicht kannst Du mir da noch einmal helfen!
Gr. T.

AW: Fehler bei Abhandlung der Prozedur
09.04.2008 16:48:00
Renee
Hi Toxma,
Was ein solches Riesenkonstrukt in einer CHANGE Event Prozedur zu suchen hat ist mir schleierhaft.
Da wird ein 60teiliger Array statisch auf gebaut um bei Übereinstimmung über eine 2te Prozedur irgendwas zu machen. Warum ist das Ganze nicht einfach mit Formeln und Zellinhalten gelöst ?
Zumindest gehört ein Application.EnableEvents = False an den Anfang und ein Appliation.EnableEvents = True an das Ende des Change Events.
GreetZ Renée

AW: Fehler bei Abhandlung der Prozedur
09.04.2008 17:13:00
Toxma
Hallo Reneè,
danke für den Hinweis.
Leider geht das ganze nicht mit Formeln zu regeln, es sein denn, Du hast da einen Vorschlag. Ich kann Dir auch meine Beispieldatei schicken, muss ich nur etwas kleiner machen, ist mit 4MB leider zu groß.
Mittels der in einem Auswahlfeld getroffenen Auswahl werden Button ein- bzw- ausgeblendet. Das kann man sicher nicht mit Formeln lösen.
Gr. T.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige