Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
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
Inhaltsverzeichnis

tabellenblatt kopieren

tabellenblatt kopieren
Rudolf
Hallo an das Forum!
Ich benötige mal wieder Eure Hilfe.
Ein aktives Tabllenblatt möchte ich mit Inhalt, durch einen in einer MsgBox eingegebenen Namen als ein neues Tabellenblatt kopieren/erstellen.
Gefunden habe ich dieses.
Sub BlattKopieren()
Dim NeuerName As String
Dim i As Integer
NeuerName = InputBox("Bitte gebe den neuen Namen des Blattes ein!")
i = Sheets.Count
ActiveWorkbook.ActiveSheet.Copy after:=Sheets(i)
'Sheets ("Eingabe") .Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End Sub
Ist es möglich das Makro so zu ändern das:
- abgefragt wird ob der eingegebene Name schon vorhanden ist.
- wenn ja = Abbruch, oder besser die Meldung "Schon vorhanden"
- wenn nein = erstellen
- bei Abbruch nicht doch eine Kopie erstellt wird, wie in diesem Fall
kurz, einfach das es klappt.
Vielen Dank im voraus
Rudolf

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: tabellenblatt kopieren
26.10.2009 08:20:53
Oberschlumpf
Hi Rudolf
Versuch mal diesen Code:
Sub BlattKopieren()
Dim NeuerName As String, liSuche As Integer, lboShName As Boolean
Do Until lboShName = True
NeuerName = InputBox("Bitte gebe den neuen Namen des Blattes ein!")
If NeuerName = "" Then Exit Sub
lboShName = True
For liSuche = 1 To Sheets.Count
If NeuerName = Sheets(liSuche).Name Then
MsgBox "Blattname schon vorhanden"
lboShName = False
Exit For
End If
Next
Loop
ActiveWorkbook.ActiveSheet.Copy after:=Sheets(Sheets.Count)
'Sheets ("Eingabe") .Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End Sub

Die Inputbox (NICHT MsgBox, wie du schreibst) wird so lange angezeigt, bis entweder ein Name eingegeben wird, der als Blattname noch nicht vorhanden ist, oder bis auf Abbruch geklickt wird.
Hilfts?
Ciao
Thorsten
Anzeige
auch n Err gefunden - danke Matthias ;-)
26.10.2009 08:39:14
Oberschlumpf
Hi Rudolf
Verwende diesen Code:
Sub BlattKopieren()
Dim NeuerName As String, liSuche As Integer, lboShName As Boolean
Do Until lboShName = True
NeuerName = InputBox("Bitte gebe den neuen Namen des Blattes ein!")
If NeuerName = "" Then Exit Sub
lboShName = True
For liSuche = 1 To Sheets.Count
If LCase(NeuerName) = LCase(Sheets(liSuche).Name) Then
MsgBox "Blattname schon vorhanden"
lboShName = False
Exit For
End If
Next
Loop
ActiveWorkbook.ActiveSheet.Copy after:=Sheets(Sheets.Count)
'Sheets ("Eingabe") .Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End Sub

Dank der fettgedruckten Zeile ist es bei der Eingabe in der Inputbox nun egal, ob Groß- und/oder Kleinschreibung.
@Matthias
Warum deklarierst du loX As Long?
Reicht da nicht die Deklaration As Integer, da ja die maximale Anzahl möglicher Tabellenblätter nie den Wertebereich einer Integervariablen überschreitet - na ja, und wenn doch...aber kennst du ne Exceldatei, in der 32.767 (Grenze für Integer) Tabellenblätter verwendet werden? :-))
Ciao
Thorsten
Ciao
Thorsten
Anzeige
so falsch ist Long aber nicht ... oder?
26.10.2009 09:03:06
Matthias
Hi Thorsten
Ich benutze immer Long beim Zählern der Blätter, sollte auch nicht unbedingt ein Fehler sein.
Zitat:
na ja, und wenn doch... ;o)
Seit XL2000 ist die Anzahl der Tabellenblätter unbeschränkt.
Gruß Matthias
AW: so falsch ist Long aber nicht ... oder?
26.10.2009 09:28:16
Oberschlumpf
Hi Matthias
Und noch mal die Frage:
kennst du ne Exceldatei, in der 32.767 (Grenze für Integer) Tabellenblätter verwendet werden? :-))
Sicher ist es nicht falsch, Long zu verwenden. Mir fiel es nur auf, weil ich versuche, immer den Datentyp zu deklarieren, der am besten passt - was mir sicher auch nich immer gelingt ;-)
Ciao
Thorsten
Anzeige
Nee, so ne Datei kenn ich nich ;-) oT
26.10.2009 09:40:52
Matthias
Long ist m.E. besser
26.10.2009 09:59:05
Erich
Hi Thorsten,
IMHO passt Long hier tatsächlich besser als Integer.
Die Item-Methode verarbeitet Indizes von 1 bis ....Count. Und Sheets.Count gibt ein Long zurück,
Item() ist also auf Long eingerichtet.
Wenn du mit Sheets(i) - entspricht Sheets.Item(i) - mit einem Integer i aufrufst,
wird i erst mal von Integer in Long konvertiert. Das kostet auch etwas Zeit.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Long ist m.E. besser
26.10.2009 10:31:25
Oberschlumpf
Hi Erich
Danke für die Info
Da ich so was fast ahnte :-)...hier noch mal...
Sicher ist es nicht falsch, Long zu verwenden. Mir fiel es nur auf, weil ich versuche, immer den Datentyp zu deklarieren, der am besten passt - was mir sicher auch nich immer gelingt ;-)
Wieder was gelernt.
Ciao
Thorsten
Anzeige
AW: so falsch ist Long aber nicht ... oder?
26.10.2009 09:44:32
Rudolf
Hi Matthias,
Auch Dir vielen Dank, es klappt super.
Gruß
Rudolf
frag die Namen vorher ab ...
26.10.2009 08:22:01
Matthias
Hallo
probiers mal so:
Sub BlattKopieren()
Dim NeuerName As String
Dim i As Integer, loX As Long
NeuerName = InputBox("Bitte gebe den neuen Namen des Blattes ein!")
i = Sheets.Count
      For loX = 1 To Worksheets.Count
If UCase(Worksheets(loX).Name) = UCase(NeuerName) Then
MsgBox NeuerName & " " & " ist schon vorhanden"
Exit Sub
End If
Next
ActiveWorkbook.ActiveSheet.Copy after:=Sheets(i)
'Sheets ("Eingabe") .Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End Sub

Anzeige
hat noch nen Fehler, sorry oT
26.10.2009 08:28:40
Matthias
hier die Korrektur
26.10.2009 08:49:08
Matthias
Hallo
Sub BlattKopieren()
Dim NeuerName As String
Dim i As Integer, loX As Long
NeuerName = InputBox("Bitte gebe den neuen Namen des Blattes ein!")
i = Sheets.Count
For loX = 1 To Worksheets.Count
If UCase(Worksheets(loX).Name) = UCase(NeuerName) Then
MsgBox NeuerName & " " & " ist schon vorhanden"
Exit Sub
End If
Next
If StrPtr(NeuerName)  0 And NeuerName  "" Then
ActiveWorkbook.ActiveSheet.Copy after:=Sheets(i)
'Sheets ("Eingabe") .Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End If
End Sub


besser noch in dieser Reihenfolge, da bei Abbruch die Schleife nicht gestartet wird.
Sub BlattKopieren()
Dim NeuerName As String
Dim i As Integer, loX As Long
NeuerName = InputBox("Bitte gebe den neuen Namen des Blattes ein!")
i = Sheets.Count
If StrPtr(NeuerName) = 0 Or NeuerName = "" Then Exit Sub
For loX = 1 To Worksheets.Count
If UCase(Worksheets(loX).Name) = UCase(NeuerName) Then
MsgBox NeuerName & " " & " ist schon vorhanden"
Exit Sub
End If
Next
ActiveWorkbook.ActiveSheet.Copy after:=Sheets(i)
'Sheets ("Eingabe") .Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End Sub
Infos zur undokumentierten Funktion: StrPtr gibts u.a, hier:
http://www.scribd.com/doc/9682665/Excel-Geheime-Tricks
Gruß Matthias
Anzeige
AW: tabellenblatt kopieren
26.10.2009 09:28:47
Rudolf
Hallo Thorsten,
vielen Dank für die rasche Hilfe.
Das ist es.
"MsgBox" = halt der Laie in mir.
Danke und Gruß
Rudolf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige