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

860to864: Code anpassen

Code anpassen
06.04.2007 08:53:42
Fritz_W
Hallo Forumsbesucher,
mit dem nachfolgenden Makro werden - in Abhängigkeit von Zelleinträgen in der Tabelle "Daten" eine "Vorlage" kopiert und als neue Tabellen in die Arbeitsmappe eingefügt. Die neu eingefügten Tabellen erhalten als "Namenszusatz" alle ein "A" angefügt.
Ich würde nun gerne das Makro dahingehend geändert haben, dass die Namen der neu eingefügten Tabellen lediglich aus den "Zahlen" besteht, der jeweilige Zusatz "A" also entfällt. Ansonsten soll der Code nicht geändert werden.
Krieg das leider nicht hin, obwohl ich es mit mehreren Änderungen im Code versucht habe.
Deshalb brauche ich eure Hilfe. Dank im Voraus.
mfg
Fritz

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code anpassen
06.04.2007 08:57:50
Fritz_W
Hallo,
bitte um Entschuldigung, habe vergessen den ursprünglichen Code beizufügen, was ich hiermit nachhole:

Sub NeueTabellen()
Dim lngL As Long
For lngL = Worksheets("Daten").[c2] To Worksheets("Daten").[c3]
If Not (SheetExists(lngL & "A")) Then
Worksheets("Vorlage").Copy After:=Worksheets("Daten")
ActiveSheet.Name = lngL & "A"
ActiveSheet.[c2] = lngL
End If
Next lngL
End Sub
Gruß
Fritz
AW: Code anpassen
06.04.2007 09:11:00
Ramses
Hallo
Vielleicht verstehe ich die Frage falsch, aber mit ein wenig Lesen, Nachdenken und ausprobieren solltest du auf diese Lösung kommen
ActiveSheet.Name = lngL
Gruss Rainer
Anzeige
AW: Code anpassen
06.04.2007 09:14:00
KViertel
Hallo,
so wie ich es verstehe, gehören " & "A" " entfernt.
MfG. Klaus
@ Klaus
06.04.2007 09:23:00
Fritz_W
Hallo Klaus,
danke für den Hinweis, siehe mein Posting an "Rainer".
Steh ich auf der Leitung?
Gruß
Fritz
AW: Code anpassen
06.04.2007 09:21:40
Fritz_W
Hallo Rainer,
mit diesem nachstehenden Code hatte ich das bereits versucht, es tut sich - für mich eben auch überraschend - nichts. Weiß nicht, woran das liegen kann?
Gruß
Fritz

Sub TabellenAw_anlegen()
'Fügt entsprechend der Angaben in den Zellen C2 und C3 der Tabelle "Daten" Kopien der Tabelle
'"VorlagenAW" in die Arbeitsmappe ein und fügt die jeweilige Spieltagsnummer in die Zelle C2  _
der
' Kopie ein
Dim lngL As Long
For lngL = Worksheets("Daten").[c2] To Worksheets("Daten").[c3]
If Not (SheetExists(lngL)) Then
Worksheets("Vorlage").Copy After:=Worksheets("Daten")
ActiveSheet.Name = lngL
ActiveSheet.[c2] = lngL
End If
Next lngL
End Sub

Anzeige
Sorry, nicht nachvollziehbar
06.04.2007 10:33:00
Matthias
Hi,
keine Ahnung, warum es nicht geht. Bei mir geht es.
Habe nur If Not (SheetExists(lngL)) Then rausgenommen-da kommt bei mir ein Fehler.
Das hat aber damit nichts zu tun. Ich habe xl2000, da gibts SheetExists evtl. noch nicht
Userbild
Gruß Matthias
AW: Sorry, nicht nachvollziehbar
06.04.2007 11:19:56
Fritz_W
Hallo Matthias,
mir geht´s natürlich ebenso. Steh vor einem Rätsel.
Bei mir fügt er die Tabelle mit der höchsten Zahl (Wert in der Tabelle "Daten" Zelle C3) korrekt ein, sonst nichts. Der bisherige Code fügt alle(!) Tabellen mit dem Zusatz "A" ein.
Vielleicht weiß jemand anders, woran das liegen kann. Stelle die Frage deshalb auf "noch offen".
Gruß
Fritz
Anzeige
VBA-Kenner: Neue Erkenntnisse
06.04.2007 17:20:00
Fritz_W
Hallo VBA-Experten,
die Umgereimtheiten im Umgang mit dem nachstehenden (abgeänderten!!) Code haben mich veranlasst, die Tests auszuweiten. Schließlich habe ich festgestellt, dass solange der abgeänderte Code verwendet wird, auftretende Probleme wohl darauf zurückzuführen sind, dass der Code bei der der Anweisung: "If Not (SheetExists(lngL)) Then" evtl. auch Tabellen "berücksichtigt" deren Dateinamen nicht aus einer Zahl besteht, die zwischen dem Eintrag in "Daten!C2" und "Daten!C3" liegt,
während bei dem ursprünglichen Code nur die Tabellen mit dem "Zusatz" "A" berücksichtigt werden. Zumindest lassen meine Tests eine derartige Vermutung zu. Aber die Experten in diesem Forum können sicher besser beurteilen, ob das die Ursache für die Ungereimtheiten sein kann.
Vielleicht kann einer von euch auch den Code entsprechend meinen Vorstellungen anpassen!
Vielen Dank im Voraus.
Mfg
Fritz
ursprünglicher Code:

Sub NeueTabellen()
Dim lngL As Long
For lngL = Worksheets("Daten").[c2] To Worksheets("Daten").[c3]
If Not (SheetExists(lngL & "A")) Then
Worksheets("Vorlage").Copy After:=Worksheets("Daten")
ActiveSheet.Name = lngL & "A"
ActiveSheet.[c2] = lngL
End If
Next lngL
End Sub
Funktionscode:
'Prüfen, ob ein Blatt in einer Arbeitsmappe existiert - von NoNet

Function SheetExists(blattname) As Boolean
Dim dummy
On Error Resume Next
dummy = Sheets(blattname).Type
SheetExists = (Err = 0)
End Function
abgeänderter Code:

Sub Tabellen_anlegen()
'Fügt entsprechend der Angaben in den Zellen C2 und C3 der Tabelle "Daten" Kopien der Tabelle
'"Vorlage" in die Arbeitsmappe ein und fügt die jeweilige Zahl in die Zelle C2 der
' Kopie ein
Dim lngL As Long
For lngL = Worksheets("Daten").[c2] To Worksheets("Daten").[c3]
If Not (SheetExists(lngL)) Then
Worksheets("Vorlage").Copy After:=Worksheets("Daten")
ActiveSheet.Name = lngL
ActiveSheet.[c2] = lngL
End If
Next lngL
End Sub

'Prüfen, ob ein Blatt in einer Arbeitsmappe existiert - von NoNet

Function SheetExists(blattname) As Boolean
Dim dummy
On Error Resume Next
dummy = Sheets(blattname).Type
SheetExists = (Err = 0)
End Function

Anzeige
AW: VBA-Kenner: Neue Erkenntnisse
07.04.2007 22:36:47
KViertel
Hallo Fritz,
So klappt es. Es werden alle Tabellennamen immer wieder mit dem übergebenen Namen verglichen und dann entweder angelegt oder nicht.

Sub Tabellen_anlegen()
'Fügt entsprechend der Angaben in den Zellen C2 und C3 der Tabelle "Daten" Kopien der Tabelle
'"Vorlage" in die Arbeitsmappe ein und fügt die jeweilige Zahl in die Zelle C2 der
' Kopie ein
Dim lngL As Long
For lngL = Worksheets("Daten").[c2] To Worksheets("Daten").[c3]
If Not (SheetExists(lngL)) Then
Worksheets("Vorlage").Copy After:=Worksheets("Daten")
ActiveSheet.Name = lngL
ActiveSheet.[c2] = lngL
End If
Next lngL
End Sub


Function SheetExists(blattname) As Boolean
On Error Resume Next
If IsNumeric(blattname) Then
blattname = Str(blattname)
End If
SheetExists = False
For Each blatt In ActiveWorkbook.Sheets
If blatt.Name = blattname Then
SheetExists = True
End If
Next
End Function
MfG. Klaus
Anzeige
AW: VBA-Kenner: Neue Erkenntnisse
08.04.2007 09:53:26
Fritz_W
Hallo Klaus,
zunächst vielen Dank für die Unterstützung und die Mühe, die du dir erneut für mich gemacht hast.
ich habe den Code getestet und das funktioniert auch ganz prima. Kann mit dieser Lösung sehr gut leben. Man muss allerdings beachten, dass, falls bereits (einige, nicht alle) angelegte Tabellen gelöscht werden und man das Makro erneut laufen lässt, eine Fehlermeldung kommt. Es wäre natürlich optimal, wenn in einem solchen Fall, (nur) noch die "fehlenden" Tabellen eingefügt werden. Aber auf diese Möglichkeit hatte ich auch nicht hingewiesen.
Nochmals meinen Dank und schöne Ostertage
Gruß
Fritz
Anzeige
AW: VBA-Kenner: Neue Erkenntnisse
08.04.2007 11:28:41
KViertel
Hallo Fritz,
das Problem liegt in der Umwandlung der übergebenen Zahl in einen String. Weder STR() noch FORMAT() führen zu einer Änderung der Zahl in einen String, denn der Namen des Blattes ist ein String.
Ursache ist mir unbekannt. Ich suche nach einer Lösung.
MfG. Klaus
AW: VBA-Kenner: Neue Erkenntnisse
08.04.2007 12:03:31
Fritz_W
Hallo Klaus,
danke für deine Nachricht.
Freue mich natürlich, dass du dich weiterhin bemühst, auch noch diese "Lücke" zu beheben.
Ansonsten bitte keinen zusätzlichen Osterstress, sondern schöne Ostertage
wünscht Dir und allen netten Helfern in diesem Forum
Fritz
AW: VBA-Kenner: Neue Erkenntnisse
08.04.2007 13:23:22
KViertel
Hallo Fritz,
jetzt scheint das Problem beseitigt zu sein. Ich habe den Funktionsaufruf ein bischen auseinander genommen, denn die "Function" gab immer nur "wahr" zurück. Warum, weis ich nicht. Dann war die Tabellenreihenfolge total durcheinander, insbesondere wenn gelöschte Tabellen wieder neu angelegt wurden. Deshalb die Sortierung. Als die ersten beiden Blätter werden "Daten" und "Vorlage" angezeigt.
MfG. Klaus

Sub Tabellen_anlegen()
'Fügt entsprechend der Angaben in den Zellen C2 und C3 der Tabelle "Daten" Kopien der Tabelle
'"Vorlage" in die Arbeitsmappe ein und fügt die jeweilige Zahl in die Zelle C2 der
' Kopie ein
Dim lngL As Long
For lngL = Worksheets("Daten").[c2] To Worksheets("Daten").[c3]
t_lngL = Format(lngL)
tmp = SheetExists(t_lngL)
If Not tmp Then
Worksheets("Vorlage").Copy After:=Worksheets("Daten")
ActiveSheet.Name = lngL
ActiveSheet.[c2] = lngL
End If
Next lngL
TabellenSortieren
End Sub

Function SheetExists(blattname) As Boolean
On Error Resume Next
SheetExists = False
For Each blatt In ActiveWorkbook.Sheets
If blatt.Name = blattname Then
SheetExists = True
End If
Next
End Function


Sub TabellenSortieren()
Dim iMax As Integer
Dim ibl1 As Integer
Dim ibl2 As Integer
iMax = ActiveWorkbook.Worksheets.Count
For ibl1 = 1 To iMax
For ibl2 = ibl1 To iMax
If UCase(Worksheets(ibl2).Name)  "DATEN" Or UCase(Worksheets(ibl2).Name)  "VORLAGE"  _
Then
If UCase(Worksheets(ibl2).Name) _

Anzeige
Funktionert bestens!
08.04.2007 15:59:00
Fritz_W
Hallo Klaus,
meinen bisherigen Tests zufolge funktioniert die Sache jetzt wie gewünscht.
Nochmals Dank und auch meine aufrichtige Anerkennung für diese Leistung.
Gruß
Fritz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige