Microsoft Excel

Herbers Excel/VBA-Archiv

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

Prozedur zu lang

Betrifft: Prozedur zu lang von: Torge
Geschrieben am: 29.03.2007 14:29:43

Hallo,

kann hat jemand eine Hinweis, beziehe mich noch einmal auf meinen Beitrag vom https://www.herber.de/forum/archiv/808to812/t811489.htm.
Der Lösungsvorschlag von Reinhard funktioniert bei mir leider nicht, bekomme eine Fehlermeldung an der Stelle Blatt = Array("Passwort", "Eingabe (Quick-Check)", "Eingabe (Finanzg.-Prüfung)") 'Anpassen, und an der Stelle For n = 0 To UBound(Blattname) erwartet Datenfeld. Auf Grund das der Code ziemlich lang ist, bekomme ich den allgemeinen Fehlerhinweis, Prozedur zu lang, aber ich muss da noch einiges hinzufügen. Hat jemand eine Lösung?

Vielen Dank

T

  


Betrifft: AW: Prozedur zu lang von: Rudi Maintaire
Geschrieben am: 29.03.2007 14:55:03

Hallo,
es muss
for n=0 to Ubound(Blatt)
heißen.
Wie ist der Stand deiner Optimierung? Hast du meine Vorschläge umgesetzt?

Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 29.03.2007 17:11:29

Hallo Rudi,

puh, hab gebastelt und gebastelt, zwischenzeitlich waren einige andere Dinge dran und nun sitze ich erneut vor dem Problem, es will einfach nicht funktionieren. Ich versuche es noch einmal mit der Änderung von Dir jetzt, vielleicht klappt es ja dann, ansonsten melde ich mich noch einmal. Eine Frage noch, die einzelnen case Anweisungen
"'Bei Eingabe 0
Case 0, 5, 6
Sheets("Passwort").CommandButton2.Visible = True
Case 2, 3, 4
Sheets("Passwort").CommandButton1.Visible = True
Sheets("Passwort").CommandButton2.Visible = True
Sheets("Passwort").CommandButton3.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = True
Case 7....50
Case Else
End Select" beziehen sich doch auf die Button, welche jeweils bei gleichen Bedingungen eingeblendet werden, d.h. wird in einer Anweisung
z.b.
Case 2, 3, 4
Sheets("Passwort").CommandButton1.Visible = True
Sheets("Passwort").CommandButton2.Visible = True
Sheets("Passwort").CommandButton3.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = True und einer anderen, in der aber auf dem gleichen Tabellenblatt nur andere Button sichtbar sein sollen, w.z.b.

Case 5, 6, 7
Sheets("Passwort").CommandButton5.Visible = True
Sheets("Passwort").CommandButton6.Visible = True
Sheets("Passwort").CommandButton7.Visible = True
Sheets("Eingabe (Quick-Check)").CommandButton4.Visible = false,

muss ich diese jeweils in eine neue case Anweisung schreiben? Oder kann das alles in die mit 2,3 und 4?

Das Problem ist, dass auf den selben Tabellenblättern unterschiedliche Button sind, welche auch unterschiedlich sichtbar sein sollen, je nach dem welcher User Zugang hat.

Und in:
              Sub AlleVerbergen()
              Dim Blattname As String, n As Integer, CB As Shape
              Blatt = Array("Passwort", "Eingabe (Quick-Check)", "Eingabe (Finanzg.-Prüfung)") 'Anpassen
              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
              End 
              
              Sub werden nur die Tabellenblätter aufgeführt auf denen sich die jeweiligen Button befinden und  _
              ausgeblendet?
              
              
              Hoffe sind nicht all zu komplizierte Fragen:
              
              Trotzdem vielen danke an der Stelle.
              
              Gr. T
              
              

  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 29.03.2007 17:52:32

Hallo Rudi,

hab es nochmals probiert habe jetzt Fehlermeldung bei: Blatt = Array("Tabelle2", ist nicht Variable nicht defoniert, wenn ich Blattname einsetzt, dann wird an der Stelle bei "UBound" ein Datenfeld erwartet. Weißt Du, was hier falsch ist?

Sub AlleVerbergen()
Dim Blattname As String, n As Integer, CB As Shape
Blatt = Array("Tabelle2", _
"Passwort", _
"ETW - Angaben", _
"Eingabe (Quick-Check)", _
"Ergebnis (Quick-Check-Neubau)", _
"Ergebnis (Quick-Check-Bestand)", _
"Eingabe (Finanzg.-Prüfung)", _
"Ergebnis (Fin.-Prüfung-Neubau)", _
"Ergebnis (Fin.-Prüfung-Bestand)", _
"Fin.-Anfrage", _
"Ergebnis (Fin.-Plan-Neubau)", _
"Ergebnis (Fin.-Plan-Bestand)", _
"Grunddaten (Tilg.-Modelle)", _
"Annuitäten-Tilgung", _
"BSV 10 Jahre", _
"BSV 12 Jahre", _
"BSV 15 Jahre (35%)", _
"Daten data credit") 'Anpassen
'For n = 0 To UBound(Blatt)
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
End Sub
Das ist mein gesamter Code bis jetzt:
             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(50) As String, i%, n, z
             ' Übereinstimmungen  B1  K7
             For n = 1 To 46 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 - Selbstbau"
                 s(n + 4) = Chr(64 + z) & TZ & "Neubau - Kauf vom Bauträger"
             Next n
             If Not Application.Intersect(Target, Range("B1:K13")) Is Nothing Then
                 s(0) = Sheets("Passwort").Range("A1").Value & TZ & Range("K13").Value
                 For i = 1 To 50
                     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%)
             Call AlleVerbergen
             Call Zeigen
             Select Case intParam
             'Bei Eingabe 0
                 Case 0, 1, 5
                     Sheets("Passwort").CommandButton2.Visible = True
                 Case 2
                     Sheets("Passwort").CommandButton1.Visible = True
                     Sheets("Passwort").CommandButton2.Visible = True
                     Sheets("Passwort").CommandButton3.Visible = True
                     Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = True
                  Case 3
                     Sheets("Passwort").CommandButton1.Visible = True
                     Sheets("Passwort").CommandButton2.Visible = True
                     Sheets("Passwort").CommandButton3.Visible = True
                     Sheets("Eingabe (Quick-Check)").CommandButton3.Visible = True
                   Case 4
                     Sheets("Passwort").CommandButton1.Visible = True
                     Sheets("Passwort").CommandButton2.Visible = True
                     Sheets("Passwort").CommandButton3.Visible = True
                     Sheets("Eingabe (Quick-Check)").CommandButton5.Visible = True
                   Case 5
                     Sheets("Passwort").CommandButton1.Visible = True
                     Sheets("Passwort").CommandButton2.Visible = True
                     Sheets("Passwort").CommandButton3.Visible = True
                     Sheets("Passwort").CommandButton5.Visible = True
                     Sheets("Passwort").CommandButton7.Visible = True
                     Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = True
                     Sheets("Eingabe (Finanzg.-Prüfung)").CommandButton2.Visible = True
                     Sheets("Grunddaten (Tilg.-Modelle)").CommandButton11.Visible = True
                     Sheets("Fin.-Anfrage").CommandButton12.Visible = True
                     Sheets("Fin.-Anfrage").CommandButton13.Visible = True
             '    Case 7....50
                 Case Else
             End Select
             End Sub
             
Sub AlleVerbergen()
Dim Blattname As String, n As Integer, CB As Shape
Blattname = Array("Tabelle2", _
"Passwort", _
"ETW - Angaben", _
"Eingabe (Quick-Check)", _
"Ergebnis (Quick-Check-Neubau)", _
"Ergebnis (Quick-Check-Bestand)", _
"Eingabe (Finanzg.-Prüfung)", _
"Ergebnis (Fin.-Prüfung-Neubau)", _
"Ergebnis (Fin.-Prüfung-Bestand)", _
"Fin.-Anfrage", _
"Ergebnis (Fin.-Plan-Neubau)", _
"Ergebnis (Fin.-Plan-Bestand)", _
"Grunddaten (Tilg.-Modelle)", _
"Annuitäten-Tilgung", _
"BSV 10 Jahre", _
"BSV 12 Jahre", _
"BSV 15 Jahre (35%)", _
"Daten data credit") 'Anpassen
'For n = 0 To UBound(Blatt)
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
End Sub

Vielen Dank

Gr. T.


  


Betrifft: AW: Prozedur zu lang von: Uduuh
Geschrieben am: 29.03.2007 22:10:24

Hallo,
erste Korrektur:
            Sub AlleVerbergen()
            Dim Blattname() As String, n As Integer, CB As Shape
            Blattname = Array("Tabelle2", _
            "Passwort", _
            "ETW - Angaben", _
            "Eingabe (Quick-Check)", _
            "Ergebnis (Quick-Check-Neubau)", _
            "Ergebnis (Quick-Check-Bestand)", _
            "Eingabe (Finanzg.-Prüfung)", _
            "Ergebnis (Fin.-Prüfung-Neubau)", _
            "Ergebnis (Fin.-Prüfung-Bestand)", _
            "Fin.-Anfrage", _
            "Ergebnis (Fin.-Plan-Neubau)", _
            "Ergebnis (Fin.-Plan-Bestand)", _
            "Grunddaten (Tilg.-Modelle)", _
            "Annuitäten-Tilgung", _
            "BSV 10 Jahre", _
            "BSV 12 Jahre", _
            "BSV 15 Jahre (35%)", _
            "Daten data credit") 'Anpassen
            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
            End Sub
            

Gruß aus’m Pott
Udo



  


Betrifft: AW: Prozedur zu lang von: Uduuh
Geschrieben am: 29.03.2007 22:21:19

Hallo,
kannst du die Mappe hochladen, damit man sich mal einen Eindruck davon machen kann was da abgeht?

Gruß aus’m Pott
Udo



  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 30.03.2007 13:42:34

Hallo Udo,

kann ich machen, aber die Mappe ist 2,5 MB und das geht eben nicht. Ich kann hier nur meinen Code reinkopieren, wie ich ihn im original verwende und wie er zusammengebastelt aussieht oder eben nur eine einfache Datei mit 3 Tabellen und der Beschreibung.

Würde Dir das reichen?

Gr T.


  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 30.03.2007 14:34:15

Hallo Udo,

vielen Dank für Dein Interesse. Ich versuch mal die Datei hochzuladen. Habe sie etwas verkleinert und hoffe die Erklärungen sind etwas verständlich, wenn nicht, frag noch einmal nach. Das Problem ist, das im Feld B1 immer ein anderer Buchstabe steht und entsprechend des Buchstaben und der im Auswahlfeld getroffenen Auswahl werden auf den verschiedenen Tabellenblättern Button eingeblendet. Da es aber verschiedene User gibt und verschiedene auf den jeweiligen User zutreffende Varianten der Button die dann eingeblendet werden sollen, ist die Prozedur eben sehr groß. Und ich weiss nicht, wie ich die kleiner machen kann ohne das ich auf irgendetwas verzichten muss. Die Zahl der User und damit der Varianten soll noch um 2 erhöht werden.
https://www.herber.de/bbs/user/45.xls

Ist das so einigermaßen verständlich ????


Gr. T


  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 30.03.2007 14:34:21

Hallo Udo,

vielen Dank für Dein Interesse. Ich versuch mal die Datei hochzuladen. Habe sie etwas verkleinert und hoffe die Erklärungen sind etwas verständlich, wenn nicht, frag noch einmal nach. Das Problem ist, das im Feld B1 immer ein anderer Buchstabe steht und entsprechend des Buchstaben und der im Auswahlfeld getroffenen Auswahl werden auf den verschiedenen Tabellenblättern Button eingeblendet. Da es aber verschiedene User gibt und verschiedene auf den jeweiligen User zutreffende Varianten der Button die dann eingeblendet werden sollen, ist die Prozedur eben sehr groß. Und ich weiss nicht, wie ich die kleiner machen kann ohne das ich auf irgendetwas verzichten muss. Die Zahl der User und damit der Varianten soll noch um 2 erhöht werden.
https://www.herber.de/bbs/user/45.xls

Ist das so einigermaßen verständlich ????


Gr. T


  


Betrifft: AW: Prozedur zu lang von: offener
Geschrieben am: 01.04.2007 09:20:32

Hallo allerseits,
bei Zuweisung eines Array mit der Array-Funktion wird die Variable als Variant deklariert, also nur
Dim Blattname()
Hoffe geholfen zu haben Grüße von André aus Gera - Excel-97-2003



  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 01.04.2007 11:00:58

Hallo André,

vielen dank. Hab das jetzt so versucht, geht aber immer noch nicht. In Zelle B1 stehen verschiedene Buchstaben aber die Button werden nur eingeblendet, wenn Wert A in B1 steht. Ist der Wert B in B1, dann funktioniert das mit den einblenden der Button nicht mehr. Also bei Wert A werden die Button eingeblendet bei B eben nicht. Kannst Du mir hier noch einen Hinweis geben warum nicht, bzw. mein Fehler liegt??
      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(50) As String, i%, n, z
      ' Übereinstimmungen  B1  K7
      For n = 1 To 46 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
      If Not Application.Intersect(Target, Range("B1:K13")) Is Nothing Then
          s(0) = Sheets("Passwort").Range("B1").Value & TZ & Range("K13").Value
          For i = 1 To 50
              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%)
      Call AlleVerbergen
      Call Zeigen
      Select Case intParam
      'Bei Eingabe 0
          Case 0, 1 'A = ?
              Sheets("Passwort").CommandButton2.Visible = True
          Case 2 'A  = "Bestand"
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = True
           Case 3 'A  = "Neubau"
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Eingabe (Quick-Check)").CommandButton3.Visible = True
            Case 4 'A = ETW - Selbstnutzung
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Eingabe (Quick-Check)").CommandButton5.Visible = True
            Case 5 'A  = "Neubau - Kauf vom Bauträger"
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Passwort").CommandButton7.Visible = True
               Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = True
            Case 6 'B = ?
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Passwort").CommandButton5.Visible = True
              Sheets("Passwort").CommandButton7.Visible = True
           Case 6 'B = Bestand
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Passwort").CommandButton5.Visible = True
              Sheets("Passwort").CommandButton7.Visible = True
              Sheets("Eingabe (Quick-Check)").CommandButton2.Visible = True
              Sheets("Eingabe (Finanzg.-Prüfung)").CommandButton2.Visible = True
              Sheets("Grunddaten (Tilg.-Modelle)").CommandButton11.Visible = True
              Sheets("Fin.-Anfrage").CommandButton12.Visible = True
              Sheets("Fin.-Anfrage").CommandButton13.Visible = True
           Case 6 'B = Neubau
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Passwort").CommandButton5.Visible = True
              Sheets("Passwort").CommandButton7.Visible = True
              Sheets("Eingabe (Quick-Check)").CommandButton1.Visible = True
              Sheets("Grunddaten (Tilg.-Modelle)").CommandButton10.Visible = True
              Sheets("Grunddaten (Tilg.-Modelle)").CommandButton11.Visible = True
              Sheets("Fin.-Anfrage").CommandButton12.Visible = True
              Sheets("Fin.-Anfrage").CommandButton13.Visible = True
           Case 6 'B = ETW - Selbnutzung
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Passwort").CommandButton5.Visible = True
              Sheets("Passwort").CommandButton7.Visible = True
              Sheets("Eingabe (Quick-Check)").CommandButton1.Visible = True
              Sheets("Grunddaten (Tilg.-Modelle)").CommandButton10.Visible = True
              Sheets("Grunddaten (Tilg.-Modelle)").CommandButton11.Visible = True
              Sheets("Fin.-Anfrage").CommandButton12.Visible = True
              Sheets("Fin.-Anfrage").CommandButton13.Visible = True
           Case 6 'B = Neubau - Kauf vom Bauträger
              Sheets("Passwort").CommandButton1.Visible = True
              Sheets("Passwort").CommandButton2.Visible = True
              Sheets("Passwort").CommandButton3.Visible = True
              Sheets("Passwort").CommandButton5.Visible = True
              Sheets("Passwort").CommandButton7.Visible = True
              Sheets("Eingabe (Quick-Check)").CommandButton5.Visible = True
              Sheets("Eingabe (Finanzg.-Prüfung)").CommandButton5.Visible = True
              Sheets("Grunddaten (Tilg.-Modelle)").CommandButton12.Visible = True
              Sheets("Fin.-Anfrage").CommandButton12.Visible = True
              Sheets("Fin.-Anfrage").CommandButton13.Visible = True
          
      '    Case 7....50
          Case Else
      End Select
      End Sub
      
Sub AlleVerbergen()
'Dim Blattname As String, n As Integer, CB As Shape
Dim Blattname As Variant, n As Integer, CB As Shape
Blattname = Array("Tabelle2", _
"Passwort", _
"ETW - Angaben", _
"Eingabe (Quick-Check)", _
"Ergebnis (Quick-Check-Neubau)", _
"Ergebnis (Quick-Check-Bestand)", _
"Eingabe (Finanzg.-Prüfung)", _
"Ergebnis (Fin.-Prüfung-Neubau)", _
"Ergebnis (Fin.-Prüfung-Bestand)", _
"Fin.-Anfrage", _
"Ergebnis (Fin.-Plan-Neubau)", _
"Ergebnis (Fin.-Plan-Bestand)", _
"Grunddaten (Tilg.-Modelle)", _
"Annuitäten-Tilgung", _
"BSV 10 Jahre", _
"BSV 12 Jahre", _
"BSV 15 Jahre (35%)", _
"Daten data credit") 'Anpassen
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
End Sub
Sub Zeigen()
'Hier alle Commandbuttons sichtbar machen die sichtbar sein sollen
' Sheets("Passwort").CommandButton1.Visible = True
' Sheets("Passwort").CommandButton2.Visible = True
' Sheets("Passwort").CommandButton3.Visible = True
' Sheets("Passwort").CommandButton5.Visible = True
' Sheets("Passwort").CommandButton6.Visible = True
' Sheets("Passwort").CommandButton8.Visible = True
End Sub

Vielen Dank.

Gr. T.


  


Betrifft: AW: Prozedur zu lang von: schauan
Geschrieben am: 01.04.2007 12:31:13

Hallo Torge,
- warum hast Du eigentlich 5x case 6 ? Müsste dass nicht 6 bis 10 sein?
- dann setze mal einen Haltepunbkt in die Zeile
If Not Application.Intersect(Target, Range("B1:K13")) Is Nothing Then
und prüfe den Inhhalt deines s - Arrays ab (6)
Wenn das ok ist dann setze einen Haltepunkt in diese Zeile
If s(i) = s(0) Then ' Übereinstimmung gefunden
und schaue, ob s(6) bei i=6 identisch ist mit s(0)
Wenn da nichts zu finden ist sehen wir weiter ...
Hoffe geholfen zu haben Grüße von André aus Gera - Excel-97-2003




  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 02.04.2007 18:41:16

Hallo André,

hoffe bin nicht zu aufdringlich, aber ich wollte noch mal auf mein Anliegen zurückkommen. Habe noch mal eine kleine Beispielmappe gebastelt. Vielleicht klärt das mein Problem schon. kann auch sein ich habe da irgendwo ein Denkfehler. Kannst du bitte mal schauen.
https://www.herber.de/bbs/user/41500.xls

Vielen Dank

Gr. T.


  


Betrifft: AW: Prozedur zu lang von: schauan
Geschrieben am: 02.04.2007 19:53:35

Hallo Torge,
1. es fehlt das Sheet Passwort, habe das Sheet eingefügt und dort in B1 B eingegeben
2. Mit der Array-Begrenzung auf 5 geht nur A, die Schleife For n=1 to 5 Step 5 dürfte nur bis to 1 gehen, bei meinem Beispiel mit 2 Durchgängen dann nur bis 6

Hier mal der code, und es lief problemlos
   Private Sub Worksheet_Change(ByVal Target As Range)
   Application.ScreenUpdating = False
   On Error Resume Next
   'Einblenden von einzelner Button in Abhängikeit
   'des Wertes in B1 und der getroffenen Auswahl
   'in Zelle K13
   Const TZ = "_" ' Trennzeichen
   Dim s(10) As String, i%, n, z
   ' Übereinstimmungen  B1  K7
   For n = 1 To 6 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
   If Not Application.Intersect(Target, Range("B1:K13")) Is Nothing Then
       s(0) = Sheets("Passwort").Range("B1").Value & TZ & Range("K13").Value
       For i = 1 To 10
           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
   

Hoffe geholfen zu haben Grüße von André aus Gera - Excel-97-2003



  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 02.04.2007 21:53:04


Hallo André,

ganz herzlichen dank für deine aufgebrachte mühe. Denke so müsste es genau sein. funktioniert nun auch bei mir. allerletzte frage: wenn ich weiter case verwende, weil außer A und B nach weiter werte hinzukommen, zb. C,D;E,F,G und H, muss ich die zeile "For i = 1 To 10" hier anpassen? die anweisungen gehen in meiner originaldatei bis case 50, also ziemlich viel. die zeile "For n = 1 To 6 Step 5" wird so bleiben, denke dort kommt keine weitere auswahl hinzu, wenn doch denke ich, muss anstelle der 6 die entsprechende anzahl? liege ich da richtig?

also vielen dank bis hier erst mal.


gr. T.


  


Betrifft: AW: Prozedur zu lang von: schauan
Geschrieben am: 03.04.2007 05:30:00

Hallo Torge,
Du musst dann s(50) anpassen und wie Du schon schreibst das For, wie im Original z.B. 46. Im code habe ich sonst nichts gendert, der Haupt-Fehler im Beispiel war wie gesagt das fehlende Passwort-Blatt. Du musst dann aber auch schauen wie sich dort der Wert von B1 ändert oder auch nicht.
Grüße, Andre aus Gera


  


Betrifft: AW: Prozedur zu lang von: Torge
Geschrieben am: 03.04.2007 09:46:03

Super André und vielen dank für die Mühe.
Wünsch Dir eine schönen Tag, bis zum nächsten Mal.

Gruß T.


 

Beiträge aus den Excel-Beispielen zum Thema "Prozedur zu lang"