Microsoft Excel

Herbers Excel/VBA-Archiv

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

Neues Arbeitsblatt erstellen, falls nicht vorhande

Betrifft: Neues Arbeitsblatt erstellen, falls nicht vorhande von: J.
Geschrieben am: 19.02.2008 12:30:35

Hey

Ich habe hier schon einen Code, der mit Hilfe einer Liste von Begriffen ein neues Arbeitsblatt mit passendem Namen erstellt.

Nun ist es aber so, dass zu der ursprünglichen Liste noch Begriffe dazu gekommen sind, ich aber mit Hilfe des Makros keine neuen Arbeitsblätter mehr erstellen kann , weil manche Namen ja schon bestehen.

Hier ist mal der Code

Sub NeuesBlattundName()
       Dim rngC As Range
       With Sheets(1)
          For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
             rngC.EntireRow.Copy Worksheets.Add.Cells(1, 1)
             ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))
          Next
       End With
    End Sub



Function CheckSheetName(strName As String) As String
      Dim strNotAllowed As Variant
      Dim n As Integer
      'Im Tabellennamen nicht zulässige Zeichen
      strNotAllowed = Array(":", "\", "/", "?", "*", "[", "]")
      
      'unerlaubte Zeichen durch nichts ersetzen
      For n = 0 To UBound(strNotAllowed)
          strName = Replace(strName, strNotAllowed(n), "")
      Next
      
      'Namen auf 31 Zeichen begrenzen
      CheckSheetName = Left(strName, 31)
  End Function



Was muss ich nun ändern, damit die Bereits vorhandenen Sachen bestehen bleiben, und nur von neuen Listeneinträgen, neue Arbeitsblätter erstellt werden?

Und kann man ein Makro schreiben, durch das sich ein Suchformular öffnet, mit dem man nach einem im Arbeitsblattnamen vorhandenen Textstück suchen kann?
Es ist nämlich teilweise recht mühsam in über 100 Arbeitsblättern das passende zu suchen.

  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 12:50:09

Hallo,
1.

Sub NeuesBlattundName()
   Dim rngC As Range, wks As Worksheet
   With Sheets(1)
      For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
         On Error Resume Next
         Set wks = Worksheets(rngC)
         On Error GoTo 0
         If wks Is Nothing Then
            rngC.EntireRow.Copy Worksheets.Add.Cells(1, 1)
            ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))
         End If
         Set wks = Nothing
      Next
   End With
End Sub


2. als Ansatz

Sub SheetSuchen()
   Dim wks As Worksheet, vntWks As Variant
   vntWks = InputBox("Name?")
   If Len(Trim(vntWks)) > 0 Then
   For Each wks In Worksheets
      If wks.Name Like "*" & vntWks & "*" Then
      wks.Activate
      Exit For
      End If
   Next
   End If
End Sub



Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 13:23:20

Hi
Das funktioniert leider nicht.
Bei dem neuen Code erhalte ich den Laufzeitfehler 1004 und der markiert mir folgende Zeile

ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))


und kann man es beim zweiten Code so einstellen, dass Groß und Kleinschreibung egal sind?


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 13:48:50

Hallo,
ist die Liste auch Blatt 1?

Sub NeuesBlattundName()
   Dim rngC As Range, wks As Worksheet
   With Sheets(1)
      For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
         On Error Resume Next
         Set wks = Worksheets(rngC.Value)
         On Error GoTo 0
         If wks Is Nothing Then
            rngC.EntireRow.Copy Worksheets.Add(after:=Sheets(Sheets.Count)).Cells(1, 1)
            ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))
         End If
         Set wks = Nothing
      Next
   End With
End Sub


2.If lcase(wks.Name) Like "*" & lcase(vntWks) & "*" Then

Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 13:51:57

Ja die Liste befindet sich auf Blatt eins, heisst aber anders.
Und wo genau muss ich denn das was du unten geschrieben hast in meinen Code einfügen?


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 14:01:47

Hallo,

Und wo genau muss ich denn das was du unten geschrieben hast in meinen Code einfügen?


anstelle der Originalbedingung.

Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 14:07:53

Habe die Bedingung geändert, musste danach aber vntWks definieren, ich hoffe mal das stimmt so.

vntWks As Worksheet

Leider bekomme ich jetzt immer noch eine Fehlermeldung (Laufzeitfehler 91) wenn ich das Makro starte.
Die folgende Zeile wird dann gelb hinterlegt

If LCase(wks.Name) Like "*" & LCase(vntWks) & "*" Then


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 14:14:43

Hallo,

ich hoffe mal das stimmt so.


Nein!

Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 14:23:15

Und wie muss ich das dann ändern, damit das klappt?
Es funktioniert nämlich auch nicht als string oder integer


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 14:36:46

Hallo,
du sollst einfach nur die eine Zeile gegen die andere austauschen. Sonst nichts!

Sub SheetSuchen()
          Dim wks As Worksheet, vntWks As Variant
          vntWks = InputBox("Name?")
          If Len(Trim(vntWks)) > 0 Then
          For Each wks In Worksheets
             If LCase(wks.Name) Like "*" & LCase(vntWks) & "*" Then
             wks.Activate
             Exit For
             End If
          Next
          End If
       End Sub


Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 14:40:10

Das

vntWks As Variant

stand aber vorher nicht dabei.

aber jetzt klappt es

besten dank


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 14:47:05

Hallo,
in meiner 1. Antwort schon.
https://www.herber.de/forum/messages/952895.html

Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 15:07:16

Oh ich hab mich wohl verguckt, dachte das wäre der Lösungsansatz für das erste Problem, bei dem ein neues Arbeitsblatt erstellt wird. Das war aber die Lösung zu dem anderen Problem.
Also die Suchfunktion klappt prima, nur das Problem dass ich eine Fehlermeldung beim starten des anderen Makros bekomme, weil der Arbeitsblattname bereits vorhanden ist, kann ich nicht lösen.


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 15:27:07

Hallo,
dafür ist der unter 1. gepostete Code da.

Verstehst du eigentlich ungefähr, was abgeht?
Auch wenn man Code nicht schreiben kann, sollte man ihn doch zumindest Sinn entnehmend lesen können.

Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 15:35:36

Ich verstehe schon was abgeht, nur erhalte ich leider bei diesem Code den Laufzeitfehler 1004!


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 15:42:42

Hallo,
kleine Korrektur:

Sub NeuesBlattundName()
   Dim rngC As Range, wks As Worksheet
   With Sheets(1)
      For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
         On Error Resume Next
         Set wks = Worksheets(rngC.Value)
         On Error GoTo 0
         If wks Is Nothing Then
            rngC.EntireRow.Copy Worksheets.Add(after:=Sheets(Sheets.Count)).Cells(1, 1)
            ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))
         End If
         Set wks = Nothing
      Next
   End With
End Sub


Gruß
Rudi


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 15:49:41

Hallo
es kommt immer noch Fehlermeldung 1004

diese Zeile wird erneut markiert

ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))

kann es evtl daran liegen, dass ich das Dokument geöffnet habe und mich in der Liste in Zelle A1 befinde?


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: Rudi Maintaire
Geschrieben am: 19.02.2008 16:00:31

Hallo,
was soll das heißen?

dass ich das Dokument geöffnet habe und mich in der Liste in Zelle A1 befinde


Bei mir geht's 1a

Gruß
Rudi

Eine Kuh macht Muh, viele Kühe machen Mühe


  

Betrifft: AW: Neues Arbeitsblatt erstellen, falls nicht vorh von: J.
Geschrieben am: 19.02.2008 16:06:58

Also ich meinte damit einfach nur ob es etwas ausmacht, das mir das erste Tabellenblatt angezeigt wird und das die zelle a1 markiert ist.
Wenn ich alle arbeitsblätter lösche und das dann laufen lasse, klappt es.
Aber wenn ich jetzt an meiner Liste ganz unten noch einen Begriff hinzufüge, und das makro erneut laufen lasse, erhalte ich eben diesen fehler 1004. Dieses Makro ist aber absolut wichtig, denn ich kann nicht jedes Tabellenblatt , dass dazu kommt, per hand hinzufügen.


 

Beiträge aus den Excel-Beispielen zum Thema "Neues Arbeitsblatt erstellen, falls nicht vorhande"