Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellenblatt an Funktion/Sub übergeben

Forumthread: Tabellenblatt an Funktion/Sub übergeben

Tabellenblatt an Funktion/Sub übergeben
21.03.2017 13:08:36
Michael
Servus,
selbst nach ewigen Forengesuche, krieg ich mal wieder was nicht gebacken.
Folgendes:
Ich habe mir für eine relativ "komplexe" Aufgabe 2 Makros geschieben (lang in 2 Modulen) und beide funktionieren auch Eigenständig (bisher nur in Extradateien)
Der Ablauf ist wie folgt.
Modul1 Sub1 sortiert und verschiebt Daten in ein Tabellenblat WsEinzel
Innerhalb einer Schleife will ich nun Modul2 Sub2/

Function aufrufen um WsEinzel nochmals zu sortieren.
Jetzt wollte ich einfach das besagte Blatt an Sub2 übergeben aber es läuft einfach nicht.

Sub Sub1()
Dim WsEinzel As Worksheet
Set WsEinzel = Worksheets("Zwischenschritt")
Call Sortieren(ActiveWorkbook.WsEinzel)
End Sub

~f~
---------
~f~
Sub Sortieren(WS1 As Worksheet)
'Sortieren = WS1 brauche ich so etwas vlt?
End Sub
---------
zum aufrufen hab ich jetzt schon alles ausprobiert
Sortieren als

Sub / Function
Aufruf via
- WsEinzel = Sortieren ActiveWorkbook.WsEinzel
- Sortieren ActiveWorkbook.WsEinzel
Vielen Dank für jede Hilfe
VG
Michael


		
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt an Funktion/Sub übergeben
21.03.2017 13:31:05
Mullit
Hallo,
Du hast es eigentlich schon, das ActiveWorkbook muß da weg...
Option Explicit
Sub Sub1()
Dim WsEinzel As Worksheet
Set WsEinzel = ThisWorkbook.Worksheets("Zwischenschritt")
'// mach was mit dem Sheet.....
Call Sortieren(WsEinzel)
End Sub
Sub Sortieren(WS1 As Worksheet)
'// mach noch mehr mit dem Sheet z.B. Zelle A1 auslesen...
MsgBox WS1.Cells(1, 1).Value
End Sub

Gruß, Mullit
Anzeige
AW: Tabellenblatt an Funktion/Sub übergeben
21.03.2017 13:31:09
ChrisL
Hi Michael
Ich glaube du bist schon nahe dran...
Sub Sub1()
Dim WsEinzel As Worksheet
Set WsEinzel = ActiveWorkbook.Worksheets("Zwischenschritt")
Call Sortieren(WsEinzel)
End Sub

Sub Sortieren(WS1 As Worksheet)
With WS1
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
.Sort.SetRange .Range("A2:C4")
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
End Sub

Der Sortier-Code ist als Beispiel zu verstehen.
cu
Chris
Anzeige
AW: Tabellenblatt an Funktion/Sub übergeben
21.03.2017 13:34:32
Michael
Habs hinbekommen, hier die Lsg/Variante dier Vollständigkeit halber
----------
<pre>Sub Sub1()
...
Dim WsEinzel As Worksheet
Set WsEinzel = Worksheets("Zwischenschritt")
...
Set WsEinzel = Sortieren(Sheets("Zwischenschritt"))
...
End Sub</pre>
~f~
------------
~f~
<pre>Function Sortieren(WS1 As Worksheet)
...
Set Sortieren = WS1
End Function</pre>
Anzeige
AW: Tabellenblatt an Funktion/Sub übergeben
21.03.2017 13:37:15
Michael
Hab gerade die Zeitgleichen Antworten gesehen
Vielen Dank für die Unterstützung
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt an Funktion/Sub in Excel übergeben


Schritt-für-Schritt-Anleitung

Um ein Tabellenblatt an eine Funktion oder Sub in VBA zu übergeben, kannst Du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Definiere das Tabellenblatt: Zuerst musst Du das Worksheet-Objekt deklarieren.

    Dim WsEinzel As Worksheet
  2. Setze das Tabellenblatt: Weise das gewünschte Tabellenblatt zu.

    Set WsEinzel = ThisWorkbook.Worksheets("Zwischenschritt")
  3. Rufe die Sub oder Funktion auf: Übergebe das Worksheet-Objekt an die Sub oder Funktion.

    Call Sortieren(WsEinzel)
  4. Definiere die Sub oder Funktion: In der Sub oder Funktion kannst Du das übergebene Worksheet-Objekt verwenden.

    Sub Sortieren(WS1 As Worksheet)
       ' Hier kannst Du mit dem WS1 arbeiten
    End Sub

Häufige Fehler und Lösungen

  • Fehler: ActiveWorkbook verwenden
    Wenn Du ActiveWorkbook verwendest, kann dies zu unerwarteten Ergebnissen führen. Stelle sicher, dass Du ThisWorkbook verwendest, um das aktuelle Workbook anzusprechen.

  • Lösung: Verwende Set WsEinzel = ThisWorkbook.Worksheets("Zwischenschritt").

  • Fehler: Falsche Parameterübergabe
    Wenn Du die Sub oder Funktion nicht korrekt aufrufst, kann es zu Fehlern kommen.

  • Lösung: Achte darauf, dass Du das Worksheet-Objekt korrekt übergibst: Call Sortieren(WsEinzel).


Alternative Methoden

Eine alternative Methode, um mehrere Parameter zu übergeben, ist die Verwendung von ByRef und ByVal in der Parameterliste. Hier ein Beispiel:

Sub Sub1()
    Dim WsEinzel As Worksheet
    Set WsEinzel = ThisWorkbook.Worksheets("Zwischenschritt")
    Call Sortieren(WsEinzel, "A1") ' Übergabe eines zusätzlichen Parameters
End Sub

Sub Sortieren(WS1 As Worksheet, KeyCell As String)
    MsgBox WS1.Cells(1, 1).Value & " sortiere nach " & KeyCell
End Sub

Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie Du ein Tabellenblatt an eine Sub übergibst und es sortierst:

Sub Sub1()
    Dim WsEinzel As Worksheet
    Set WsEinzel = ThisWorkbook.Worksheets("Zwischenschritt")
    Call Sortieren(WsEinzel)
End Sub

Sub Sortieren(WS1 As Worksheet)
    With WS1
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("A1"), Order:=xlAscending
        .Sort.SetRange .Range("A1:C10")
        .Sort.Apply
    End With
End Sub

Tipps für Profis

  • Achte immer darauf, die Option Explicit-Anweisung am Anfang Deines Moduls zu verwenden, um sicherzustellen, dass alle Variablen deklariert sind.
  • Verwende With-Anweisungen, um den Code lesbarer zu machen und die Performance zu verbessern, wenn Du mehrere Aktionen auf dasselbe Objekt anwendest.
  • Vermeide die Verwendung von ActiveWorkbook und ActiveSheet, um Fehlerquellen zu minimieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Parameter an eine Sub übergeben?
Du kannst mehrere Parameter in der Sub-Deklaration angeben, indem Du sie mit Kommas trennst. Beispiel: Sub Sortieren(WS1 As Worksheet, ByVal SortKey As String).

2. Warum funktioniert der Aufruf nicht, wenn ich ActiveWorkbook verwende?
ActiveWorkbook kann auf das falsche Workbook verweisen, insbesondere wenn mehrere Workbooks geöffnet sind. Verwende stattdessen ThisWorkbook, um sicherzustellen, dass Du das richtige Workbook ansprichst.

3. Was ist der Unterschied zwischen ByRef und ByVal?
ByRef übergibt die Referenz auf die Variable, während ByVal eine Kopie des Wertes übergibt. Änderungen an ByRef wirken sich auf die Originalvariable aus, bei ByVal nicht.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige