Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
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

Makro: Neues Blatt plus Inhalt Einfuegen

Makro: Neues Blatt plus Inhalt Einfuegen
14.12.2012 19:23:28
Marius
Sehr geehrte Community,
ich waelze jetzt schon seit Stunden das Internet auf der Suche nach dem passenden Code und muss mich geschlagen geben. Jetzt koennt nur noch Ihr mir weiterhelfen.
Ich habe euch eine Datei hochgeladen, die mehrere Makros enthaelt. Es geht mir um das Script „workbookadder“.
https://www.herber.de/bbs/user/83015.xlsm
Wenn ich auf „New Project“ klicke, soll es mir:
• Ein neues Tabellenblatt erstellen
• Der Blattname soll nachgefragt werden (Projektnummer)
• Wenn der Blattname bereits existiert, muss eine neue Eingabe gemacht werden
• Das neu erstellte Tabellenblatt soll an letzter Stelle auftauchen
• Der Inhalt aus der Vorlage „G-Temp“ soll in das neue Tabellenblatt eingefuegt werden
Den letzten Schritt bekomme ich nicht gebacken. Ich kann wohl den Inhalt in ein bereits vorhandenes Blatt kopieren (z.B. Blatt "GTEST"), aber ich weiss nicht wie ich das neu erstellte Blatt ansprechen muss.
Waere super, wenn Ihr mir weiterhelfen koenntet.
Gruss, Marius

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Worksheets(Worksheets.Count).Name
15.12.2012 04:11:31
Matthias

AW: Makro: Neues Blatt plus Inhalt Einfuegen
15.12.2012 05:59:56
schauan
Hallo Marius,
hat es einen besonderen Grund, dass Du nicht gleich das Blatt kopierst?
Neben anderen wäre noch die Frage, warum Du 7 Buttons übereinander legst?
 Hoffe, geholfen zu haben. Grüße, André aus G in T  (xls 97-2013)

AW: Makro: Neues Blatt plus Inhalt Einfuegen
17.12.2012 13:37:54
Marius
Hallo André,
vielen Dank fuer deine schnelle Antwort. Also mit den 7 Buttons hat keinen besonderen Grund. Meinst du in VBA, warum 7 Skripte untereinander geschrieben sind, oder meinst du die Buttons in Excel? Kann sowas zu Problemen fuehren?
Meinetwegen kann auch das ganze Blatt kopiert werden. Solange die Inputbox den Namen des Blattes aendert, ist mir dies in Ordnung.

Anzeige
AW: Makro: Neues Blatt plus Inhalt Einfuegen
17.12.2012 17:07:34
schauan
Hallo Marius,
hier das wäre mal ein Ansatz. Den Blattnamen musst Du noch 3x ändern - Tabelle2 in G-...
Sub workbookadder()
'Variablendeklarationen 
'Strineg 
Dim strName As String
  
  'Tabelle zum kopieren einblenden 
  Sheets("Tabelle2").Visible = True
  'Tabelle ans Ende kopieren 
  Sheets("Tabelle2").Copy after:=Sheets(Sheets.Count)
  'Tabelle ausblenden 
  Sheets("Tabelle2").Visible = False

'Tue - Blatt umbenennen 
Do
   'Blattname eingeben 
   strName = InputBox("Please type the number for this project")
   'wenn nicht abgebrochen wurde, dann 
   If StrPtr(strName) <> 0 Then
    'wenn mehr als 0 Zeichen eingegeben wurden, dann 
    If Len(strName) > 0 Then
      'Fehlerbehandlung wenn Blattname schon vorhanden 
      On Error Resume Next
      'Blatt umbenennen 
      Sheets(Sheets.Count).Name = strName
      'Fehlerbehandlung ruecksetzen 
      On Error GoTo 0
      'wenn umbenennen Fehler ergibt, dann 
      If Err Then
        'Meldung ausgeben 
        MsgBox "Name schon vorhanden. Bitte neuen Namen eingeben!"
        'Fehler zuruecksetzen 
        Err.Clear
        'Eingebe zuruecksetzen 
        strName = ""
      'Ende wenn umbenennen Fehler ergibt, dann 
      End If
    'Ende wenn mehr als 0 Zeichen eingegeben wurden, dann 
    End If
    'oder wenn abgebrochen wurde, dann 
    Else
     'Meldung ausgeben 
      MsgBox "Es wurde ein neues Blatt angelegt und kein Name eingegeben. Bitte ggf. Löschen"
      'Makro verlassen 
      Exit Sub
   'Ende wenn nicht abgebrochen wurde, dann 
   End If
'Wiederhole solange Blattname = "" 
Loop While strName = ""

End Sub
 Hoffe, geholfen zu haben. Grüße, André aus G in T  (xls 97-2013)

Anzeige
AW: Makro: Neues Blatt plus Inhalt Einfuegen
18.12.2012 16:21:48
Marius
Hey André,
dein Code klappt super. Du hast mein Problem umgangen. Ich habe noch einen Code gefunden, den ich da gerne einbauen wuerde. Wie mache ich das am besten?
Ich habe gedacht, bevor deine InputBox den Namen des Tabellenblattes aendert, heisst das Tabellenblatt "G-Temp (2)".
Kann ich vor der Umbenennung noch weitere Aktionen durchfuehren, wo ich mich auf den Blattnamen "G-Temp (2)" beziehen kann, obwohl das Blatt gerade erst erstellt wurde?
Sub Eingabemaske()
'Die benoetigten Variablen werden deklariert
Dim ProjectNo As String
Dim ProjectName As String
Dim max As Integer
'Eingabeboxen gestalten...
ProjectNo = InputBox("Type in 2G Project No.", "Project No.", "e.g. G3115, M0160")
ProjectName = InputBox("Type in the Name of the Project", "Project Name")
'Das Zaehlen der Reihe beginnt
max = G-Temp(2).UsedRange.Rows.Count
'Sofern die erste Zeile noch leer ist, kann es zu einer Errormeldung
'kommen, deshalb wird mit einer einfachen If-Bedingung geprueft,
'ob die erste Zeile leer ist. Ist diese leer, dann gehts mit dem Code
'hinter dem else weiter...
If IsEmpty(G-Temp(2).Range("A6")) Then
Cells(6, 1).Offset(0, 0).Value = ProjectNo
Cells(6, 1).Offset(1, 0).Value = ProjectName
Else
Cells(max, 1).Offset(1, 0).Value = ProjectNo
Cells(max, 1).Offset(2, 0).Value = ProjectName
End If
End Sub

In dem Blatt "Overview" stehen alle Projekte mit einem Verweisbutton zum Tabellenblatt. Ist es moeglich, automatisch einen neuen Verweisbutton fuer das neu erstellte Projekt zu kreieren?
Also ich bin vor zwei Wochen mit Visual Basic angefangen und das ist der hammer, wie viel Arbeit man sich durch die Skripte sparen kann. Ich muss fuer mein Unternehmen ein Cost Tracking System entwickeln, wobei die Anwender nicht sehr excelkundig sind. Deswegen muss das alles so bedienerfreundlich sein.

Anzeige
AW: Makro: Neues Blatt plus Inhalt Einfuegen
18.12.2012 17:35:03
schauan
Hallo Marius,
das Blatt wird ja an das Ende der Mappe gestellt. Entsprechend kannst Du statt
Sheets("G-Temp (2)")
dann z.B.
Sheets(sheets.count)
nehmen, stand hier schon mal in einer Antwort ohne Text (o.T.).
Für das Makro fügst Du eine Aufruf an passender Stelle z.B. in das AddProjekt oder WorkbookAdd - Makro ein. Einfach nur den Namen in eine Zeile schreiben
Eingabemaske
oder
Call Eingabemaske
Das Einfügen von Buttons hattest Du auch schon - das war die Stelle, wo Du 7 davon übereinanderlegst. 6 Zeilen können bestimmt gelöscht werden und es bleibt nur einer übrig ...
ActiveSheet.Buttons.Add(261.75, 29.25, 125.25, 45.75).Select
Statt ActiveSheet nimmst Du hier Sheets("Overview"). Wenn das Select nötig ist, z.B. zum Zuweisen eines Makro, müsstest Du vorher auch auf das Blatt wechseln. Es geht aber auch ohne ... Aber dazu vielleicht mehr, wenn alles funktioniert.
Blieben hierbei drei Fragen
1. Wohin?
Du könntest die Anzahl der Buttons feststellen - "gefiltert" auf die, die einen Text mit G beginnend haben, und anhand der Zahl die Position berechnen lassen. Unter den G's steht der erste in B8, der zweite in E8 ... der vierte in B12 usw.
Der 7. müsste also nach B16, der 8, nach E16, bekommst Du dazu eine Formel hin?
Zeile:
7. Button
4 + aufrunden(7/3) * 4
aufrunden 7/3 wäre 3, 3*4 = 12 + 4 = 16
8. Button
4 + aufrunden(8/3) * 4
aufrunden 8/3 wäre 3, 3*4 = 12 + 4 = 16
usw...
2. Beschriftung?
Sollte kein Problem darstellen ...
3. Makro zuweisen
Daszuweisen eines Makro bekommst Du aufgezeichnet. Wichtig aus der Aufzeichnung wäre diese Zeile:
Selection.OnAction = "d"
oder
Selection.OnAction = "AlleFormularButtonsG"
Die baust Du unter die, wo Du den Button einfügst.
Hier wäre es von Vorteil, wenn Du ein so allgemeingültiges Makro hast, dass damit alle Aktionen der Buttons abgefangen werden können.
Den Button, der gedrückt wurde, bekommst Du mit application.caller - geht aber nur bei denen vom Formular.
Du bräuchtest für alle Buttons - zumindest die mit G - nur noch ein Makro, im Prinzip so:
Sub AlleFormularButtonsG
Sheets(Application.Caller).Select
Range("B65536").End(xlUp).End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
End Sub
Übrigens gibt es ab 2007 ein paar mehr Zeilen als 65536 ... Besser wäre hier:
Cells(Rows.Count, 2)
 Hoffe, geholfen zu haben. Grüße, André aus G in T  (xls 97-2013)

Anzeige
AW: Makro: Neues Blatt plus Inhalt Einfuegen
19.12.2012 20:00:18
Marius
Alles klappt wunderbar. Den folgenden Code habe ich selber zusammengewuerfelt, und er funktioniert, ich bin so stolz auf mich :)
Sub ButtonAdder()
' ButtonAdder Makro
Dim ButtonNr As String
Dim ButtonName As String
ButtonNr = InputBox("Please enter Project Number", "Project Number", "e.g. G3115, M0160")
'wenn nicht abgebrochen wurde, dann
If StrPtr(ButtonNr)  0 Then
'wenn mehr als 0 Zeichen eingegeben wurden, dann
If Len(ButtonNr) > 0 Then
'Fehlerbehandlung wenn Blattname schon vorhanden
On Error Resume Next
'Fehlerbehandlung ruecksetzen
On Error GoTo 0
'wenn umbenennen Fehler ergibt, dann
If Err Then
'Meldung ausgeben
MsgBox "Number already exists. Please try again!"
'Fehler zuruecksetzen
Err.Clear
'Eingebe zuruecksetzen
ButtonNr = ""
'Ende wenn umbenennen Fehler ergibt, dann
End If
'Ende wenn mehr als 0 Zeichen eingegeben wurden, dann
End If
'oder wenn abgebrochen wurde, dann
Else
'Meldung ausgeben
MsgBox "New Button without Number. Please delete this Button"
'Makro verlassen
Exit Sub
'Ende wenn nicht abgebrochen wurde, dann
End If
ButtonName = InputBox("Please enter Project Name", "Project Name", "e.g. Heinz")
'wenn nicht abgebrochen wurde, dann
If StrPtr(ButtonName)  0 Then
'wenn mehr als 0 Zeichen eingegeben wurden, dann
If Len(ButtonName) > 0 Then
'Fehlerbehandlung wenn Blattname schon vorhanden
On Error Resume Next
'Fehlerbehandlung ruecksetzen
On Error GoTo 0
'wenn umbenennen Fehler ergibt, dann
If Err Then
'Meldung ausgeben
MsgBox "Name already exists. Please try again!"
'Fehler zuruecksetzen
Err.Clear
'Eingebe zuruecksetzen
ButtonName = ""
'Ende wenn umbenennen Fehler ergibt, dann
End If
'Ende wenn mehr als 0 Zeichen eingegeben wurden, dann
End If
'oder wenn abgebrochen wurde, dann
Else
'Meldung ausgeben
MsgBox "New Button without Name. Please delete this Button"
'Makro verlassen
Exit Sub
'Ende wenn nicht abgebrochen wurde, dann
End If
ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 63.75, 237.75, 115.5, _
41.25).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset25
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = ButtonNr & Chr(13) &  _
ButtonName
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6). _
ParagraphFormat
.FirstLineIndent = 0
.Alignment = msoAlignCenter
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).Font
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Name = "+mn-lt"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(7, 5). _
ParagraphFormat
.FirstLineIndent = 0
.Alignment = msoAlignCenter
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(7, 5).Font
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Name = "+mn-lt"
End With
Selection.OnAction = "VerweisAufLetztesProjekt"
Range("D21").Select
End Sub
"VerweisAufLetztesProjekt" ist einfach ein Verweis auf eine bestimmte Zelle im letzten Tabellenblatt.
Wenn ich natuerlich wieder ein neues Projekt erstelle, verweist das vorletzte Projekt leider auch auf das letzte. Ist dafuer die Application.Caller wichtig?
Dein Code "AlleFormularButtonsG" wirft bei mir einen Fehler auf.
Was mir nur noch fehlt, ist den Button zu positionieren. Deine Funktion ist klasse, nur weiss ich nicht wie ich die mit einbinden kann.

Anzeige
AW: Makro: Neues Blatt plus Inhalt Einfuegen
20.12.2012 18:14:18
schauan
Hallo Marius,
Application.Caller:
ja, dadurch soll der Button auf "sein" spezielles Blatt gelangen.
Fehler:
sorry, da hat ein wichtiger Satz gefehlt.
Die Buttons müssen, damit es so direkt funktioniert, auch den Namen des neuen Blattes als eigenen Namen erhalten. Nach dem Einfügen heißen die ja so etwa "Schaltfläche x" und so ein Blatt gibt es natürlich nicht :-(
Jetzt gibt es aber eventuell ein weiteres Problem. Mindestens ab Excel 2007 sperrt sich selbiges gegen die Bezeichnung eines Objektes mit einer Zelladresse. G3223 wäre ja eine. Daher müssten die Namen einen Zusatz davor oder dahinter erhalten, zum Beispiel G3223#
Damit Application.Caller funktioniert, muss der Zusatz wieder weg. Die codezeile für die Entfernung eines beliebiges Zusatzzeichens auf der rechten Seite könnte dann so aussehen:
Sheets(Left(Application.Caller, Len(Application.Caler)-1)).Select
Mit der Positionierung hatte ich ja schon einen mathematischen Ansatz geliefert.
Wichtig wäre dabei die Anzahl der Buttons, die z.B. mit "G" anfangen:
Sub ButtonsZaehlen()
'Variablendeklarationen 
'Shape 
Dim butShape As Shape
'Integer 
Dim iCnt%
'Schleife ueber alle Shapes 
For Each butShape In ActiveSheet.Shapes
  'Wenn der Shapename mit G beginnt, dann zaehler hochsetzen 
  If butShape.Name Like "G*" Then iCnt = iCnt + 1
  'naechste Schleife ueber alle Shapes 
Next
'Meldung ausgeben 
MsgBox iCnt
End Sub
Die 4 Werte beim hinzufügen des Buttons sind Top, Left, Width und Height.
Anstelle der Werte nimmst Du Variablen, und diese Berechnest Du entsprechend. Wenn's zu kompliziert wird, melde Dich noch mal.

Anzeige
AW: Makro: Neues Blatt plus Inhalt Einfuegen
21.12.2012 15:29:58
Marius
Also ich habe es soweit editiert, wie ich konnte. Natuerlich klappen meine Scripte nicht.
Code: ButtonZaehlen
Bei dem Script ButtonsZaehlen wirft der mir 0 aus. Kann ich dieses "iCnt" nicht direkt in "ButtonAdder" einfuegen?
Sub ButtonsZaehlen()
'Variablendeklarationen
'Shape
Dim butShape As Shape
'Integer
Dim iCnt%
'Schleife ueber alle Shapes
For Each butShape In ActiveSheet.Shapes
'Wenn der Shapename mit G beginnt, dann zaehler hochsetzen
If butShape.Name Like "G3323#" Then iCnt = iCnt + 1
'naechste Schleife ueber alle Shapes
Next
'Meldung ausgeben
MsgBox iCnt
End Sub

Code: ButtonAdder
Den Button einmalig zu positionieren habe ich hinbekommen (fettdruck). Nur fehlt mir die variable Shapebezeichnung. Koennte man dort vielleicht "ButtonNr" eingeben? Deine Funktion fuer die Reihenbestimmung klappt auch super. Ich bekomme aber keine mathematische Loesung fuer die Spaltenbestimmung (fettdruck) hin.
Wenn ich den Button mit einem Zusatzzeichen versehen muss, also "G3323#" anstelle von "G3223" muss ich "ButtonName" weglassen, oder? Ansonsten wuerde er mir "G3323# Heinz" in den Button schreiben, was mir bei Application.Caller wieder Probleme bereiten wuerde, oder?
Die Spalte muss entweder 2,5 oder 8 ergeben. Das ist echt kompliziert. Waere es einfacher, nur zwei Spalten zu machen. Ungerade Buttonanzahl = Spalte 2, gerade Buttonanzahl = Spalte 5?

Sub ButtonAdder()
' ButtonAdder Makro
Dim ButtonNr As String
Dim ButtonName As String
ButtonNr = InputBox("Please enter Button Number", "Button Number", "e.g. G3115#, M0160#")
'wenn nicht abgebrochen wurde, dann
If StrPtr(ButtonNr)  0 Then
'wenn mehr als 0 Zeichen eingegeben wurden, dann
If Len(ButtonNr) > 0 Then
'Fehlerbehandlung wenn Blattname schon vorhanden
On Error Resume Next
'Fehlerbehandlung ruecksetzen
On Error GoTo 0
'wenn umbenennen Fehler ergibt, dann
If Err Then
'Meldung ausgeben
MsgBox "Number already exists. Please try again!"
'Fehler zuruecksetzen
Err.Clear
'Eingebe zuruecksetzen
ButtonNr = ""
'Ende wenn umbenennen Fehler ergibt, dann
End If
'Ende wenn mehr als 0 Zeichen eingegeben wurden, dann
End If
'oder wenn abgebrochen wurde, dann
Else
'Meldung ausgeben
MsgBox "New Button without Number. Please delete this Button"
'Makro verlassen
Exit Sub
'Ende wenn nicht abgebrochen wurde, dann
End If
ButtonName = InputBox("Please enter Button Name", "Button Name", "e.g. Heinz")
'wenn nicht abgebrochen wurde, dann
If StrPtr(ButtonName)  0 Then
'wenn mehr als 0 Zeichen eingegeben wurden, dann
If Len(ButtonName) > 0 Then
'Fehlerbehandlung wenn Blattname schon vorhanden
On Error Resume Next
'Fehlerbehandlung ruecksetzen
On Error GoTo 0
'wenn umbenennen Fehler ergibt, dann
If Err Then
'Meldung ausgeben
MsgBox "Name already exists. Please try again!"
'Fehler zuruecksetzen
Err.Clear
'Eingebe zuruecksetzen
ButtonName = ""
'Ende wenn umbenennen Fehler ergibt, dann
End If
'Ende wenn mehr als 0 Zeichen eingegeben wurden, dann
End If
'oder wenn abgebrochen wurde, dann
Else
'Meldung ausgeben
MsgBox "New Button without Name. Please delete this Button"
'Makro verlassen
Exit Sub
'Ende wenn nicht abgebrochen wurde, dann
End If
ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 63.75, 237.75, 115.5, _
41.25).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset25
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = ButtonNr
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6). _
ParagraphFormat
.FirstLineIndent = 0
.Alignment = msoAlignCenter
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).Font
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Name = "+mn-lt"
End With
ActiveSheet.Shapes("Rounded Rectangle 4").Left = ActiveSheet.Cells(2,Formel fuer  _
Spaltenbestimmung).Left
ActiveSheet.Shapes("Rounded Rectangle 4").Top = ActiveSheet.Cells(4 +  _
WorksheetFunction.RoundUp(7 / 3, 0) * 4, 2).Top
Selection.OnAction = "AlleFormularButtonsG"
Range("D21").Select
End Sub

Code: AlleFormularButtonsG
Bei AlleFormularButtonsG wirft mir der Application.Caller leider nicht einen Button Namen wie "G3323" aus. Ich gebe "G3323#" als Buttonnamen an, aber Application.Caller sagt mir "Rounded Rectangle 4", den Namen der Buttonform.

Sub AlleFormularButtonsG()
Sheets(Left(Application.Caller, Len(Application.Caller) - 1)).Select
Range("B65536").End(xlUp).End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
End Sub
Ich habe die Datei noch einmal hochgeladen, vielleicht ist das einfacher.
Vielen Dank schonmal fuer deine unermuedliche Hilfe.
https://www.herber.de/bbs/user/83111.xlsm
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige