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 Zelle in anderes Tabellenblatt kopieren
#1
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
Antworten Top
#2
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?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
[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.
Antworten Top
#5
Hallöchen,

du könntest die Bedingung einfach erweitern:

If Worksheets("Bestand").Range("M31").Value <> "" And Worksheets("Bestand").Range("M31").Value <> 0 Then
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • deschroe
Antworten Top
#6
Super. Genau das habe ich gebraucht.

Vielen Dank an alle!
Antworten Top


Gehe zu:


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