Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie kann ich ActiveSheet durch eine Variable erset

Wie kann ich ActiveSheet durch eine Variable erset
27.02.2019 11:33:18
Albert
Ich habe ein Macro mit diversen Funktionen und Sub Macros geschrieben, welche alle das "ActiveSheet.--" arbeiten. Grundsätzlich läuft das alles, aber ich möchte nun im ganzen Code "ActiveSheet.---" durch eine Variable "myActiveSheet.---" ersetzen und bekomme das nicht hin, bekomme entweder Compile- oder Runtime-Fehler.
Public myActiveSheet As Worksheet ' das ActiveSheet wird hier sichergestellt
Sub Main()
myActiveSheet = createTestSheet(ActiveSheet.Name) ' erstellt eine Arbeitskopie
UsedRangeRows = myActiveSheet.UsedRange.Rows.Count ' verwendet die Arbeitskopie
...
End Sub
Public Function createTestSheet(Optional myTestSheet As String) As Worksheet
If sheetExists("myTestSheet") Then
Application.DisplayAlerts = False
Sheets("myTestSheet").Delete
Application.DisplayAlerts = True
End If
If Not myTestSheet = Empty Then
Sheets(myTestSheet).Activate
End If
ActiveSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "myTestSheet"
Set createTestSheet = ActiveSheet
End Function

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie kann ich ActiveSheet durch eine Variable erset
27.02.2019 15:45:46
Rudi
hallo,
mir ist schleierhaft, was du beabsichtigst.
Eine Function ist dazu gedacht, WERTE zurückzugeben und nicht irgendwelche Aktionen durchzuführen.
Option Explicit
Public myActiveSheet As Worksheet
Sub Aufruf()
Call CreateTestSheet(Tabelle1, "BlaBla")
MsgBox myActiveSheet.Name
End Sub
Public Sub CreateTestSheet(wksSource As Worksheet, _
Optional strWksTest As String = "myTestSheet")
Dim wks As Worksheet
'Bereits vorhanden?
On Error Resume Next
Set wks = Sheets(strWksTest)
On Error GoTo 0
'löschen falls vorhanden
If Not wks Is Nothing Then
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
End If
'Kopieren und umbenennen
wksSource.Copy after:=wksSource
Set myActiveSheet = ActiveSheet
myActiveSheet.Name = strWksTest
End Sub

Gruß
Rudi
Anzeige
Wie kann ich ActiveSheet durch eine Variable ersez
27.02.2019 17:01:49
Albert
Ok ich versuch's zu erklären:
Ich habe eine Verarbeitung geschrieben, welche bisher ActiveSheet. --- verwendet hat. Beim Testen ist es mir aber ein paar mal passiert, dass ich unbeabsichtigt das ActiveSheet beim Betrachten der Zwischenergebnisse verändert habe, damit fallen die Macros natürlich alle auf den Sack. Deshalb möchte ich überall wo jetzt ActiveSheet.--- verwendet wird, dieses durch eine Variable z.B. myActiveSheet.--- ersetzen, welche ich Anfang aufbereite.
Vorher: UsedRangeRows = ActiveSheet.UsedRange.Rows.Count
Nachher: UsedRangeRows = myActiveSheet.UsedRange.Rows.Count
Ganz am Anfang meiner Verarbeitung steht der Aufruf des Makros createTestSheet() welches sich in meinem .xlam befindet. Da meine Verarbeitung das ActiveSheet irreversibel verändert, wird automatisch für das beim Aufruf der Verarbeitung aktive Sheet (es kann aus verschiedenen Arbeitsblättern aufgerufen werden) eine Kopie erstellt, diese Kopie zum AktiveSheet gemacht und dann die Verarbeitung auf dieser Kopie durchgeführt. Damit ich frei bin bei der Vergabe eines Names für die Kopie, möchte ich das ActiveSheet aus der Funktion, welche die Arbeitskopie erstellt an die Verarbeitung zurückgeben.
Also:
- Wie muss die Variable in der Verarbeitung definiert sein (Worksheet, Object, Variant, etc)
- Wie muss diese Variable aus der Funktion createTestSheet zurückgegeben werden
Ich möchte wenn es geht im bestehenden Code einfach ActiveSheet mit Search & Replace durch myActiveSheet ersetzen .
Anzeige
AW: Wie kann ich ActiveSheet durch eine Variable ersez
27.02.2019 22:19:08
fcs
Hallo Albert,
ich würde es wie folgt umsetzen.
ggf. reicht es auch das "Set " in Zuweisung des erstellten Blatts zur Variablen einzufügen.
LG
Franz

Public myActiveSheet As Worksheet ' das ActiveSheet wird hier sichergestellt
Sub Main()
Set myActiveSheet = createTestSheet(wksTest:=ActiveSheet)  ' erstellt eine Arbeitskopie
If myActiveSheet Is Nothing Then Exit Sub
UsedRangeRows = myActiveSheet.UsedRange.Rows.Count ' verwendet die Arbeitskopie
End Sub
Public Function createTestSheet(wksTest As Worksheet, _
Optional myTestSheet As String = "myTestSheet") As Worksheet
If LCase(wksTest.Name) = LCase(myTestSheet) Then
MsgBox "Aktives Blatt hat den Namen """ & myTestSheet & """." & vbLf _
& "Testblatt kann nicht erstellt werden!"
Exit Function
End If
If sheetExists(myTestSheet) Then
Application.DisplayAlerts = False
ActiveWorkbook.Sheets(myTestSheet).Delete
Application.DisplayAlerts = True
End If
wksTest.Copy After:=wksTest
Set createTestSheet = ActiveSheet
createTestSheet.Name = myTestSheet
End Function

Anzeige
Ich kann meine Funktion aus myAddins.xlam nicht au
28.02.2019 08:41:16
Albert
Hallo Franz
Hat funktioniert, die einzige Änderung an meinem Code war:
Sub Main()
Set myActiveSheet = createTestSheet(ActiveSheet.Name) ' erstellt eine Arbeitskopie
UsedRangeRows = myActiveSheet.UsedRange.Rows.Count ' verwendet die Arbeitskopie
End Sub
Allerdings würde ich es gerne noch verstehen. Die Zuweisung erfolgte ja auch schon in der Funktion createTestSheet. Normalerweise reicht es ja, wenn das Resultat der Funktion einer Variablen zugewiesen wird( myActiveSheet = createTestSheet ...).
Wie kann ich ActiveSheet durch eine Variable erset
28.02.2019 08:44:19
Albert
Sorry - mein Betreff wird jedes mal wieder ausgewechselt wenn ich was schreibe :(
Anzeige
AW: Wie kann ich ActiveSheet durch eine Variable erset
01.03.2019 20:09:07
fcs
Hallo Albert,
gibt eine Funktion Werte zurück (Zahlen, Text, Daten-Array etc.) dann funktioniert die einfache Wertzuweisung zur Variablen per "=".
Gibt die Funktion als Ergebnis ein Objekt zurück -in deinem Fall ein Tabellenblatt- dann muss die Zuweisung zur Variablen erfolgen mit
Set ObjektVariable = Objekt
LG
Franz

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige