Anzeige
Archiv - Navigation
1016to1020
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

Workbook_SheetCalculate + 0effnen neue Datei

Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 16:52:25
Peter
Guten Tag
Mit untenstehendem Code wird die Zeilenhöhe eines verbundenen Zellbereiches innerhalb der Datei "Beispiel" gesteuert. Ursprünglich stand am Anfang nicht "ThisWorkbook.Activate" - doch wenn ich eine neue Datei geöffnet habe, blieb der Code hängen, weil der neue Workbook aktiv war (und dann der Range("Beurteilung") nicht vorhanden war). Das ist nun nicht mehr der Fall.
Das Problem ist, dass nun beim Oeffnen eines neuen Workbooks gleich wieder in die Datei "Beispiel" gewechselt wird.
Wie löse ich das Problem, dass nicht immer wieder die Datei "Beispiel" angesprungen wird, wenn ich eine neue Datei öffne?
Danke für eine Antwort.
Gruss, Peter

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
ThisWorkbook.Activate
With Application
.ScreenUpdating = False
With Range("Beurteilung")
If Len(.Value) 


11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 17:18:00
Tino
Hallo,
also habe dies getestet, bei mir wird dass Ereignis nicht durch eine andere geöffnete Datei ausgelöst.
Hier mal eine mögliche Lösung.
Option Explicit

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
 Dim Tabelle As String
 Dim Zelle As String

Zelle = Replace(ThisWorkbook.Names(1).RefersToLocal, "=", "")
Tabelle = Left$(Zelle, InStr(Zelle, "!") - 1)
Zelle = Replace(Zelle, Tabelle & "!", "")
 
 If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Sub
 With Application
     .ScreenUpdating = False
      
          With ThisWorkbook.Sheets(Tabelle).Range(Zelle)
             If Len(.Value) < 200 Then
               .RowHeight = 27.75
             Else
               .RowHeight = 42
             End If
          End With
        .ScreenUpdating = True
    End With

End Sub


Gruß Tino

Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 17:26:58
Peter
Hallo Tino
Vielen Dank.
Ich habe in der Zwischenzeit den eigentlichen Code in ein Modul verlegt und rufe von den zwei betroffenen Tabellen diesen auf. Da ich zum Teil 6 verschiedene Zeilenhöhen brauche, habe ich auf Select Case umgestellt. Allerdings funktioniert das nicht und ich verstehe auch nicht weshalb. Deshalb versuchte im Code einen Haltepunkt zu setzen, doch da passiert gar nichts.
Kann ich hier nicht mit Select Case arbeiten - oder was ist da schief?
Danke für eine Rückmeldung.
Gruss, Peter
Option Explicit

Private Sub SheetCalculate(ByVal Sh As Object)
Call Zeilen_adjustieren
End Sub


Option Explicit


Private Sub Zeilen_adjustieren()
ThisWorkbook.Activate
With Application
'.ScreenUpdating = False
With Range("BeurteilungE")
Select Case Len(.Value)
Case Is > 200
.RowHeight = 42
Case Is > 60
.RowHeight = 27.75
Case Else
.RowHeight = 14.25
End Select
End With
With Range("BeurteilungO")
Select Case Len(.Value)
Case Is > 200
.RowHeight = 42
Case Is > 60
.RowHeight = 27.75
Case Else
.RowHeight = 14.25
End Select
End With
'   .ScreenUpdating = True
End With
End Sub


Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 17:22:00
Luschi
Hallo Peter,
versuch es mal so:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim rg As Range
With Application
.ScreenUpdating = False
Set rg = ThisWorkbook.Names("Beurteilung").RefersToRange
With rg
If Len(.Value) 

Ich habe mit dem Ausdruck Range("Beurteilung") keine guten Erfahrungen gemacht.
Deshalb benutze ich diese Variante: ThisWorkbook.Names("Beurteilung").RefersToRange
Gruß von Luschi
aus klein-Paris

AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 17:52:00
Peter
Hallo Luschi
Das hat mein Problem gelöst. Vielen Dank. Die Frage ist nun noch, wenn ich 6 verschiedene Varianten von Zeilenhöhen brauche, ob ich dies nicht mit Select Case lösen soll, da die if else Verschachtelungen übersichtlich werden. Wenn ja, wie muss ich das mit Select Case anstellen?
Gruss, Peter
Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 18:12:29
Tino
Hallo,
diese Zelle mit RefersToRange direkt anzusprechen war mir auch neu, man lernt nie aus!
Aber mit Case wirst Du nicht weit kommen.
Eine Schleife wäre vielleicht angebrachter.
Hier werden die Namen Beurteilung1 bis Beurteilung6 angesprochen
Nicht getestet!
 Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Dim rg As Range
  Dim A As Integer
  
  With Application
     .ScreenUpdating = False
      For A = 1 To 6
         Set rg = ThisWorkbook.Names("Beurteilung" & A).RefersToRange
         With rg
            If Len(.Value) < 200 Then
              .RowHeight = 27.75
            Else
              .RowHeight = 42
            End If
         End With
      Next A
      .ScreenUpdating = True
  End With
 End Sub


Gruß Tino

Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 18:19:00
Peter
Hallo Tino
Vielen Dank. Das werde ich austesten - wäre hilfreich. Ich habe allerdings an eine andere Schleife gedacht. Und zwar habe ich 7 verschiedene Zeilenhöhen (je nach Textlänge) - hier habe ich eine elegantere Lösung gesucht als die if - else Verschachtelung.
Gruss, Peter
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 18:24:00
Tino
Hallo,
ach so für jeden Bereich eine bestimmte höhe, dies geht natürlich mit Case… und Schleife.
 Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Dim rg As Range
  Dim A As Integer
  Dim iHeKl As Integer, iHeGr As Integer
  
  With Application
     .ScreenUpdating = False
      For A = 1 To 6
         Set rg = ThisWorkbook.Names("Beurteilung" & A).RefersToRange
       
       Select Case A
        Case 1: iHeKl = 27.5: iHeGr = 42
        Case 2: iHeKl = 28.5: iHeGr = 43
        Case 3: iHeKl = 29.5: iHeGr = 44
        Case 4: iHeKl = 30.5: iHeGr = 45
        Case 5: iHeKl = 31.5: iHeGr = 46
        Case Else: iHeKl = 32.5: iHeGr = 47
       End Select
         
         With rg
            If Len(.Value) < 200 Then
              .RowHeight = iHeKl
            Else
              .RowHeight = iHeGr
            End If
         End With
      
      
      Next A
      .ScreenUpdating = True
  End With
 End Sub


Gruß Tino

Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 18:29:46
Tino
Hallo,
Fehler, die Deklarierung muss auf

Dim iHeKl As Single, iHeGr As Single


geändert werden, wegen der Nachkommastellen
PS. heute ist nicht mein Tag.
Gruß Tino

AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 18:37:00
Peter
Hallo Tino
Danke für die schnelle Rückmeldung.
Kleines Missverständnis ist da noch vorhanden.
Sagen wir ich habe die sechs Bereiche "Beurteilung1", ..... "Beurteilung6"
In jedem dieser Bereiche (verbundene Zellen) ist es möglich, dass die Zeilenhöhe auf 14 (bei Textlänge bis kleiner 30), 28 (bei Textlänge bis kleiner 60), 42 (bei Textlänge bis kleiner 90), 56 (bei Textlänge bis kleiner 120), 70 (bei Textlänge bis kleiner 150) oder 84 (bei Textlänge ab 150) geändert werden muss.
Wäre super, wenn du mir da weiterhelfen könntest.
Gruss, Peter
Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
15.10.2008 18:43:00
Tino
Hallo,
für verschiedene Länge, müsste es so gehen.
Die Werte hier sind Phantasiewerte!
Microsoft Excel Objekt DieseArbeitsmappe
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
  Dim rg As Range 
  Dim A As Integer 
  Dim sngHe As Single 
   
  With Application 
     .ScreenUpdating = False 
      For A = 1 To 6 
         Set rg = ThisWorkbook.Names("Beurteilung" & A).RefersToRange 
        
        With rg 
            Select Case Len(.Value) 
              Case Is < 10: sngHe = 15 
              Case Is < 20: sngHe = 20 
              Case Is < 50: sngHe = 22 
              Case Is < 150: sngHe = 30 
              Case Is < 175: sngHe = 35 
              Case Else:: sngHe = 42 
             End Select 
               
              .RowHeight = sngHe 
           
         End With 
       
       
      Next A 
      .ScreenUpdating = True 
  End With 
 End Sub 
 


Gruß Tino

Anzeige
AW: Workbook_SheetCalculate + 0effnen neue Datei
16.10.2008 10:02:00
Peter
Hallo Tino
Das klappt so perfekt, vielen Dank!
Gruss, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige