Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Code Tabellenblatt erzeugen
#1
Hallo,

gerne würde ich für ein kleines Excel Tool von mir anpassen.
Aktuell nutze ich den folgenden Code, den ich mit viel Hilfe hier aus dem Forum für meine Zwecke abändern konnte:

Code:
Sub Bestelldatei()
Dim i As Long, boVorhanden As Boolean

Application.ScreenUpdating = False

For i = 1 To Worksheets.Count
   If Worksheets(i).Name = Worksheets("Bestand").Range("E4") Then
      boVorhanden = True
      With Worksheets(i)
          .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets("Bestand").Range("B2").Value
          .Cells(.Rows.Count, 1).End(xlUp).Offset(, 1).Value = Sheets("Bestand").Range("F3").Value
          MsgBox "Hinzugefügt zu " & Worksheets("Bestand").Range("E4").Value
      End With
      Exit For
  End If
Next i

If Not boVorhanden Then
  Worksheets.Add after:=Sheets(3)
  ActiveSheet.Name = Worksheets("Bestand").Range("E4")
  ActiveSheet.Range("A1") = Worksheets("Bestand").Range("B2")
  ActiveSheet.Range("B1") = Worksheets("Bestand").Range("F3")
End If
 
End Sub

Dabei steht in B2 eine Artikelnummer und in F3 die Menge. Diese werden dann in ein neues Tabellenblatt geschrieben in A1 und B1.
Zusätzlich wird dem Tabellenblatt ein Name zugewiesen, der in Zelle E4 steht. Gibt es bereits ein Tabellenblatt mit dem Namen, so wird in dieses Tabellenblatt in die nächste Zeile geschrieben.

Mein Ziel ist es, dass eine weitere Abfrage hinzukommt, bei der überprüft wird, wenn M31 nicht leer ist, ein weiteres Tabellenblatt erstellt wird. Dies hat den Namen, der in E5 steht.
Zudem soll in A1 der Wert aus B2 stehen und außerdem anstatt F3 dann M31.

Auch hier gilt, ist das Tabellenblatt bereits vorhanden, soll in die nächste Zeile geschrieben werden.

Über Tipps wäre ich sehr dankbar.
Möglicherweise hat auch jemand für mich einige Literaturtipps. Gerne würde ich mich diesbezüglich weiterentwickeln.
Antworten Top
#2
Hallo,

du kannst die Wahrscheinlichkeit, dass dir im Forum geholfen wird, ungemein steigern, wenn du einen Beispieldatei beifügst Wink
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top
#3
Hallo,

ich würde es so machen ...

PHP-Code:
Function WorkSheetExists(ByVal WS As Variant) As Boolean
On Error Resume Next
WorkSheetExists 
Not Worksheets(WSIs Nothing
End 
Function

Sub Bestelldatei()
Dim WS As Worksheet

Application
.ScreenUpdating False

If WorkSheetExists(Worksheets("Bestand").Range("E4")) Then
    Set WS 
Worksheets(Worksheets("Bestand").Range("E4"))
Else
 
   Set WS Worksheets.Add(after:=Worksheets(3))
 
   WS.Name Worksheets("Bestand").Range("E4")
End If

With WS
    
.Cells(.Rows.Count1).End(xlUp).Offset(10).Value Sheets("Bestand").Range("B2").Value
    
.Cells(.Rows.Count1).End(xlUp).Offset(, 1).Value Sheets("Bestand").Range("F3").Value
    MsgBox 
"Hinzugefügt zu " Worksheets("Bestand").Range("E4").Value
End With

If Worksheets("Bestand").Range("M31").Value <> "" Then
    If WorkSheetExists
(Worksheets("Bestand").Range("E5")) Then
        Set WS 
Worksheets(Worksheets("Bestand").Range("E5"))
 
   Else
        Set WS 
Worksheets.Add(after:=Worksheets(3))
 
       WS.Name Worksheets("Bestand").Range("E5")
 
   End If
 
   
    With WS
        
.Cells(.Rows.Count1).End(xlUp).Offset(10).Value Sheets("Bestand").Range("B2").Value
        
.Cells(.Rows.Count1).End(xlUp).Offset(, 1).Value Sheets("Bestand").Range("M31").Value
        MsgBox 
"Hinzugefügt zu " Worksheets("Bestand").Range("E5").Value
    End With
End 
If

Application.ScreenUpdating True
End Sub 
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • deschroe
Antworten Top
#4
Hallo Sabrina,

vielen Dank schon einmal für deine Hilfe.

Leider funktioniert der Code noch nicht ganz.
Die Datei wird zwar erzeugt, allerdings werden die Werte jeweils in die zweite Zeile geschrieben.

Außerdem bekomme ich den Fehler, wenn die Datei bereits vorhanden ist, dass der Name bereits verwendet wird.
In diesem Fall sollte allerdings der Wert in die bereits vorhandene Tabelle eingefügt werden.

Über weitere Hilfe würde ich mich sehr freuen.

Danke
Antworten Top
#5
Hallo,

SABINA ... warum könnt ihr alle nicht lesen ???

Hatte ich auch noch nicht ... der Variant in der Function erzeugt einen Fehler in 2016 ... versuch es so ...

PHP-Code:
Function WorkSheetExists(ByVal WS As String) As Boolean
On Error Resume Next
WorkSheetExists 
Not Worksheets(WSIs Nothing
End 
Function

Sub Bestelldatei()
Dim WS As Worksheet

Application
.ScreenUpdating False

If WorkSheetExists(Worksheets("Bestand").Range("E4")) Then
    Set WS 
Worksheets(Worksheets("Bestand").Range("E4").Value)
Else
 
   Set WS Worksheets.Add(after:=Worksheets(3))
 
   WS.Name Worksheets("Bestand").Range("E4")
End If

With WS
    
.Cells(.Rows.Count1).End(xlUp).Offset(10).Value Sheets("Bestand").Range("B2").Value
    
.Cells(.Rows.Count1).End(xlUp).Offset(, 1).Value Sheets("Bestand").Range("F3").Value
    MsgBox 
"Hinzugefügt zu " Worksheets("Bestand").Range("E4").Value
End With

If Worksheets("Bestand").Range("M31").Value <> "" Then
    If WorkSheetExists
(Worksheets("Bestand").Range("E5")) Then
        Set WS 
Worksheets(Worksheets("Bestand").Range("E5").Value)
 
   Else
        Set WS 
Worksheets.Add(after:=Worksheets(3))
 
       WS.Name Worksheets("Bestand").Range("E5")
 
   End If
 
   
    With WS
        
.Cells(.Rows.Count1).End(xlUp).Offset(10).Value Sheets("Bestand").Range("B2").Value
        
.Cells(.Rows.Count1).End(xlUp).Offset(, 1).Value Sheets("Bestand").Range("M31").Value
        MsgBox 
"Hinzugefügt zu " Worksheets("Bestand").Range("E5").Value
    End With
End 
If

Application.ScreenUpdating True
End Sub 
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • deschroe
Antworten Top
#6
Hallo Sabina,

erst einmal danke für deine Hilfe. Der Name Sabina war mir so nicht geläufig. Deshalb hat mein Kopf wohl auf das Bekannte zurückgegriffen.
Ab nun halte ich mich dran ;)

Dein Code funktioniert soweit. Allerdings werden die Werte immer in die zweite Zeile geschrieben.
Hast du hierfür noch eine Idee?

Viele Grüße
Antworten Top
#7
Hallo Sabina,

(12.02.2019, 09:44)Flotter Feger schrieb: Hatte ich auch noch nicht ... der Variant in der Function erzeugt einen Fehler in 2016 ... versuch es so ...

das habe ich jetzt mal in meinem E2010 probiert. Das Problem hier ist, dass ohne .Value-Angabe E4 als Zelle und nicht als deren Inhalt interpretiert wird.
Das ist ein schönes Beispiel dafür, dass es nicht schadet, ".Value", auch wenn es die Default-Eigenschaft ist, mit anzugeben.
If WorkSheetExists(Worksheets("Bestand").Range("E4").Value) Then
   Set WS = Worksheets(Worksheets("Bestand").Range("E4").Value)
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • schauan
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste