Clever-Excel-Forum

Normale Version: VBA Code Zelle in anderes Tabellenblatt kopieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

Mit Hilfe von Sabina, dem flotten Feger habe ich den folgenden VBA Code


Code:
Option Explicit

Function WorkSheetExists(ByVal WS As String) As Boolean
On Error Resume Next
WorkSheetExists = Not Worksheets(WS) Is 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.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("M32").Value
[b]    .Cells(.Rows.Count, 1).End(xlUp).Offset(, 1).Value = Sheets("Bestand").Range("M35").Value[/b]
    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.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("M31").Value
        [b].Cells(.Rows.Count, 1).End(xlUp).Offset(, 1).Value = Sheets("Bestand").Range("M35").Value[/b]
        MsgBox "Hinzugefügt zu " & Worksheets("Bestand").Range("E5").Value
    End With
End If

Application.ScreenUpdating = True
End Sub

Nun möchte ich, dass neben B2 und M31 bzw. M32 auch noch M35 in das zu erstellende Tabellenblatt kopiert wird in Spalte C

Meine Idee wäre, einfach den Code abzuändern:
Meine Abänderung habe ich fett markiert im Code. Logischerweise wird allerdings nun nur der Wert aus M31 bzw. M32 überschrieben...Müsste ich korrekterweise aus dem .Offset(, 1)
.Offset(, 2) machen?




Ein weiterer Punkt der mir Probleme bereitet ist, dass immer zwei Tabellenblätter erstellt werden. Sollte allerdings der Wert in M31 = 0 sein, soll kein weiteres Tabellenblatt erstellt werden.

Über Hilfe wäre ich sehr dankbar
Hallöchen,

schon ausprobiert?

Zitat:Müsste ich korrekterweise aus dem .Offset(, 1) .Offset(, 2) machen?


Zitat:Sollte allerdings der Wert in M31 = 0 sein, soll kein weiteres Tabellenblatt erstellt werden.

Im Moment ist da eine Bedingung,
If Worksheets("Bestand").Range("M31").Value <> "" Then
die bei <>"" nicht nur ein neues Blatt anlegt, sondern die Daten auch überträgt.

0 ist eben nicht "". Soll denn bei 0 auch die Datenübertragung entfallen oder nur das Blatt anlegen?
Zuviel Code

Statt:

Code:
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


Code:
If [not(isref(Bestand!E4&"!A1"))] Then sheets.add( ,sheets(sheets.count)).name=[Bestand!E4]

Und dann:


Code:
With sheets(sheets.count)

end with
[quote pid='150996' dateline='1550353233']
Im Moment ist da eine Bedingung,
If Worksheets("Bestand").Range("M31").Value <> "" Then
die bei <>"" nicht nur ein neues Blatt anlegt, sondern die Daten auch überträgt.

0 ist eben nicht "". Soll denn bei 0 auch die Datenübertragung entfallen oder nur das Blatt anlegen?
[/quote]

Sollte der Wert gleich 0 sein, so soll in dem Fall kein zweites Blatt angelegt werden und kein Wert zusätzlich übertragen werden.
In diesem Fall wird ausschließlich ein Tabellenblatt erstellt.
Hallöchen,

du könntest die Bedingung einfach erweitern:

If Worksheets("Bestand").Range("M31").Value <> "" And Worksheets("Bestand").Range("M31").Value <> 0 Then
Super. Genau das habe ich gebraucht.

Vielen Dank an alle!