Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Set oWS = oWB.Worksheets(Range("link").Parent.Name

Betrifft: Set oWS = oWB.Worksheets(Range("link").Parent.Name von: Peter
Geschrieben am: 03.07.2008 22:50:28

bei Worksheet Deactivate

https://www.herber.de/bbs/user/53575.xls

Guten Abend
Ich habe vor einigen Tagen die Frage im Forum platziert, weshalb ein bestimmter Code nicht ausgeführt werden kann. Da ich keine weiterführende Antwort erhalten habe, habe ich die entsprechende Datei ziemlich verkleinert, um sie hochladen zu können.

Beim Deaktivieren des Workbooks will ich die Berechnung auf einer bestimmten Tabelle (hier mit Namen "Jahresrechnung") ausschalten. Die Tabellenbezeichnung kann ändern - enthält jedoch immer einen mit "Link" benannten Bereich.
Deshalb wollte ich beim untenstehenden Sub Workbook_Deactivate den Namen via Range("link").Parent.Name ermitteln.
Wenn ich nun den Workbook verlasse, indem ich einen neuen Workook erstelle, erhalte ich den Laufzeitfehler '1004': Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen, beim Debuggen wird die Zeile Set oWS = oWB.Worksheets(Range("link").Parent.Name) angesprungen. Wenn ich anstelle dessen mit 'Set oWS = oWB.Worksheets("Jahresrechnung") arbeite, funktioniert der Code tadellos.

Weshalb funktioniert die erste Variante mit Ermittlung des Tabellennamens über den Range "Link" nicht?

Danke für eine Antwort.

Gruss, Peter

Private Sub Workbook_Deactivate()
Dim oWB As Workbook
Dim oWS As Worksheet
Set oWB = ThisWorkbook
Set oWS = oWB.Worksheets(Range("link").Parent.Name)
'Set oWS = oWB.Worksheets("Jahresrechnung")
'Berechnung ausschalten
Application.StatusBar = ""
oWS.EnableCalculation = False
Menü_Löschen
End Sub


  

Betrifft: schreib Parent.Name in eine Variable von: Matthias L
Geschrieben am: 04.07.2008 00:21:00

Hallo

keine Ahnung ob ich richtig liege.
Ungetestet;

Private Sub Workbook_Deactivate()
Dim oWB As Workbook
Dim oWS As Worksheet
Dim sTrg As String
sTrg = Range("link").Parent.Name
MsgBox sTrg 'Test
Set oWB = ThisWorkbook
Set oWS = oWB.Worksheets(sTrg)
MsgBox oWS.Name 'Test
'Set oWS = oWB.Worksheets("Jahresrechnung")
'Berechnung ausschalten
Application.StatusBar = ""
oWS.EnableCalculation = False
Menü_Löschen
End Sub



probiers mal den Namen in einer Variablen sTrg zu speichern

Gruß Matthias


  

Betrifft: AW: schreib Parent.Name in eine Variable von: Peter
Geschrieben am: 04.07.2008 07:18:51

Hallo Matthias
Danke für die Antwort. Leider ist das nicht die Lösung. Nun hängt er bei der Zeile
sTrg = Range("link").Parent.Name
Es scheint, dass bei Workbook_Deactivate aus einem benannten Bereich mit Parent.Name der Sheet Name nicht abgeleitet werden kann. Ist ein zusätzlicher Parameter notwendig? Denn interessanterweise greift VBA mit Parent.Name schon auf die neu ausgewählte Datei zu. Denn wenn die neue Datei zufälligerweise auch den gleichen benannten Bereich hat, liefert msgbox den entsprechenden Tabellennamen der neu angewählten Datei zurück.
sTrg = Range("link").Parent.Name
MsgBox sTrg 'Test

Gibt es andere Lösungsansätze?

Gruss, Peter


  

Betrifft: im Moment keine weitere Idee von: Matthias L
Geschrieben am: 04.07.2008 08:01:08

Hallo

Sorry, im Moment hab ich keinen weiteren Plan.
Sollte sich doch noch was ergeben, meld ich mich.

Matthias


  

Betrifft: AW: im Moment keine weitere Idee von: ypsilon
Geschrieben am: 04.07.2008 09:13:42

hi,
probierts mal so:

Set oWS = oWB.Worksheets(Names("Link").RefersToRange.Parent.Name)

cu Micha


  

Betrifft: klappt nicht ! von: Matthias L
Geschrieben am: 04.07.2008 09:27:04

Hallo,

Da Du auf meinen Beitrag antwortest, hier eine Rückmeldung:

Hast Du es probiert?
Öffne die Datei mit diesem Code und danach eine andere beliebige Datei.
Damit wird Workbook1 deaktiviert und der Code greift.

Nun kommt LaufzeitFehler 1004.

Gruß Matthias


  

Betrifft: AW: klappt nicht ! von: Peter
Geschrieben am: 04.07.2008 09:39:06

Hallo Matthias
Mein Code sieht nun wie nachstehend aus und ich konnte den bei dir auftretenden Fehler nicht "nachbilden".

Gruss, Peter

Private Sub Workbook_Deactivate()
Dim sTrg As String
Dim oWB As Workbook
Dim oWS As Worksheet
Set oWB = ThisWorkbook
Set oWS = oWB.Worksheets(Names("Link").RefersToRange.Parent.Name)
Application.StatusBar = ""
oWS.EnableCalculation = False
Menü_Löschen
End Sub




  

Betrifft: AW: klappt nicht ! von: ypsilon
Geschrieben am: 04.07.2008 09:50:46

hi Matthias,
warum das bei dir nicht funktioniert, weiss ich nicht aber ich habe es selbstverständlich probiert und bei Peter scheint es ja auch zu klappen
cu Micha


  

Betrifft: AW: klappt nicht ! von: Jürgen
Geschrieben am: 04.07.2008 10:04:31

Hallo Matthias,

ich habe es gerade ausprobiert - es klappt!?!

Gruß, Jürgen

P.S.: Sicherheitshalber könntest Du auch beim Zugriff auf den Namen das Workbook angeben, also:
Set oWS = oWB.Worksheets(oWB.Names("Link").RefersToRange.Parent.Name)
aber wie gesagt - bei mir funktionierte die Lösung auch so!


  

Betrifft: @all dann ist doch alles Bestens :o) oT von: Matthias L
Geschrieben am: 04.07.2008 10:25:44




  

Betrifft: AW: im Moment keine weitere Idee von: Peter
Geschrieben am: 04.07.2008 09:31:48

Hallo Micha
Das ist GROSSARTIG, denn es funktioniert.
Manchmal möchte man ja gerne wissen, weshalb des eine funktioniert und das andere nicht.
Aber diese Frage blende ich jetzt aus.

Vielen Dank und Gruss, Peter