Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 18:25:12
28.04.2024 14:18:05
28.04.2024 13:43:14
Anzeige
Archiv - Navigation
1944to1948
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
Mehrere Variablen deklarieren
27.09.2023 12:50:29
Sandra
Hallo Zusammen,

vor einigen Tagen hatte ich zwei Beiträge gestellt, bei den mir wirklich geholfen wurde.

jetzt stellt sich bei leider die Frage wie ich unterschiedliche Variablen definiere... ich glaub hier kommt Excel irgendwie durcheinander, weil ich diese falsch definiere bzw. gar nicht - ich muss gestehen, dass ich noch nicht so richtig weiß, wie dies funktioniert.

zum einen möchte ich meine vorherige Seite aufrufen-egal auf welcher Seite dies passiert, hierfür habe ich diesen Code bekommen der alleine auch super funktioniert:
Option Explicit
Public OldSheet As String

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
OldSheet = Sh.Name
End Sub

Sub VorherSheet()
On Error Resume Next

Sheets(OldSheet).Activate

End Sub

und dann gibt es noch eine zweite "Aufgabe" die auch verschiedene variable Tabellenblätter aufruft bzw. schließt:
Option Explicit

Private Sub Workbook_Open()
On Local Error GoTo fehlerERR
If Left(ActiveSheet.Name, 5) = "M_FL_Ber" Then
Set wsZiel = ActiveSheet
End If
If InStr(ActiveSheet.Name, "Hyd_") > 0 Or InStr(ActiveSheet.Name, "AF_") > 0 Then
Set wsStart = ActiveSheet
End If
fehlerOUT:
Exit Sub
fehlerERR:
Resume fehlerOUT
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Local Error GoTo fehlerERR
If Left(Sh.Name, 5) = "M_FL_Ber" Then
Set wsZiel = Sh
End If
If InStr(Sh.Name, "Hyd_") > 0 Or InStr(Sh.Name, "AF_") > 0 Then
Set wsStart = Sh
End If
fehlerOUT:
Exit Sub
fehlerERR:
Resume fehlerOUT
End Sub

auch der funktionierte alleine super... aber zusammen funktioniert nix mehr.

Wenn ich hierzu vielleicht eine Erklärung bekommen könnte, was ich falsche gemacht habe, wäre ich euch mal wieder sehr dankbar, damit ich das Sieben-Siegel-variablen -Buch irgendwann mal alleine öffnen kann...

VG
Sandra

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Variablen deklarieren
27.09.2023 15:04:41
onur
Was mir schon mal in diesem Code-Chaos auffällt, ist, dass
If Left(Sh.Name, 5) = "M_FL_Ber"
NIE zutreffen kann, da "M_FL_Ber" ACHT Zeichen lang ist.
Abgesehen davon solltest du auch mal, wenn du schon "Option Explicit" benutzt, alle Variablen deklarieren. bei wsZiel in Workbook_Open() z.B. ist das nicht der Fall.

Was soll das eigentlich mit all den "On Error"´s? Hast du das irgendwo mal gelesen? Sowas braucht man nur, wenn man an einer bestimmten Stelle einen bestimmten Fehler erwartet, aber nicht als "Breitband-Antibiotika" gegen alle möglichen Fehler.
Anzeige
AW: Mehrere Variablen deklarieren
28.09.2023 09:57:02
Sandra
auch Dir danke, aber ich wie ich bereits erwähnte habe ich mit Variablen noch nicht so viel am Hut und versuche das gerade zu verstehen.
Und ja, ich hatte das gelesen, beim einem netten User der mir geholfen hat... und losgelöst voneinander hat alles prima funktioniert. nur eben nicht in Kombination. ich hab beides nach mein Wissenstand zusammengewürfelt und das hat eben nicht mehr funktioniert.
AW: Mehrere Variablen deklarieren
27.09.2023 13:19:49
ralf_b
e geht hier um Abläufe im Excel und die Events, die dabei auftreten. Diese Events werden durch die Eventmakros quasi sichtbar gemacht. du verwendest activate() und deactivate(). Diese events treten direkt nacheinander auf und werden wie hier im Codemodul der Arbeitsmappe benutzt um Variablen zu füllen.
Auf den ersten Blick spricht hier nichts dafür das es Probleme geben sollte. Wenn du in so einem activate makro ein anderes Sheet aktivieren würdest, dann dreht sich das System im Kreis. Sehe ich hier aber nicht.

das Makro VorherSheet würde ein anders Blat aktiveren und die Events auslösen. Aber dieses Makro wird im gezeigten Code nicht aufgerufen.
Durch die vielen "on error resume" -Anweisungen werden einige Fehler versteckt und man sieht nicht wo der Fehler wirklich auftritt.
Anzeige
AW: Mehrere Variablen deklarieren
28.09.2023 09:54:08
Sandra
@ralf_b danke für die Erläuterung
AW: Mehrere Variablen deklarieren
27.09.2023 16:42:21
Ulf
Im Workbook-Code:


Option Explicit
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
OldSheet = Sh.Name
End Sub

Private Sub Workbook_Open()
On Local Error GoTo fehlerERR
If Left(ActiveSheet.Name, 5) = "M_FL_Ber" Then
Set wsZiel = ActiveSheet
End If
If InStr(ActiveSheet.Name, "Hyd_") > 0 Or InStr(ActiveSheet.Name, "AF_") > 0 Then
Set wsStart = ActiveSheet
End If
fehlerOUT:
Exit Sub
fehlerERR:
Resume fehlerOUT
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Local Error GoTo fehlerERR
If Left(Sh.Name, 5) = "M_FL_Ber" Then
Set wsZiel = Sh
End If
If InStr(Sh.Name, "Hyd_") > 0 Or InStr(Sh.Name, "AF_") > 0 Then
Set wsStart = Sh
End If
fehlerOUT:
Exit Sub
fehlerERR:
Resume fehlerOUT
End Sub

In einem allgemeinen Modul:
Option Explicit


Public OldSheet As String
public wsQuelle as Worksheet
public wsZiel as Worksheet

Sub VorherSheet()
On Error Resume Next
Sheets(OldSheet).Activate
End Sub

hth
Ulf
Anzeige
AW: Mehrere Variablen deklarieren
28.09.2023 10:00:04
Sandra
Hallo Ulf, danke, dass Du Dir immer solche Mühe machst. Ich muss in diesem Bereich wohl noch viel lernen.
Das mit dem "Zurück auf das vorherige Blatt" funktioniert sehr gut. Aber wie kann ich das Makro auf den Button legen, um auf das Variable Blatt - also das vorletzte Blatt- zu kommen?!
besten Dank schonmal und entschuldige.
Sandra
AW: Mehrere Variablen deklarieren
28.09.2023 11:17:52
Ulf
Im allgemeinen Modul:


Public OldSheet As String
public wsQuelle as Worksheet
public wsZiel as Worksheet

Sub VorherSheet()
On Error Resume Next
Sheets(OldSheet).Activate
End Sub

Sub Von()
On Error Resume Next
wsQuelle.Activate
End Sub

Sub Nach()
On Error Resume Next
wsZiel.Activate
End Sub

Die wie erwähnt fehlerhafte Zeile:


Left(Sh.Name, 5) = "M_FL_Ber"

ändern in


Left(Sh.Name, 8) = "M_FL_Ber"

that' it
hth
Ulf
Anzeige
AW: Mehrere Variablen deklarieren
28.09.2023 12:44:16
Sandra
es tut mir wirklich leid Ulf, ich hab alles so eingetragen wie Du es mir geschrieben hast, aber wenn ich den Button betätige der mich zu M_FL_Ber bringen soll, dann bekomme ich die Fehlermeldung: Objektvariable oder With-Blockvariable nicht festgelegt.

Ich kapier es einfach nicht...
AW: Mehrere Variablen deklarieren
28.09.2023 12:47:08
onur
Solange die Variablen nur deklariert werden aber keinen Wert zugewiesen bekommen, sind die nur leere Hüllen !
AW: Mehrere Variablen deklarieren
28.09.2023 13:23:14
ralf_b
wenn du es exakt so gemacht hast dann dürfte es keine wsQuelle als Variable geben bzw sie nicht gefüllt sein. Eigentlich heisst diese Variable wsStart.
AW: Mehrere Variablen deklarieren
28.09.2023 13:52:45
Sandra
ich hab die variable in wsStart geändert, aber der Fehler bleibt.
Anzeige
AW: Mehrere Variablen deklarieren
28.09.2023 14:13:33
ralf_b
ausgehend von deine bisherig mitgeteilten Kenntnissen bedeutet "ich hab die variable in wsStart geändert, aber der Fehler bleibt." genau was? Ein paar mehr Details sollten es schon sein. Es sitzt ja Keiner von uns neben dir.

AW: Mehrere Variablen deklarieren
29.09.2023 09:04:30
Sandra
Hallo Ralf_b,
also so sieht zur Zeit mein Code aus:
Arbeitsmappe:

Option Explicit
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
OldSheet = Sh.Name
End Sub

Private Sub Workbook_Open()
On Local Error GoTo fehlerERR
If Left(ActiveSheet.Name, 8) = "M_FL_Ber" Then
Set wsZiel = ActiveSheet
End If
If InStr(ActiveSheet.Name, "Hyd_") > 0 Or InStr(ActiveSheet.Name, "AF_") > 0 Then
Set wsStart = ActiveSheet
End If
fehlerOUT:
Exit Sub
fehlerERR:
Resume fehlerOUT
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Local Error GoTo fehlerERR
If Left(Sh.Name, 8) = "M_FL_Ber" Then
Set wsZiel = Sh
End If
If InStr(Sh.Name, "Hyd_") > 0 Or InStr(Sh.Name, "AF_") > 0 Then
Set wsStart = Sh
End If
fehlerOUT:
Exit Sub
fehlerERR:
Resume fehlerOUT
End Sub

im allgemein Modul

Public OldSheet As String
'Public wsQuelle As Worksheet
Public wsZiel As Worksheet
Public wsStart As Worksheet ' dies habe ich hinzugefügt

Sub VorherSheet()
On Error Resume Next
Sheets(OldSheet).Activate
End Sub

Sub Von()
On Error Resume Next
wsStart.Activate ' hier habe ich es entsprechend geändert
End Sub

Sub Nach()
On Error Resume Next
wsZiel.Activate
End Sub

und ich möchte auf der einen Seite, dass von einem Tabellenblatt über einen Button ein anderes aufgerufen wird. dann über ein Zurück-Button auf das vorherige Blatt zurück gesprungen wird. Dies funktioniert auch.

Die zweite Sache, die ich gern umsetzen möchte ist, dass ich von einem Tabellenblatt (welche mit Hdy_, mit AF_ anfangen kann) über einen Button auf die Seite M_FL_Ber komme, hier habe ich wieder rum einige Button (das ist gewünscht) mit denen ich die Unterschiedlichen Flächenberechnungsseiten aufrufen kann (M_FL_K oder M_FL_R oder oder... hier habe ich 19 Stück von). Auf diesen Seiten soll der Anwender dann seine Flächenberechnung ausführen können und mit einem Button zu seiner Startseite Hyd_; AF_) zurückkommen soll.

ich bin jetzt davon ausgegangen, dass ich über die Aktivierung der Button die Variablen irgendwie anstupse...
denn als ich beide Aufgaben einzeln ausprobiert habe, hat alles funktioniert.

VG
Sandra

Anzeige
AW: Mehrere Variablen deklarieren
29.09.2023 12:18:15
ralf_b
sofern ich dich richtig verstanden habe benötigst du 3 Ziele?
1 Berechnungsblatt = fester Name = keine Variable nötig
2 anwendereigenes Startblatt = kann im workbook open gesetzt werden, bleibt dann immer gleich
3 verlassenes Blatt ( sh aus dem deactivate)

das folgen Maro dürfte doch für das Berechnungsblatt reichen. ohne besondere dynamisch gefüllte Variable. das Berechnungsblatt ist doch immer gleich ,oder?


Sub zuBer()
On Error Resume Next
Sheets("M_FL_Ber").Activate
End Sub


wenn du im deactivate() makro bist, dann ist sh das verlassene Blatt also reicht es dort aus die "von" variable zu füllen, um eine Sprungmarke zum vorherigen Blatt zu erhalten.
im activate ist sh das gerade aktivierte blatt. Hier eine Variable zu setzen macht keinen Sinn, da du den wechsel mittels button ja schon erledigt hast und somit weist wohin die reise gehen soll bevor das activate() überhaupt stattfindet.


Anzeige
AW: Mehrere Variablen deklarieren
29.09.2023 12:34:01
Sandra
Danke Ralf...
zu "1 Berechnungsblatt = fester Name = keine Variable nötig" - das funktioniert schon.

aber die zweite Situation wo ich zu dem vorletzten variablen Blatt möchte funktioniert nicht.

Das Berechnungsblatt ist leider nicht immer gleich.

also angenommen ich bin auf tabellenblatt Hyd_ (variable) und möchte eine entsprechende Fläche ausrechnen, dann betätige ich einen Button und komme zu M_FL_Ber (diese ist immer gleich)
Auf dem Tabellenblatt M_FL_Ber befinden sich ca. 12 Button die auf die jeweiligen Tabellenblätter springen. Z.B. Flächenberechnung Dreieck, Fläche Rechteck... usw.

Und von diesen möchte ich wieder zurück zu Hyd_ (was aber auch AF_ , oder Gerinne sein kann)
Also muss ich doch wenigstens mein Ausgangsblatt und die Flächenberechnungsseiten als variable deklarieren oder?

Es tut mir wirklich leid, vielleicht kapiere ich es auch einfach nicht.
Anzeige
AW: Mehrere Variablen deklarieren
29.09.2023 12:49:03
Sandra
Ich hab jetzt nochmal was ausprobiert:
hiermit komme ich auf die Auswahlseite:

Sub Von()

Set AltesTabellenblatt = ActiveSheet
Sheets("M_FL_Ber").Visible = True
Sheets("M_FL_Ber").Activate
End Sub


damit komme ich von der Flächen berechnung auf meine Ausgangseite:

Sub Nach()
If Not AltesTabellenblatt Is Nothing Then AltesTabellenblatt.Select
End Sub

Das klappt jetzt.

Aber jetzt geht der andere BEfehl nicht mehr, wo ich nur auf die vorherige Seite möchte:
im modul:
Sub VorherSheet()
On Error Resume Next
Sheets(OldSheet).Activate
End Sub

in der Arbeitsmappe:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
OldSheet = Sh.Name
End Sub

Ich verstehe nicht warum das jetzt hackt, es sind doch nicht die gleichen Namen...
Anzeige
AW: Mehrere Variablen deklarieren
29.09.2023 12:51:52
Sandra
ok, jetzt funktioniert es. sorry. auch ein blindes Huhn findet ein Korn.
Danke Ralf du hast mir den Denkanstoß gegeben. Jetzt habe ich es auch ein wenig mit den Variablen kapiert.
Danke, danke...
Lösung?
29.09.2023 13:05:34
ralf_b
deine Lösung ist hier also noch nicht sichtbar. Zeig sie uns und anderen Hilfesuchenden. Sonst funktioniert so ein Forum nicht mehr.
AW: Lösung?
29.09.2023 13:17:38
Sandra
Meine Lösung:
um mein vorheriges Blatt zu deklarieren:
Modul Arbeitsmappe:
Option Explicit
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
OldSheet = Sh.Name
End Sub
im allgemeinen Modul:

Public OldSheet As String

mit button ausgelöst:

Sub VorherSheet()
On Error Resume Next
Sheets(OldSheet).Activate
End Sub


um zum vorletzten Tabellenblatt zu kommen:

im allgemeinen Modul:
mein Tabellenblatt Hyd_ (und andere wird deklariert)

Option Explicit
Public AltesTabellenblatt As Worksheet

über Button ausgelöst: zur Auswahlseite Flächenberechnung
Sub Von()

Set AltesTabellenblatt = ActiveSheet
Sheets("M_FL_Ber").Visible = True
Sheets("M_FL_Ber").Activate
End Sub

Und zurück zum Ausgangsblatt:

Sub Nach()

If Not AltesTabellenblatt Is Nothing Then AltesTabellenblatt.Select
End Sub

danke nochmal an alle... auch für eure Geduld.

168 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige