rider: VB-Script und Excel Button

Hallo nochmal!

Irgendwie kann ich in dem alten Beitrag nix mehr schreiben. Scheint ja archiviert zu sein. Komisch, komisch.

Erste vielen Dank nochmal an Rouver und Jörg für die Hilfe.

Es funktioniert jetzt sogar. Krasse Sache.

------------------------------------------------------------------
Nochmal zur Erinnerung um was es ging:

Moins!
Habe da mal ne recht komplexe Frage an euch.

Hab mir in Excel ne Tabelle erstellt. Aber nun fehlt mir noch eine
Abfrage um den Spass komplett zu machen.

Es soll auf meinem Starttabellenblatt ein Button stehen. Wenn man auf diesen klickt
soll eine Abfrage erscheinen in der man einen Namen eintippen kann.
Dieser dort verwendete Name soll dann der Name eines Tabellenblattes werden das im gleichen Schritt
auch von einem schon vorhandenen kopiert wird (da ist ne komplexe Tabelle drin).

Kann mir da jemand helfen?

MfG
------------------------------------------------------------------

Mein aktuelles Script:

Sub CommandButton1_Click()
   Dim Traegername As String
   Traegername = InputBox("Wie heißt der Traeger?")
   ThisWorkbook.Worksheets("Haupt").Copy After:=Worksheets("GfM")
   ActiveSheet.name = Traegername
End Sub

Also das klappt schonmal. Werde jetzt noch die Abfragen einbauen (bzw. es versuchen).

Ein paar Fragen habe ich aber schonmal noch.
1. Wie kann ich einfach die kopierte Tabelle ans Ende der Blätter setzten? Also nicht das diese nach einem bestimmen Blatt eingefügt wird, sondern einfach die letzte Position einnimmt?

2. Ich möchte noch das in jeden kopierten Blatt die Zelle C2 den Namen des Blattes das kopierte wurde annimmt. Geht das "irgendwie" ?

Dank euch!

MfG
Mathias

  1. Hello,

    1. Wie kann ich einfach die kopierte Tabelle ans Ende der Blätter setzten? Also nicht das diese nach einem bestimmen Blatt eingefügt wird, sondern einfach die letzte Position einnimmt?

    hmh, kenne gerade die Zählweise von Excel nicht, aber es ist entweder
    ThisWorkbook.Worksheets("Haupt").Copy After:=ThisWorkbook.Worksheets.Length
    oder
    ThisWorkbook.Worksheets("Haupt").Copy After:=ThisWorkbook.Worksheets.Length-1

    na ja, oder -2 *g*

    1. Ich möchte noch das in jeden kopierten Blatt die Zelle C2 den Namen des Blattes das kopierte wurde annimmt. Geht das "irgendwie" ?

    aber freilich, du hast über
    ActiveSheet.Cell("C", 2).Value vollen Zugriff darauf.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    There's no such thing as a free lunch  --  Milton Friedman
    1. Sub CommandButton1_Click()
         Dim Traegername As String
         Dim objBlatt As Object
         Dim strQuellBlatt As String
         strQuellBlatt = "Haupt"

      On Error GoTo FEHLER
         Set objBlatt = ThisWorkbook.Sheets(strQuellBlatt)
         On Error GoTo 0

      Traegername = Application.InputBox("Bitte geben Sie den Namen des neuen Trägers ein!", "Name", Traegername)
         If Traegername = "" Then Exit Sub

      If Len(Traegername) > 31 Then
          MsgBox "Der Name ist zu lang, er darf nicht mehr als 31 Zeichen enthalten.", vbOKOnly + vbExclamation, "Schwerer Ausnahmefehler"
          Exit Sub
         End If

      If Traegername Like "*[:&/?*[]*" Or Traegername Like "*]*" Then
          MsgBox "Im Namen ist ein ungültiges Zeichen enthalten. Folgende Zeichen sind nicht erlaubt: [ : \ & / ? * [ ] * ", vbOKOnly + vbExclamation, "Computerabsturz"
          Exit Sub
         End If

      For Each objBlatt In ThisWorkbook.Sheets
              If objBlatt.name = Traegername Then
              MsgBox "Dieser Träger exsistiert bereits! Bitte nutzen Sie das vorhandene Arbeitsblatt!", vbOKOnly + vbExclamation, "Allgemeine Schutzverletzung"
              Exit Sub
          End If
      Next

      ThisWorkbook.Worksheets("Haupt").Copy After:=Worksheets("GfM")
         ActiveSheet.name = Traegername
         ActiveSheet.Cell("C", 2).Value

      Set objBlatt = Nothing
      Exit Sub

      FEHLER:
      MsgBox "Fehler: Das zu kopierende Blatt " & strQuellBlatt & " existiert nicht.", vbOKOnly + vbCritical, "Schwerer Verlust"
      End Sub

      Das mag  er übrigens gar nicht :
      ThisWorkbook.Worksheets("Haupt").Copy After:=ThisWorkbook.Worksheets.Length-1
      (auch mit -2).

      Hab ich das "ActiveSheet.Cell ("C", 2).Value" jetzt an der richtigen Position? Er bringt mir da bei der Ausführung das dass Objekt die Ausführung nicht unterstützt.

      MfG

      1. Hello,

        ThisWorkbook.Worksheets("Haupt").Copy After:=ThisWorkbook.Worksheets.Length-1
        (auch mit -2).

        stimmt, mein Fehler, .Count statt .Length

        Hab ich das "ActiveSheet.Cell ("C", 2).Value" jetzt an der richtigen Position? Er bringt mir da bei der Ausführung das dass Objekt die Ausführung nicht unterstützt.

        stimmt, mein Fehler, .Cells, nicht .Cell

        sorry, habs ins Unreine geschrieben.

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
        1. Habs korrigiert, aber er meckert bei beiden noch rum. Die -1 oder -2 als Parameter hab ich alle probiert.

          Sub CommandButton1_Click()
             Dim Traegername As String
             Dim objBlatt As Object
             Dim strQuellBlatt As String
             strQuellBlatt = "Haupt"

          On Error GoTo FEHLER
             Set objBlatt = ThisWorkbook.Sheets(strQuellBlatt)
             On Error GoTo 0

          Traegername = Application.InputBox("Bitte geben Sie den Namen des neuen Trägers ein!", "Name", Traegername)
             If Traegername = "" Then Exit Sub

          If Len(Traegername) > 31 Then
              MsgBox "Der Name ist zu lang, er darf nicht mehr als 31 Zeichen enthalten.", vbOKOnly + vbExclamation, "Schwerer Ausnahmefehler"
              Exit Sub
             End If

          If Traegername Like "*[:&/?*[]*" Or Traegername Like "*]*" Then
              MsgBox "Im Namen ist ein ungültiges Zeichen enthalten. Folgende Zeichen sind nicht erlaubt: [ : \ & / ? * [ ] * ", vbOKOnly + vbExclamation, "Computerabsturz"
              Exit Sub
             End If

          For Each objBlatt In ThisWorkbook.Sheets
                  If objBlatt.name = Traegername Then
                  MsgBox "Dieser Träger exsistiert bereits! Bitte nutzen Sie das vorhandene Arbeitsblatt!", vbOKOnly + vbExclamation, "Allgemeine Schutzverletzung"
                  Exit Sub
              End If
          Next

          ThisWorkbook.Worksheets("Haupt").Copy After:=ThisWorkbook.Worksheets.Count
             ActiveSheet.Cells("C", 2).Value
             ActiveSheet.name = Traegername

          Set objBlatt = Nothing
          Exit Sub

          FEHLER:
          MsgBox "Fehler: Das zu kopierende Blatt " & strQuellBlatt & " existiert nicht.", vbOKOnly + vbCritical, "Schwerer Verlust"
          End Sub

          1. Hello,

            ActiveSheet.Cells("C", 2).Value

            *grml* OK, probier statt des "C" mal 3.

            bzgl. des Copy nehme ich an, dass er ein Sheet statt einer Position möchte, du könntest also
            After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count - 1)
            ausprobieren.

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            Wenn du die Nadel im Heuhaufen nicht findest, zünde den Heuhaufen an.
            1. Suppi, jetzt schiebt er mit das Blatt ans Ende. Allerdings musst ich die -1 noch entfernen. Danke für die Hilfe.

              ActiveSheet.Cells("3", 2).Value
              Das macht er noch nicht. Fehlt jetzt nich irgendwie auch der Bezug auf die Zelle (C2 im Excel Blatt) in der jeweils der Name jetzt erscheinen soll?

              mfg

              1. Hello,

                ActiveSheet.Cells("3", 2).Value

                ActiveSheet.Cells(3, 2).Value

                MfG
                Rouven

                --
                -------------------
                sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                I will never understand why Germans feel the need to kill trees  --  Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
                1. Leider kommt immer noch ein Laufzeitfehler (438)!
                  -> Objekt unterstützt diese Eigenschaft oder Methode nicht!

                  1. Hello,

                    Leider kommt immer noch ein Laufzeitfehler (438)!
                    -> Objekt unterstützt diese Eigenschaft oder Methode nicht!

                    auf welchem Objekt (sollte markiert sein, nachdem du auf OK oder Debug oder sowas klickst) - im Zweifel musst du dazu kurzfristig das "On Error GoTo FEHLER" ausbauen.

                    MfG
                    Rouven

                    --
                    -------------------
                    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                    When the only tool you've got is a hammer, all problems start to look like nails.
                    1. Also wenn ich auf Debuggen klicke, markiert der mir halt die komplette Zeile
                      ActiveSheet.Cells(2, 3).Value !

                      1. Also wenn ich auf Debuggen klicke, markiert der mir halt die komplette Zeile
                        ActiveSheet.Cells(2, 3).Value !

                        Ist ja auch kein Wunder - hast Du gesehen, was ich Dir oben geschrieben hatte?

                        1. Absolut geile Sache!
                          Habs über activesheet.range("C2").value = Traegername hinbekommen. Ohne Probleme beim ersten Mal.

                          "Eigentlich" bin ich jetzt fertig mit dem Script. Aber hab da im Prenzip noch eine Sache, die ich nach Ausführung des Scriptes immer noch mit der Hand machen muss. Vielleicht kann man das ja mit einbringen.

                          Es ist wie folgt:
                          Ich habe noch ein Blatt mit Namen "Auswertung". Dort habe ich eine Tabelle erstellt die mir meine ganzen Träger auswertet (die Tabellenblätter).
                          Dort habe ich diverse Funktionen eingebaut (ZÄHLENWENN, ANZAHL). Damit habe ich auch kein Problem. Funktioniert alles einwandfrei.

                          Ich muss nur jedesmal aufwendig erst vorne in die Tabelle (also die Auswertung) wieder den Namen eingeben (den von den Blättern -> sicher auch via activesheet.range("C2").value = Traegername realisierbar richtig?).
                          Das man das automatisch machen könnte, wäre sicherlich nicht so schwer mit der Funktion nehme ich an. Es muss halt nur erkannt werden das immer die folgende LEERE Zelle genutzt wird. Der Button mit dem alles ausgeführt wird, ist übrigens auf dem selben Blatt.

                          Ok, aber jetzt wirds echt kompliziert:
                          Diese ganzen ZÄHLENWENN Funktionen haben ja immer einen Bezug auf ein bestimmtes Tabellenblatt.

                          Bsp. Tabellenblatt mit Namen : TraegerXYZ
                          Auf dem Blatt "Auswertung" habe ich dort in einer Zelle die Funktion =ZÄHLENWENN(TraegerXYZ!H:H;Haupt!AQ9) ! Die Zelle AQ9 auf den Blatt Haupt gibt lediglich der Wert "Ja" wieder, sodass in der Auswertung immer nur dann gezählt wurde wenn bei Traeger XYZ in der Spalte H via DropDownFeld eben dieses JA ausgewählt wurde.
                          Aber das funktioniert ja wie gesagt.

                          Nur wäre es nun schön wenn in der Funktion von oben -> =ZÄHLENWENN(TraegerXYZ!H:H;Haupt!AQ9) der Name TraegerXYZ automatisch gesetzt werden würde (auf dem Auswertungsblatt). Dann würde das mühsame erstellen entfallen. Im gleichen Zuge sollte natürlich diese Zelle unter Auswertung erstellt werden. Sonst würde das ja auch kein Sinn machen.

                          Ich hoffe ihr habt das jetzt verstanden. Ist auch nicht leicht zu erklären.

                          Falls das nicht klappt, dank ich euch trotzdem für die Hilfe und fürs Durchlesen :)

                          MfG
                          Mathias

                        2. Absolut geile Sache!
                          Habs über activesheet.range("C2").value = Traegername hinbekommen. Ohne Probleme beim ersten Mal.

                          "Eigentlich" bin ich jetzt fertig mit dem Script. Aber hab da im Prenzip noch eine Sache, die ich nach Ausführung des Scriptes immer noch mit der Hand machen muss. Vielleicht kann man das ja mit einbringen.

                          Es ist wie folgt:
                          Ich habe noch ein Blatt mit Namen "Auswertung". Dort habe ich eine Tabelle erstellt die mir meine ganzen Träger auswertet (die Tabellenblätter).
                          Dort habe ich diverse Funktionen eingebaut (ZÄHLENWENN, ANZAHL). Damit habe ich auch kein Problem. Funktioniert alles einwandfrei.

                          Ich muss nur jedesmal aufwendig erst vorne in die Tabelle (also die Auswertung) wieder den Namen eingeben (den von den Blättern -> sicher auch via activesheet.range("C2").value = Traegername realisierbar richtig?).
                          Das man das automatisch machen könnte, wäre sicherlich nicht so schwer mit der Funktion nehme ich an. Es muss halt nur erkannt werden das immer die folgende LEERE Zelle genutzt wird. Der Button mit dem alles ausgeführt wird, ist übrigens auf dem selben Blatt.

                          Ok, aber jetzt wirds echt kompliziert:
                          Diese ganzen ZÄHLENWENN Funktionen haben ja immer einen Bezug auf ein bestimmtes Tabellenblatt.

                          Bsp. Tabellenblatt mit Namen : TraegerXYZ
                          Auf dem Blatt "Auswertung" habe ich dort in einer Zelle die Funktion =ZÄHLENWENN(TraegerXYZ!H:H;Haupt!AQ9) ! Die Zelle AQ9 auf den Blatt Haupt gibt lediglich der Wert "Ja" wieder, sodass in der Auswertung immer nur dann gezählt wurde wenn bei Traeger XYZ in der Spalte H via DropDownFeld eben dieses JA ausgewählt wurde.
                          Aber das funktioniert ja wie gesagt.

                          Nur wäre es nun schön wenn in der Funktion von oben -> =ZÄHLENWENN(TraegerXYZ!H:H;Haupt!AQ9) der Name TraegerXYZ automatisch gesetzt werden würde (auf dem Auswertungsblatt). Dann würde das mühsame erstellen entfallen. Im gleichen Zuge sollte natürlich diese Zelle unter Auswertung erstellt werden. Sonst würde das ja auch kein Sinn machen.

                          Ich hoffe ihr habt das jetzt verstanden. Ist auch nicht leicht zu erklären.

                          Falls das nicht klappt, dank ich euch trotzdem für die Hilfe und fürs Durchlesen :)

                          Gruß
                          Mathias

                    2. Hi,

                      im Zweifel musst du dazu kurzfristig das "On Error GoTo FEHLER" ausbauen.

                      was hat denn das damit zu tun? Wenn er das ausbaut, hat er keine Prüfung mehr, ob das Quellblatt exisitiert …

                      Viele Grüße

                      Jörg

                      1. Hello,

                        was hat denn das damit zu tun? Wenn er das ausbaut, hat er keine Prüfung mehr, ob das Quellblatt exisitiert …

                        ach, hab mich verguckt, ich dachte die Error-Behandlung bleibt an, hab die übernächste Zeile übersehen.

                        MfG
                        Rouven

                        --
                        -------------------
                        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                        "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
          2. Hi,

            ActiveSheet.Cells("C", 2).Value

            hier versuchst Du zwar, ihm beizubringen, wo er was machen soll, aber nicht,was er machen soll. ;-)

            Versuch's mal so:

            ActiveSheet.Cells(2, 3).Value = Traegername

            Bei den Zellen hast Du zwei Möglichkeiten. Entweder Du gehst über das Range-Objekt, dann erfolgt die Zuweisung mit der Zelladresse:

            activesheet.range("C2").value = Traegername

            In dem Fall wird die Adresse in Gänsefüße geschrieben, weil es sich um einen String handelt. Die andere Möglichkeit ist die, die Du verwendest. Dann muss die Zelle mit der Zeile und der Spalte angesprochen werden, also

            activesheet.cells(Zeile, Spalte)

            Dabei handelt es sich aber um Zahlen - diese dürfen dann nicht in Gänsefüße, also:

            ActiveSheet.Cells(2, 3).Value = Traegername

            Das .Value kannst Du übrigens auch weglassen, das ist die Standardeigenschaft.

            Viele Grüße

            Jörg

  2. Absolut geile Sache!
    Habs über activesheet.range("C2").value = Traegername hinbekommen. Ohne Probleme beim ersten Mal.

    "Eigentlich" bin ich jetzt fertig mit dem Script. Aber hab da im Prenzip noch eine Sache, die ich nach Ausführung des Scriptes immer noch mit der Hand machen muss. Vielleicht kann man das ja mit einbringen.

    Es ist wie folgt:
    Ich habe noch ein Blatt mit Namen "Auswertung". Dort habe ich eine Tabelle erstellt die mir meine ganzen Träger auswertet (die Tabellenblätter).
    Dort habe ich diverse Funktionen eingebaut (ZÄHLENWENN, ANZAHL). Damit habe ich auch kein Problem. Funktioniert alles einwandfrei.

    Ich muss nur jedesmal aufwendig erst vorne in die Tabelle (also die Auswertung) wieder den Namen eingeben (den von den Blättern -> sicher auch via activesheet.range("C2").value = Traegername realisierbar richtig?).
    Das man das automatisch machen könnte, wäre sicherlich nicht so schwer mit der Funktion nehme ich an. Es muss halt nur erkannt werden das immer die folgende LEERE Zelle genutzt wird. Der Button mit dem alles ausgeführt wird, ist übrigens auf dem selben Blatt.

    Ok, aber jetzt wirds echt kompliziert:
    Diese ganzen ZÄHLENWENN Funktionen haben ja immer einen Bezug auf ein bestimmtes Tabellenblatt.

    Bsp. Tabellenblatt mit Namen : TraegerXYZ
    Auf dem Blatt "Auswertung" habe ich dort in einer Zelle die Funktion =ZÄHLENWENN(TraegerXYZ!H:H;Haupt!AQ9) ! Die Zelle AQ9 auf den Blatt Haupt gibt lediglich der Wert "Ja" wieder, sodass in der Auswertung immer nur dann gezählt wurde wenn bei Traeger XYZ in der Spalte H via DropDownFeld eben dieses JA ausgewählt wurde.
    Aber das funktioniert ja wie gesagt.

    Nur wäre es nun schön wenn in der Funktion von oben -> =ZÄHLENWENN(TraegerXYZ!H:H;Haupt!AQ9) der Name TraegerXYZ automatisch gesetzt werden würde (auf dem Auswertungsblatt). Dann würde das mühsame erstellen entfallen. Im gleichen Zuge sollte natürlich diese Zelle unter Auswertung erstellt werden. Sonst würde das ja auch kein Sinn machen.

    Ich hoffe ihr habt das jetzt verstanden. Ist auch nicht leicht zu erklären.

    Falls das nicht klappt, dank ich euch trotzdem für die Hilfe und fürs Durchlesen :)

    MfG
    Mathias

    1. Hi,

      Ich muss nur jedesmal aufwendig erst vorne in die Tabelle (also die Auswertung) wieder den Namen eingeben (den von den Blättern -> sicher auch via activesheet.range("C2").value = Traegername realisierbar richtig?).

      Jaein. Die Auswertung ist ja in dem Moment nicht das aktive Blatt, also nicht das ActiveSheet. Du hast nun zwei Möglichkeiten. Entweder Du aktivierst das Blatt mit

      Sheets("Auswertung").Select

      , allerdings sollte man "Select" und "Activate" weitestgehend vermeiden. Jedoch könntest Du dann Deine Zeile verwenden. Oder Du sprichst das Blatt direkt an:

      Sheets("Auswertung").Range("C2").Value = …

      Das ist die elegantere Methode.

      Das man das automatisch machen könnte, wäre sicherlich nicht so schwer mit der Funktion nehme ich an. Es muss halt nur erkannt werden das immer die folgende LEERE Zelle genutzt wird. Der Button mit dem alles ausgeführt wird, ist übrigens auf dem selben Blatt.

      Die erste leere Zelle in Spalte C kannst Du so abfragen:

      lngZ = Cells(rows.count, 3).End(XlUp).row + 1

      Die 3 steht für Spalte C.
      Falls das auf dem Blatt Auswertung geschehen soll, müsste es so sein:

      lngZ = Sheets("Auswertung").Cells(rows.count, 3).End(XlUp).row + 1

      Nur wäre es nun schön wenn in der Funktion von oben -> =ZÄHLENWENN(TraegerXYZ!H:H;Haupt!AQ9) der Name TraegerXYZ automatisch gesetzt werden würde (auf dem Auswertungsblatt). Dann würde das mühsame erstellen entfallen. Im gleichen Zuge sollte natürlich diese Zelle unter Auswertung erstellt werden. Sonst würde das ja auch kein Sinn machen.

      Einfach mal als Ansatz (ungetestet):

      Sheets("Auswertung").cells(lngz, 3).FormulaLocal = "=ZÄHLENWENN(" & Traegername & "!H:H;Haupt!AQ9)"

      Klappt's?

      Viele Grüße

      Jörg

      1. hi!
        Also sieht ja schon ganz gut aus.

        Erstmal zu ersten:

        Hab mal etwas rumprobiert

        Sheets("Auswertungen").Select
        lngZ = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
        ActiveSheet.Range("C2").Value = Traegername

        Das mit dem "C2" ist natürlich Quatsch. Nur wie bekomm ich jetzt die Verknüpfung  zur zweiten Zeile? Weil irgendwie muss ich ja mitteilen das der diesen Traegernamen auch in die markierte freie Spalte setzten soll.

        mfg

        1. Hi,

          Sheets("Auswertungen").Select
          lngZ = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
          ActiveSheet.Range("C2").Value = Traegername

          Das mit dem "C2" ist natürlich Quatsch. Nur wie bekomm ich jetzt die Verknüpfung  zur zweiten Zeile? Weil irgendwie muss ich ja mitteilen das der diesen Traegernamen auch in die markierte freie Spalte setzten soll.

          activesheet.cells(lngz, 3).value = traegername

          schreibt es in die dritte Spalte (also C) der Zeile lngZ.

          Viele Grüße

          Jörg

          1. Woha, einfach der Hammer!

            Hat natürlich jetzt geklappt. Auch die Sache mit der ZÄHLENWENN Funktion scheint zu funktioneren. Vielen vielen DanK!
            Werde noch ein bissel rumprobieren. Wenn noch was sein sollte,
            melde ich mich wieder :)

            1. Ok, vergiss das was ich geschrieben habe. Löschen brauch ich eigentlich nicht. Aber ne umbennen funktionen wär gut.

              mfg

              1. Hi,

                Ok, vergiss das was ich geschrieben habe. Löschen brauch ich eigentlich nicht. Aber ne umbennen funktionen wär gut.

                das sollte kein Problem sein.

                Erstmal wirst Du eine Inputbox brauchen, in die dann eingetragen wird, welcher Träger umbenannt werden soll. Dann prüfst Du, ob die Eingabe valide ist, also 1., ob überhaupt etwas eingegeben wurde und 2., ob der eingegebene Trägername existiert. Das kannst Du mit der Find-Methode auf dem Auswertungsblatt machen (zur Not auch mit einer Schleife über die Tabellenblätter, was aber langsamer sein dürfte). Find gibt beim Erfolg ein Objekt zurück, das auch die Zeile enthält, wo der Name gefunden wurde. Die Zeile speicherst Du in einer Variablen.

                Dann brauchst Du noch eine Inputbox, in die der neue Name eingegeben werden muss. Nach den Prüfungen auf Gültigkeit (Vorsicht: nicht vergessen, dass auch auf Gültigkeit eines Blattnamens geprüft werden muss) änderst Du dann auf dem Auswertungsblatt in der gefundenen Zeile (die steckt ja in der Variablen) in der entsprechenden Spalte den Namen.

                Zum Schluss änderst Du noch die Name-Eigenschaft des Einzelblattes.

                Das ist die einfachere Variante, die komfortablere wäre eine, bei der in eine Userform gleich beide Namen eingetragen werden. Da könntest Du auch gleich alle Trägernamen, die geändert werden können, in eine Liste zur Auswahl eintragen - so würde man da schon mal Tippfehler umgehen.

                Viele Grüße

                Jörg

                1. Ok, ich komm schon wieder nicht weiter:

                  Private Sub CommandButton2_Click()
                  Dim XYZ As String
                  Dim objBlatt As Object
                  Dim strQuellBlatt As String

                  XYZ = Application.InputBox("Welcher Träger soll umbenannt werden?", "Schreibfehler gemacht?", XYZ)
                     If XYZ = "" Then Exit Sub

                  With Worksheets("Auswertungen").Range("a1:a500")
                      Set c = .Find("XYZ", LookIn:=xlValues)
                      If Not c Is Nothing Then
                          firstAddress = c.Address
                          Do
                              c.Value = "XYZ"
                              Set c = .FindNext(c)
                          Loop While Not c Is Nothing And c.Address <> firstAddress
                      End If
                  End With

                  1. Ok, ich komm schon wieder nicht weiter:

                    Woran hapert es denn?

                    Dim XYZ As String
                    Dim objBlatt As Object
                    Dim strQuellBlatt As String

                    […]

                    firstAddress = c.Address

                    Ich empfehle Dir, mal ganz oben in das Modul

                    Option Explicit

                    zu schreiben. Damit kannst Du nicht vergessen, Variablen zu deklarieren und umgehst damit schon mal Tippfehler.

                    Also - woran hapert es, welchen Schritt möchtest Du als nächsten einbauen?

                    Viele Grüße

                    Jörg

          2. Ok, ich glaub ich hab doch noch eine Sache gefunden die ich gerne integieren würde.

            Neuer Button: Träger löschen

            Funktion: Es kann ja auch mal vorkommen das ein Träger gelöscht werden muss. Wenn das passiert müsste via Button erstmal das Blatt gelöscht werden (vorher müsste der Name des Trägers eingegeben werden) und gleichzeit auch die entsprechende Spalte in der Tabelle auf dem Blatt "Auswertungen". Damit dort keine hässlichen Leerzeilen entstehen sollte diese am besten "richtig" gelöscht werden also die anderen Zeilen quasi nachrücken.

            Kannst mir da nochmal helfen?

            MfG