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.

Worksheet als Parameter übergeben
#1
Hallo Zusammen,

ich bin ein Newbi bzgl VBA und würde mich über Hilfe freuen.

Ich möchte ein Sub schreiben, mit dem ich die Daten aus einem Tabellenblatt in ein anderes übernehme. Dabei müssen auch SVerweis-Felder als Daten übernommen werden...

Da ich das öfter in der Date verwenden möchte, wollte ich das Ursprungstabellenblatt und das Ziel-Tabellenblatt als Parameter übergeben.

Folgendes habe ich probiert:
Code:
Sub Datenuebernahme(WS_von As Worksheet, WS_nach As Worksheet)
   WS_nach.Range("A4").Value = WS_von.Range("A4").Copy
    'Hier kommt noch mehr...
End Sub

Der Aufruf sieht bei mir so aus:
Code:
Sub Mail_CoC_PCA()
   
   Call Datenuebernahme(ActivWorkbook.Worksheets("Verkauf_PCA"), ActivWorkbook.Worksheets("PCA_Supplier"))

End Sub

Leider bekomme ich beim Aufruf die Fehermeldung: Laufzeitfehler 424: Object erforderlich. 

Kann mir jemand sagen, was ich falsch mache?

Vielen Dank
Patrick
Antwortento top
#2
Hallo, 19

schreibe es so: 21


Code:
Sub Datenuebernahme(ByVal WS_von As Worksheet, ByVal WS_nach As Worksheet)
    WS_nach.Range("A4").Value = WS_von.Range("A4")
    'Hier kommt noch mehr...
End Sub

Und dann schau dir folgendes an: 21

VBA in Excel/ ByRef und ByVal...
________
Servus
Case
Antwortento top
#3
Ich bekomme es einfach nicht hin...
Ich programmiere meistens in Delphi und komme mit dem Debugger nicht wirklich zurecht...

Ich wollte das Problem ein bißchen umgehen und übergebe nur den WOrksheet-Namen als String. Dazu habe ich den Code so umgestellt:
Code:
Sub Datenuebernahme(WS_von As String, WS_nach As String)
   Dim WKS_von As Worksheet
   Dim WKS_nach As Worksheet
   
   Set WKS_von = ActivWorkbook.Worksheets(WS_von)   'Hier kommt ein Fehler 424 Object erforderlich
   Set WKS_nach = ActivWorkbook.Worksheets(WS_nach)
   
   WKS_nach.Range("E4").Value = WKS_von.Range("A4").Value
   
End Sub

Der Aufruf sieht wie folgt aus:
Code:
Call Datenuebernahme("Verkauf_PCA", "PCA_Supplier")


Aber leider bekomme ich die Fehlermeldung 424 Object erforderlich. 
Was mache ich falsch?

Vielen Dank für Unterstützung
Patrick
Antwortento top
#4
Hallo, 19


Code:
Option Explicit
Sub Main()
    Call Datenuebernahme("Verkauf_PCA", "PCA_Supplier")
End Sub
Sub Datenuebernahme(ByVal WS_von As String, ByVal WS_nach As String)
    Dim WKS_von As Worksheet
    Dim WKS_nach As Worksheet
    Set WKS_von = ActiveWorkbook.Worksheets(WS_von)
    Set WKS_nach = ActiveWorkbook.Worksheets(WS_nach)
    WKS_nach.Range("E4").Value = WKS_von.Range("A4").Value
    Set WKS_nach = Nothing
    Set WKS_von = Nothing
End Sub
________
Servus
Case
Antwortento top
#5
Warum nicht einfach:

Code:
Tabelle1.cells(1,5)=tabelle2.cells(5,1).value

Ein Makro mir Argumenten macht das nur unnötig kompliziert.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top
#6
Vielen Dank!

Ich habe es jetzt so gelöst:
Code:
Sub Datenuebernahme(WS_von As String, WS_nach As String)
   Dim WKS_von As Worksheet
   Dim WKS_nach As Worksheet
   Set WKS_von = ThisWorkbook.Worksheets(WS_von)
   Set WKS_nach = ThisWorkbook.Worksheets(WS_nach)
   
   WKS_von.Range("A4:C4").Copy
   WKS_nach.Range("E4:G4").PasteSpecial Paste:=xlPasteValues, _
       Operation:=xlNone, SkipBlanks:=False, Transpose:=False
   
   Application.CutCopyMode = False
   
   Set WKS_von = Nothing
   Set WKS_nach = Nothing
End Sub

Das klappt jetzt!
Vielen Dank für die Unterstützung
Patrick
Antwortento top
#7
Hi,

mir ist btw aufgefallen, dass du immer "Activworkbook..." schreibst - da fehlt ein "e", sodass es "Activeworkbook" wird.

Vielleicht etwas für deine zukünftigen Subs

Gruß Tim
Antwortento top


Gehe zu:


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