Ich habe mal wieder ein Problem und hoffe ihr könnt mir mal wieder helfen. Ich habe ein äußerst triviales Makro geschrieben, welches über eine Schleife nach bestimmten Werten (größer als 0 und Titel "Bonds") in einer Input Datei sucht und dann verschiedene Daten aus der Input Datei in ein anderes Tabellenblatt (Renten) einfügt. Grundlegend hat mein Makro funktioniert. Nun werden allerdings 2 neue Tabellenblätter statt dem alten Tabellenblatt (Renten) eingeführt. Die Zuordnung hierbei soll nun sozusagen über ein Userform-Formular abgefragt, im Sinne von ich klicke Renten EM an, dann soll es die Daten in das jeweilige Renten EM Tabellenblatt einfügen oder Renten HY, dann soll es die Daten in das Renten HY Tabellenblatt einfügen und das jeweils nur pro Treffer, soll also nach jedem Treffer passieren.
Mein Code sieht nun erstmal so aus:
Sub Renten_hinzu()
Dim TbI, TbRHY, TBRem, LetzteZeileI As Long, LetzteZeileRem, LetzteZeileRHY As Long
Dim x As Long, Wert, Wert2, NextRow As Long
Set TbI = Worksheets("Input")
Set TBRem = Worksheets("Renten EM")
Set TbRHY = Worksheets("Renten HY")
Set TbW = Worksheets("Input Währung")
Set LookupRange = Worksheets("Input Währung").Range("B3:C23")
LetzteZeileI = TbI.Cells(TbI.Rows.Count, 1).End(xlUp).Row
LetzteZeileRem = TBRem.Cells(TBRem.Rows.Count, 1).End(xlUp).Row
LetzteZeileRHY = TbRHY.Cells(TbRHY.Rows.Count, 1).End(xlUp).Row
For x = 2 To LetzteZeileI Step 1
Wert = TbI.Cells(x, 10).Value
Wert2 = TbI.Cells(x, 11).Value
If Wert = "BONDS" And Wert2 > 0 Then
UserForm1.Show
End If
Next x
End Sub Und für das UserForm1:
Private Sub BtnEM_Click()
Dim TbI, TbA, LetzteZeileI As Long, LetzteZeileR As Long
Dim x As Long, Wert, Wert2, NextRow As Long
Set TbI = Worksheets("Input")
Set TBRem = Worksheets("Renten EM")
Set TbRHY = Worksheets("Renten HY")
Set TbW = Worksheets("Input Währung")
Set LookupRange = Worksheets("Input Währung").Range("B3:C23")
LetzteZeileI = TbI.Cells(TbI.Rows.Count, 1).End(xlUp).Row
LetzteZeileRem = TBRem.Cells(TBRem.Rows.Count, 1).End(xlUp).Row
LetzteZeileRHY = TbRHY.Cells(TbRHY.Rows.Count, 1).End(xlUp).Row
TBRem.Cells(LetzteZeileRem + 1, 1).EntireRow.Insert
NextRow = TBRem.Cells(TBRem.Rows.Count, 1).End(xlUp).Row + 1
TbI.Cells(x, 3).Copy Destination:=TBRem.Cells(NextRow, 2)
' Die Eröffnung der Transaktion
TbI.Cells(x, 11).Copy Destination:=TBRem.Cells(NextRow, 5)
' Die Stückzahl wird eingetragen
TbI.Cells(x, 23).Copy Destination:=TBRem.Cells(NextRow, 10)
' Die Währung wird eingetragen
TbI.Cells(x, 13).Copy Destination:=TBRem.Cells(NextRow, 11)
' Der Einstandskurs wird eingetragen
TbI.Cells(x, 21).Copy Destination:=TBRem.Cells(NextRow, 12)
' Der FX-Einstandskurs wird übertragen
TbI.Cells(x, 7).Copy Destination:=TBRem.Cells(NextRow, 9)
' Der BloombergTicker wird eingetragen
TBRem.Cells(NextRow, 4).Value = "long"
' Gibt bei neuen Aktienkäufen immer den Wert "long" an
TBRem.Cells(NextRow, 3).Value = "offen"
' Gibt bei neuen Aktienkäufen immer den Wert "offen" an
TBRem.Cells(NextRow, 8).FormulaR1C1 = "=BDP(RC[1],R3C7)"
' Gibt die Formel bei GICS_Industry_Name ein
TBRem.Cells(NextRow, 13).FormulaR1C1 = "=BDP(RC[-4],R3C12])"
' Autofillt die Formel bei Last_Price
Range(TBRem.Cells(LetzteZeileRem, 15), TBRem.Cells(LetzteZeileRem + 1, 15)). _
FillDown
' Autofillt die +/-
Range(TBRem.Cells(LetzteZeileRem, 16), TBRem.Cells(LetzteZeileRem + 1, 16)). _
FillDown
' Autofillt die P/L in EUR
Range(TBRem.Cells(LetzteZeileR, 17), TBRem.Cells(LetzteZeileRem + 1, 17)).FillDown
' Autofillt die P/L in BP
TBRem.Cells(NextRow, 7).FormulaR1C1 = "=BPD(RC[2],""Name"")"
' Autofillt Wertpapier
TBRem.Cells(NextRow, 6).FormulaR1C1 = "=BDP(RC[3],""CPN"")/100"
' Autofillt Kupon
TBRem.Cells(NextRow, 14).FormulaR1C1 = "=VLookUp(RC10,'" & LookupRange.Worksheet. _
Name & "'!" & LookupRange.Address(1, 1, xlR1C1) & ",2,False)"
End Sub
Der Code für den Button Renten HY sieht ähnlich aus.
Das Problem ist nun, dass er mir den Laufzeitfehler 1004: Anwendungs-oder objektdefinierter Fehler in der ersten Copy Zeile. Ganz offensichtlich erkennt er das x im Userform nicht mehr an. Jetzt weiß ich nicht wie ich dem Code sagen kann, dass er das x aus dem vorherigen Code (also aus dem Modul) nehmen soll. Ich hoffe ihr könnt mir weiterhelfen. Tausend Dank!
PS: Ich weiß, dass der Code nicht optimal ist, aber war mein erster Versuch mal in die VBA-Welt einzusteigen. Ich wusste auch nicht wo die Deklarationen jetzt hin müssen, ob in das Modul oder in das UserForm.