Wo ist der Fehler???

Bild

Betrifft: Wo ist der Fehler???
von: andi
Geschrieben am: 04.12.2003 14:43:02

Hallöchen,

habe ein kleines Problem. Mein Programm will nicht so wie ich das will.

Habe in einer Arbeitsmappe unter andrem das Tabellenblatt "leer". Dies ist die leere Vorlage.

Und das Tabellenblatt "Hilfstabelle". Hier stehen die Namen aller Klienten. Hinter den aktuellen Klienten steht in Spalte 6 (Das ist F) ein ja. (Hinter den verstorbenen ein "nein")

Jetzt möchte ich ein Makro schreiben, dass für jeden Klienten ein Tabellenblatt erstellt. Der Name des Tabellenblattes soll der Name des Klienten sein. Dazu müßte die Vorlage "leer" immer wieder kopiert werden und dann umbenannt in den Namen des Klienten. Aber nur wenn in Spalte F ein "ja" steht. Das neue Tabellenblatt soll dann ans Ende gestellt werden, weil vorne ne ganze Menge Tabellenblätter sind die für Auswertungen und ähnliches gebraucht werden.

So sieht das bei mir aus:


Sub TabellenblätterErstellen()
Dim x As Integer
Dim Name As String
Dim bytZeile As Byte
For bytZeile = 2 To 100
    Worksheets("Hilfstabelle").Select
        Cells(bytZeile, 6).Select
        If ActiveCell.Value = "ja" Then
            x = Worksheets.Count
            Sheets("leer").Select
            Sheets("leer").Copy After:=Sheets(x)
            Sheets("leer (2)").Select
            Sheets("leer (2)").Name = Sheets("Hilfstabelle").Cells(bytZeile, 3).Value
        End If
Next bytZeile
End Sub


In meinem Programm erstellt er immer nur eine Kopie von "leer", benennt aber nicht um.

Habe ich irgendwo einen Denkfehler?
Bild


Betrifft: AW: Wo ist der Fehler???
von: WernerB.
Geschrieben am: 04.12.2003 14:59:04

Hallo Andi,

versuche es mal so (ungetestet):

Sub TabellenblätterErstellen()
Dim Name As String
Dim laR As Long
Dim bytZeile As Byte
    laR = Cells(Rows.Count, 6).End(xlUp).Row
    For bytZeile = 2 To laR
      If Worksheets("Hilfstabelle").Cells(bytZeile, 6).Value = "ja" Then
        Sheets("leer").Copy After:=Sheets(Worksheets.Count)
        Sheets(Worksheets.Count).Name = Sheets("Hilfstabelle").Cells(bytZeile, 3).Value
      End If
    Next bytZeile
End Sub

Viel Erfolg wünscht
WernerB.

P.S.: Das Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter (siehe Forums-FAQ).


Bild


Betrifft: Passiert dasselbe....
von: andi
Geschrieben am: 04.12.2003 15:04:41

...."leer" wird einmal kopiert zu "leer(2)" und nicht umbenannt und das Programm ist damit zu ende.

Trotzdem Danke.

andi


Bild


Betrifft: AW: Passiert dasselbe....
von: WernerB.
Geschrieben am: 04.12.2003 15:11:17

Hallo Andi,

Excel kann einen Blattnamen innerhalb einer Mappe nur einmal vergeben.
Kann es sein, dass die Namen in Spalte "C" mehrfach vorkommen bzw. schon ein Blatt mit diesem Namen existiert?


Gruß WernerB.


Bild


Betrifft: Leider nein....
von: andi
Geschrieben am: 04.12.2003 15:16:54

..... bis zum Buchstaben P in der achtundzwanzigsten Reihe gibt es alle Namen nur einmal.

Normalerweise macht das aber nichts. Dann würde das Blatt zu Name(2).

Vielleicht hilft das weiter:
Die Schleife wird erst gar nicht durchlaufen. Bei Einzelschrittmodus läuft er einmal duch die Schleife und nichts passiert da in Spalte F ein "nein" steht. Beim zweiten Durchlauf geht er bis zum Umbenennen und dann hört das Programm auf.

andi


Bild


Betrifft: AW: Leider nein....
von: WernerB.
Geschrieben am: 04.12.2003 15:28:46

Hallo Andi,

Deiner Behauptung "Normalerweise macht das aber nichts. Dann würde das Blatt zu Name(2)." möchte ich widersprechen.
Mit dieser Codezeile wird das letzte Tabellenblatt umbenannt:

Sheets(Worksheets.Count).Name = Sheets("Hilfstabelle").Cells(bytZeile, 3).Value

Der neue Name wird aus der der Zelle 'Cells(bytZeile, 3' generiert.
Das kann u.a. dann nicht funktionieren, wenn es bereits ein Blatt mit dieser Bezeichnung gibt, die Zelle leer ist oder Zeichen enthält, die bei der Blattbezeichnung nicht verwendet werden dürfen.

Mehr fällt mir dazu leider nicht ein.


Gruß WernerB.


Bild


Betrifft: aha...
von: andi
Geschrieben am: 04.12.2003 15:32:45

.....die Zelle in Zeile zwei war leer. Habe die ganze Zeile entfernt. Hat auch nichts gebracht.

andi


Bild


Betrifft: AW: aha...
von: WernerB.
Geschrieben am: 04.12.2003 15:36:24

Hallo Andi,

es geht um die erste Zeile, wo in Spalte "F" ein "ja" steht. Was steht in dieser Zeile in der Spalte "C"?


Gruß WernerB.


Bild


Betrifft: da steht ein name...
von: andi
Geschrieben am: 04.12.2003 15:43:39

Hallo Werner,

da steht ein Name.......bzw. da steht eine Verknüpfung zu einer anderen Tabelle mit Wenn und Sverweis.

andi


Bild


Betrifft: AW: da steht ein name...
von: WernerB.
Geschrieben am: 04.12.2003 15:56:45

Hallo Andi,

dieser Name scheint sich nicht mit den Regeln für Blattbezeichnungen zu vertragen (s.o.), möglicherweise ist er auch zu lang.


Gruß WeernerB.


Bild


Betrifft: AW: da steht ein name...
von: FCH
Geschrieben am: 04.12.2003 16:01:03

Hi Werner,

also wenn Andi nicht noch irgendwo eine Fehlerbehandlung eingearbeitet hat, müsste er doch in diesen Fällen auf einen Laufzeitfehler laufen.

Gruß
FCH


Bild


Betrifft: AW: Wo ist der Fehler???
von: Nayus
Geschrieben am: 04.12.2003 15:00:07

Hi,
neue neuen Blätter heißen wahrscheinlich nicht "leer (2)".
Einfach anstatt des Namens, den Index angeben. So sollte es gehen.


Sub TabellenblätterErstellen()
Dim x As Integer
Dim Name As String
Dim bytZeile As Byte
For bytZeile = 2 To 100
    Worksheets("Hilfstabelle").Select
        Cells(bytZeile, 6).Select
        If ActiveCell.Value = "ja" Then
            x = Worksheets.Count
            Sheets("leer").Select
            Sheets("leer").Copy After:=Sheets(x)
            Sheets(Worksheets.Count).Select
            Sheets(Worksheets.Count).Name = Sheets("Hilfstabelle").Cells(bytZeile, 3).Value
        End If
Next bytZeile
End Sub


Gruß,
Nayus


Bild


Betrifft: geht auch nicht, s.o.
von: andi
Geschrieben am: 04.12.2003 15:08:20

...wie bei Werner

Trotzdem Danke

andi


Bild


Betrifft: AW: Da ;-)
von: Nike
Geschrieben am: 04.12.2003 15:04:44

Hi,
einfach ein bischen straffen ohne select usw...


Sub TabellenblätterErstellen()
Dim x As Integer
Dim Name As String
Dim bytZeile As Byte
For bytZeile = 2 To 100
        If Worksheets("Hilfstabelle").Cells(bytZeile, 6).Value = "ja" Then
            Sheets("leer").Copy After:=Sheets(Worksheets.Count)
            Sheets(Worksheets.Count).Name = Sheets("Hilfstabelle").Cells(bytZeile, 3).Value
        End If
Next
End Sub


Bye

Nike


Bild


Betrifft: Auch nicht.....
von: andi
Geschrieben am: 04.12.2003 15:12:02

....wie bei den beiden oberen Hilfen. Es erscheint nur "leer(2)". Das Programm endet dann.

Trotzdem Danke!

andi


Bild


Betrifft: AW: dann.....
von: Nike
Geschrieben am: 04.12.2003 15:16:00

Hi,
dann sag mal was hier drinnen steht:
Sheets("Hilfstabelle").Cells(bytZeile, 3).Value
also, in deiner Hilfstabelle in Spalte 3 auf Höhe der Zeile...

Bye

Nike


Bild


Betrifft: folgendes...
von: andi
Geschrieben am: 04.12.2003 15:22:19

...steht da in Spalte 3:

Zeile 1 ist irrelevant da Überschriften. For..Next beginnt bei 2
Zeile 2 ist leer. Macht aber nichts. Im Einzelschrittmodus läuft er einmal durch.
Zeile 3 steht ein Name mit B.... Im Einzelschrittmodus hört das Programm beim Umbenennen auf.

Irgendwelche Ideen?

Danke
andi


Bild


Betrifft: AW: hmm...
von: Nike
Geschrieben am: 04.12.2003 15:27:45

Hi,

poste mal die Datei, dann sag ich was dazu ;-)

Bye

Nike


Bild


Betrifft: Datenschutz
von: andi
Geschrieben am: 04.12.2003 15:46:55

Hi Nike,

darf leider nicht, von wegen Datenschutz und so. Das sind Bürodaten und die beim Amtsgericht verstehen da keinen Spaß.

Gruß
andi


Bild


Betrifft: AW: Datenschutz - schon klar - Anonymisierung...
von: Nike
Geschrieben am: 05.12.2003 08:31:12

Hi,
ich wollte ja auch nicht die "Originaldaten"
es geht ja nur um die Logik.
Also einfach Werte verändern und Namen verfälschen
und unnötiges Löschen, aber es funkt ja inzwischen...

Bye

Nike


Bild


Betrifft: Ergänzung zu: Wo ist der Fehler???
von: andi
Geschrieben am: 04.12.2003 15:28:44

Hallo Leute,

danke für eure Hilfe. Da es nicht klappt, kann es daran liegen, dass das "ja" nicht direkt in dieser Zelle steht?
Es ist eine Verknüpfung aus einer anderen Tabelle: Wenn dieunddie Zelle leer ist, dann Sverweis in demunddem Blatt, sonst garnischt.

???
andi


Bild


Betrifft: AW: Ergänzung zu: Wo ist der Fehler???
von: WernerB.
Geschrieben am: 04.12.2003 15:31:30

Hallo Andi,

das "ja" wird doch erkannt, sonst würde das Makro kein Blatt kopieren ...


Gruß WernerB.


Bild


Betrifft: AW: Ergänzung zu: Wo ist der Fehler???
von: FCH
Geschrieben am: 04.12.2003 15:44:42

Hallö,

wenn sich der SVWERWEIS Das "ja" aus anderen Zellen holt, schau doch da mal noxh, ob wirklci "ja" drinsteht und nicht eventl. ein Leerzeichen da rein geraten ist.

Gruß
FCH


Bild


Betrifft: gute Idee...leider
von: andi
Geschrieben am: 04.12.2003 15:50:16

Hallo FCH,

die Idee war gut. Habe nachgesehen. Kein Leerzeichen.

Danke
andi


Bild


Betrifft: AW: gute Idee...leider
von: FCH
Geschrieben am: 04.12.2003 15:56:43

Hi Andi,

nimm mal den Code von Nike und schreib die "jas" in Spalte F mal händisch rein. Es kann eigentlich nur das dieser Spalte liegen.

Gruß
FCH


Bild


Betrifft: es läuft!!!
von: andi
Geschrieben am: 04.12.2003 16:23:10

Hallo,

danke an alle, das Programm in der zweiten Version von läuft jetzt. Fragt micht bitte nicht warum.

Habe folgendes gemacht:
1.Überall den Blattschutz entfernt. Kann mir aber nicht vorstellen, das es daran lag.
2.Die Datei geschlossen und nochmal geöffnet.
3.Wie vorgeschlagen per Hand ein ja eingegeben. - Nur in den ersten drei Zeilen.

Und plötzlich lief es. Sogar meine Version.

Habe die drei ja wieder entfernt-es läuft immer noch.

Bezüglich der Frage nach dem Laufzeitfehler:
Nein, wie beschrieben hat das Programm einfach aufgehört als wär es fertig.

Dank an alle
andi


Bild

Beiträge aus den Excel-Beispielen zum Thema " Wo ist der Fehler???"