Microsoft Excel

Herbers Excel/VBA-Archiv

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

VBA: Arbeitsblatt kopieren

Betrifft: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 11.10.2007 00:17:25

Hallo Experten!

Ich bräuchte bitte mal Eure Hilfe.

Ich möchte ein Arbeitsblatt (=Basis), dass hidden ist, in derselben Mappe unter anderem Namen (NeuerBlattname) und an einer bestimmten Stelle (drittletztes Blatt) einfügen. Unter E2000 läuft's im Prinzip, aber unter E97 nicht. Weiß da jemand von Euch vielleicht weiter? Und vielleicht auch, wie ich den Code noch verschlanken bzw. optimieren kann? Es soll natürlich vor dem Einfügen des neuen Blatts auch gecheckt werden, ob bereits eines vorhanden ist, das schon so heißt.

Hier mein bisheriger Code:

Dim wks As Worksheet, NeuerBlattname$, AktuellesSheet$
AktuellesSheet = ActiveSheet.Name
NeuerBlattname = InputBox("Bitte Blattname eingeben:", , )
On Error Resume Next
Set wks = Worksheets(NeuerBlattname)
On Error GoTo 0
If wks Is Nothing Then
Sheets("Basis").Copy after:=Worksheets(Worksheets.Count - 2) ' das Blatt "Basis" ist veryhidden!
On Error Resume Next
Worksheets(Worksheets.Count - 2).Name = NeuerBlattname
Sheets(NeuerBlattname).Visible = True
Worksheets(AktuellesSheet).Select
End If

Besten Dank im Voraus,

Andreas X

  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Daniel
Geschrieben am: 11.10.2007 01:16:57

Hi
keine Ahnung, wo die Unterschiede in den Versionen liegen.

ich würde den Code mal so schreiben, inclusive der Plausichecks
- Blattname schon vorhanden
- Länge eingehalten
- verbotene Sonderzeichen.
die Einabe muss solange wiederholt werden, bis alles passt.
daher können dann die OnERRORS bei der Erstellung entfallen.
irgendwie hab ein ein Problem, das ausgeblendete Blatt zu kopieren, daher wirds kurz sichtbar gemacht.

Sub Makro1()
Dim wks As Worksheet, NeuerBlattname$, AktuellesSheet$
Dim I As Long
Dim Nochmal As Boolean
AktuellesSheet = ActiveSheet.Name
Do
    Nochmal = False
    NeuerBlattname = InputBox("Bitte Blattname eingeben:")
    For I = 1 To ActiveWorkbook.Sheets.Count
        If Sheets(I).Name = NeuerBlattname Then Exit For
    Next
    If I <= ActiveWorkbook.Sheets.Count Then Nochmal = True
    If Len(NeuerBlattname) > 31 Then Nochmal = True
    For I = 1 To Len(":/\?*[]")
        If InStr(NeuerBlattname, Mid("*:/\?[]", I, 1)) > 0 Then Nochmal = True
    Next
If Not Nochmal Then Exit Do
    MsgBox ("bitta andern Blattnamen eingeben, Name schon vergeben, länger als 31 Zeichen oder  _
verbotenes Sonderzeichen vorhanden :/\?*[]")
Loop

With Sheets("Basis")
    .Visible = -1
    .Copy after:=Worksheets(Worksheets.Count - 2)
    .Visible = 2
End With
ActiveSheet.Name = NeuerBlattname

Worksheets(AktuellesSheet).Select

End Sub



Gruß, Daniel


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 11.10.2007 09:50:41

Hallo Daniel,

die Sache sieht viel sauberer aus als meine. Vielen Dank.

Ich habe allerdings irgendwie immer noch das Problem, dass es unter Excel8 (Office97) hängen bleibt bei dem Schritt

Sheets("Basis").Copy after:=Worksheets(Worksheets.Count - 2)

Weißt Du da vielleicht auch noch weiter? Braucht's da vielleicht eines Trick, so dass das auch unter Excel8 läuft?

Besten Gruß,

Andreas X


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 11.10.2007 09:56:59

Sorry, hab' mich vertan.

Es bleibt nicht hängen an der Stelle, sondern das neue Blatt bekommt einfach nicht den dafür vorgesehenen Namen (sondern heißt leider immer noch "Basis (2)" und das Vorlageblatt "Basis" bleibt immer noch eingeblendet, also sichtbar.


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Daniel
Geschrieben am: 11.10.2007 21:15:12

Sorry, keine Ahnung.
Excel 97 haben wir bei uns im Büro vor ein paar Jahren in Pension geschickt.
Zeiche noch einfach mal das Umbenennen eines Blattes mit dem Recorder auf.
Vielleicht lassen sich da die Unterschiede im Code erkennen.

Gruß, Daniel


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 12.10.2007 11:34:23

Ich danke Dir Daniel!
Schade, dass Ihr kein E97 mehr habt, war doch 'n gutes Dingen! :-)

Mit dem Recorder hatte ich es auch schon probiert, aber das gab keinen Unterschied.

Es ist leider immer noch so, dass das Makro einfach mit dem Befehl

Sheets("Basis").Copy after:=Sheets(Sheets.Count - 2)

ohne Fehlermeldung aussteigt und der Rest des Makros nicht mehr abgearbeitet wird (also das Umbenennen des neuen Arbeitsblattes und das Ausblenden des Basis-Arbeitsblattes).

Ich habe beim Recherchieren auch noch einen Hinweis auf "TakeFocusOnClick = False" gefunden, habe aber den Eindruck, dass es bei meinem Button (erzeugt mit Ansicht, Formular, Schaltfläche) nicht von Bedeutung ist - zumindest finde ich keine Möglichkeit, dass so einzuellen.

Jetzt hoffe ich darauf, dass vielleicht Herbert oder Hajo noch eine Lösung wissen.

Besten Gruß Dir Daniel und vielen Dank für Deine Unterstützung,

Andreas x


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Daniel
Geschrieben am: 12.10.2007 20:58:06

Hi
bist du sicher, daß du auch mindestens 3 Sheets in deiner Datei hast?
bei zweien funktioniert dieser Code nicht.

Ansonsten würde ich deinen Code nochmal durchsuchen, ob nicht doch noch irgendwo ein ON ERROR MACH WAS aktiv ist, daß dir die hilfreiche Fehlermeldung unterdrückt.

jetzt würde nur noch ne beispieldatei mit dem vollständigen Code helfen.

Gruß, Daniel


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 12.10.2007 21:07:19

Hallo Daniel,

wie hängt man die denn hier an?

Andreas


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 12.10.2007 21:16:26

Hallo Daniel,

ich habe mal probeweise alle Formeln im Basis-Arbeitsblatt gelöscht, Darin enthalten sind auch selbstgestrickte Funktionen, die im VBA hinterlegt sind und natürlich alle ausgeführt werden, wenn dieses Blatt als Kopie zusätzlich in der Mappe eingefügt wird.

Jetzt wo die Zellen leer sind, funktioniert's auch in E8.

Ich müsste irgendwie die Calculation, also die Berechnungen der Zellen in dem neu angelegten Arbeitsblatt vorübergehend deaktivieren können und erst am Ende des Kopiervorgangs wieder aktivieren.

Weißt du mir welchem Befehl das möglich ist?

Betsen Gruß

Andreas X


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Daniel
Geschrieben am: 12.10.2007 21:23:56

Hi
weiß ich schon, verrate ich aber nicht ;-).


du kannst aber in den Extras-Optionen die automatische Berechnung von Hand ein- und ausschalten und diese Aktion mit dem Recorder aufzeichnen.

Gruß, Daniel


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 12.10.2007 21:44:09

Du bist ja 'n Fuchs! :-)

Application.Calculation = xlManual ' zusammengebastelt nach Hinweisen aus der Rekorderaufzeichnung

Application.Calculation = xlCalculationManual ' per Suche im Forum


Ich werd's gleich mal testen. Bin gespannt.


  

Betrifft: AW: VBA: Arbeitsblatt kopieren von: Andreas X
Geschrieben am: 12.10.2007 21:57:16

Yeahpp!

Es funktionuckääält!

Danke für Deine Hilfe (auch zur Selbsthilfe) und Deine Ausdauer, Daniel!

Wenn Du mir Deine E-Mail-Adresse sendest, will ich mich mal dafür bei Dir auf besondere Weise bedanken.

Schönen Abend Dir,

Andreas X
nospam2me1(at)gmx.de


 

Beiträge aus den Excel-Beispielen zum Thema "VBA: Arbeitsblatt kopieren"