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
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...
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
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
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
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
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
Top


Gehe zu:


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