Microsoft Excel

Herbers Excel/VBA-Archiv

Formelberechnung erst nach Workb. close / Wb. open | Herbers Excel-Forum


Betrifft: Formelberechnung erst nach Workb. close / Wb. open von: Alex
Geschrieben am: 24.02.2009 11:46:29

Hallo Leute,

bin am verzweifeln...

hab schon die ganze Recherche durch.

Ich habe 2 fast identisch aufgebaute Dateien (kann ich nicht hochladen; bin auf Arbeit; Webmaster blockt).

bei meiner Problemdatei habe ich ein Blatt "Übersicht", in dem alle Daten aus den anderen Tab. (ca. 150) zusammen kommen. (per Formel: Summenprodukt, Wenn usw.)

Wenn ich ein (alle Tab. sind in Urform vorgefertigt) Tab. für eine neue Person erstelle (teilw. per Makro),
und in diesem Tab dann änderungen vornehme, rechnen die Formeln in "Übersicht" nicht. Erst wenn ich in
die Formel klicke und mit Return raus. (Durch das Umbenennen des Tab. ändert sich die Formel in "Übersicht"! Daran liegt es nicht.)

Oder ich schließe das WB. und öffne neu, dann gehts auch.

Das komische:
Bei der nahezu identischen Datei funzt alles reibungslos (Autom. Berechnung).

Einstellungen:
Extras-Optionen-Berechnung-automatisch ist ein
Optionen in Makros:
Option Application.ScreenUpdating = True
Enable Calculation = True

Weiss nicht mehr weiter.

In der Recherche hatten schon einige dieses Problem, nur für mich waren keine Lösungen dabei.

Danke für evtl. Rat,

Gruss
alex

  

Betrifft: AW: Formelberechnung erst nach Workb. close / Wb. open von: Renee
Geschrieben am: 24.02.2009 12:48:32

Hi Alex,

Das versteh ich nicht:
Optionen in Makros:
Option Application.ScreenUpdating = True
Enable Calculation = True


Weder die erste Zeile noch die zweite machen in VBA Sinn.
Wenn dein restlicher Code auch so aussieht, dann wundert mich nix mehr.
Werden die Dinger auch aktualisiert, wenn du F9 drückst ? Oder dann auch nicht.
Wenn nicht ev. die Formatierung der Zellen mit den neuen Formeln überprüfen.

GreetZ Renée


  

Betrifft: AW: Formelberechnung erst nach Workb. close / Wb. open von: Alex
Geschrieben am: 24.02.2009 13:22:03

Hi Renèe,

kenn mich auch nich mehr aus, habe alles versucht (oben genannte Codezeilen) was nur irgendwie helfen könnte.

Hier hab ich mal einen Gesamtcode abgebildet in dem die Codezeilen dabei sind.

Erklärung:

dieser Code bewirkt, dass ich ein vorher bestehendes Tab. (durch Eintrag in Zelle A4 des Tab.) umbenenne,
der neue Tab-Name in einer Auflistung erscheint, die dann alph. Sortiert wird;
dann werden die Tab. alph. Sortiert und gut.

Hab die versch. Codes meiner beiden Dateien schon verglichen. Die eine berechnet Formeln sofort, die schlechte erst...wie vorher beschrieben.

Hier der Code:

Sub AuflistungUndSheetsSortieren()
'Blattname aus Zelle des Blattes
Dim Blatt As Object         'Blattname aus Zelle des Blattes
Dim i As Long, j As Long        'Auflistung aller Tabellen so wie ihre momentane Reihenfolge  _
ist
Dim x As String                 'Auflistung aller Tabellen so wie ihre momentane Reihenfolge  _
ist
Dim all As Long                 'Auflistung aller Tabellen so wie ihre momentane Reihenfolge  _
ist
Dim shArray()                   'Auflistung aller Tabellen so wie ihre momentane Reihenfolge  _
ist
    Dim WsW As Worksheet         '   Register sortieren       ' Variable für Tabelle
    Dim InI As Integer           '   Register sortieren       ' Schleifenvariable
    Dim InJ As Integer           '   Register sortieren       ' Schleifenvariable

'sheets sichtbar machen
Application.ScreenUpdating = False
For InI = Sheets.Count To 1 Step -1
Sheets(InI).Visible = True
Next InI
Application.ScreenUpdating = True

'Blattname aus Zelle des Blattes
On Error Resume Next
For Each Blatt In ActiveWorkbook.Worksheets
'"Übersicht" ; "Grundformular" ; "ListeHäufigerEintragungen" ; "Übersicht Schießen"
    If Blatt.Name <> "Übersicht" And _
        Blatt.Name <> "Grundformular" And _
        Blatt.Name <> "ListeHäufigerEintragungen" And _
        Blatt.Name <> "Übersicht Schießen" Then
            
            With Blatt
            If .Cells(4, 1) <> "" Then
            .Name = .Cells(4, 1) 'zelle A4 (1.Spalte,4.Zeile)
            Else
            .Name = "zzz" & .CodeName
            End If
            End With
    End If
Next Blatt

Sheets("Übersicht Schießen").Unprotect "red13"
Sheets("Übersicht Schießen").Select
Selection.AutoFilter Field:=1
'Auflistung (in Spalte C) aller Tabellen so wie ihre momentane Reihenfolge im Workbook ist
all = ThisWorkbook.Worksheets.Count
ReDim shArray(5 To all)
On Error Resume Next
For i = 5 To all    '5 to all = ab dem Blatt das momentan auf Platz 5 liegt
x = ThisWorkbook.Sheets(i).Name
shArray(i) = x
Next i

For j = LBound(shArray) To UBound(shArray)
Sheets(4).Cells(j + 1, 3) = shArray(j)     'C...ab wohin die Namen in Übersicht Schießen  _
geschrieben werden j + 1 = 2.Zeile, 3 = 3.Spalte
Next j

'alphab. Sortierung Übersicht Schießen ab C6 - S153
Sheets("Übersicht Schießen").Select

    Range("C6:S153").Select
    Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("J1").Select
Sheets("Übersicht Schießen").Protect "red13", DrawingObjects:=True, Contents:=True, Scenarios:= _
True

     
'   Register sortieren
    Application.ScreenUpdating = False                          ' Bildschirmaktualisierung aus
    Set WsW = ActiveSheet                                       ' aktuelle Tabelle auf Variable  _
schreiben
    For InI = 5 To ActiveWorkbook.Worksheets.Count
        For InJ = InI To ActiveWorkbook.Worksheets.Count
            If Worksheets(InJ).Name < Worksheets(InI).Name Then
                Worksheets(InJ).Move Before:=Worksheets(InI)
            End If
        Next InJ
    Next InI
    WsW.Activate                                                ' Tabelle selektieren, die beim  _
Start des Makro aktiv war
    Set WsW = Nothing                                           ' Variable leeren
    Application.ScreenUpdating = True                           ' Bildschirmaktualisierung ein
  
  'sheets unsichtbar machen außer Übersicht
  For InI = Sheets.Count To 1 Step -1
    If LCase(Sheets(InI).Name) <> LCase("Übersicht") Then
      Sheets(InI).Visible = False
    End If
  Next InI
  Application.EnableEvents = True
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True

Sheets("Übersicht").Select
Sheets("Übersicht").Protect "red13", DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("A5").Select

End Sub



Danke für dein Interesse,
alex


  

Betrifft: AW: Formelberechnung erst nach Workb. close / Wb. open von: Renee
Geschrieben am: 24.02.2009 13:56:17

Hi Alex,

An dem Code seh ich im Moment nix, dass die Berechnung beeinflussen könnte, ausser das ,ot Application.Calculation = xlCalculationAutomatic der Berechnungsmodus auf automatisch gesetzt wird, obwohl er vorher nie auf manuell gesetzt wurde. Ev. geschieht das in einem anderen Makro oder einer Event-Prozedur. Zudem sehe ich mehrere On Error Resume Next, die mir suspekt sind.

Du hast aber nicht auf meine konkrete Frage geantwortet: Werden die Dinger auch aktualisiert, wenn du F9 drückst (statt in die Zelle zu gehen und Enter drücken) ?

GreetZ Renée


  

Betrifft: AW: Formelberechnung erst nach Workb. close / Wb. open von: Alex
Geschrieben am: 24.02.2009 14:22:12

Hi Renèe,

wenn ich F9 (und; ich gehe doch richtig in der Annahme, nur F9 drücken) dann meldet Statusleiste kurz "berechnet Zellen", aber die Verknüpfung zum neuen Tab. (Formeln sind korrekt!) rechnet nicht.

Wie gesagt, nur wenn ich Tab. "Übersicht" entsperre und in die Formel & aus der Formel klicke; oder
Datei (bevor! ich in das neu benannte Tab etwas eintrage) die Datei schließen, wieder öffnen; dann
erkennt die Formel in "Übersicht..." jede Eintragung im neuen Tab. und berechnet auch.

Das ist genau wie bei einigen Forum - Usern (aus Recherche): berechnet nur wenn in die Formel gegangen wird.

Zellen sind ( im Vergleich zur anderen, ähnlich aufgebauten Datei) bei Zahlen in Zahl formatiert, bei Text auf Standart.

Die eine geht, die andere nicht!

Baaaaahh!

gruss
alex