Thema Datum  Von Nutzer Rating
Antwort
29.03.2011 14:33:51 Mario H
Solved
29.03.2011 14:40:48 Severus
*****
Solved
29.03.2011 14:56:30 Mario H
NotSolved
29.03.2011 16:09:56 Severus
NotSolved
14.04.2011 12:45:47 Mario H
NotSolved
14.04.2011 13:51:41 Severus
NotSolved
14.04.2011 14:23:00 Mario H
NotSolved
14.04.2011 15:03:07 Severus
NotSolved
15.04.2011 10:44:20 Gast61568
NotSolved
15.04.2011 11:38:36 Severus
NotSolved
15.04.2011 13:13:34 Mario H
NotSolved
15.04.2011 18:36:21 Severus
NotSolved
15.04.2011 17:59:48 Mario H
NotSolved
15.04.2011 18:37:41 Severus
NotSolved
16.04.2011 04:54:29 Severus
*****
Solved
21.04.2011 10:43:54 Mario H
NotSolved
Rot Werte aus nebenstehnder Zelle übernehmen
21.04.2011 10:48:45 Mario H
NotSolved
21.04.2011 10:48:46 Mario H
NotSolved
21.04.2011 11:09:06 Serverus
NotSolved
21.04.2011 11:31:09 Mario H
NotSolved
21.04.2011 16:33:17 Severus
NotSolved

Ansicht des Beitrags:
Von:
Mario H
Datum:
21.04.2011 10:48:45
Views:
1429
Rating: Antwort:
  Ja
Thema:
Werte aus nebenstehnder Zelle übernehmen

Oh, das ist wohl was schief gelaufen,

also hier noch einmal verständlich.

Hallo zusammen,

nun kann ich wirklich sagen, dass der Code funktioniert. Ich habe ihn umfangreich getest und habe bis jetzt keine technischen Schwierigkeiten festgestellt. Ein Frage habe ich allerdings noch.Ich habe festgestellt, dass die Berechnung bei ein Änderung mit unter recht lange dauert (bis zu 15 Sekunden). Der Code wird im Moment auf ca. 25 Arbeitsblättern ausgeführt. Kann es sein, dass es daran liegt, dass der Code nun unter DieseArbeitmappe; steht und daher bei jeder Änderung auf allen 25 Arbeitsblättern durchgeführt wird auch wenn die Änderung nur auf einem Arbeitsblatt erfolgt.

Als der Code noch in jedem einzelnen Arbeitsblatt eingetragen war, ging die Berechnung deutlich schneller. Allerdings war sie fehlerhaft (siehe Beiträge zuvor). Nun stellen sich für mich zwei Fragen: 1. Woran liegt es, dass die Berechnung so lange dauert? 2. Gibt es eine Möglichkeit den Code so zu schreiben, dass er effektiver Arbeitet?

Im Moment sieht der Code so aus

Diese Arbeitsmappe:

Private Sub Workbook_open()

' Speichern der aktuellen Werte
Dim rgG As Range, i As Double
 
'Alle M-Zellen
Set rgG = Range("M1:M400")
i = 0
 
For Each C In rgG
    arrG(i) = C.Value
    i = i + 1
Next
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Eingabe Kundendaten" Or Sh.Name = "Eingabe FM-Dienste" Or Sh.Name = "Listen" Or Sh.Name = "Steuerelemente Angaben" Or Sh.Name = "Basistabelle Instandhalten" Or Sh.Name = "Druckbereiche" Or Sh.Name = "Basistabelle Heizenergie" Or Sh.Name = "VonBisWerte" Or Sh.Name = "Tilgungsplan" Then Exit Sub
Application.EnableEvents = False
' Im Tabellenblatt wurde eine Berechnung durchgeführt
Dim i As Double, zeile As Double
zeile = 0
' Übereinstimmung wird geprüft (hat sich was in den M-Zellen geändert?)
For i = 0 To UBound(arrG)
    zeile = i + 1
    ' Wenn gespeicherter Wert ungleich aktueller Wert in M, dann ...
    If arrG(i) <> Cells(zeile, 13) Then
        ' ...: wenn Zelle J = alter Wert M, dann
        If Cells(zeile, 10) = arrG(i) Then
            ' Wertzuweisung J-Zelle und neuer Wert, ...
            arrG(i) = Cells(zeile, 13)
            Cells(zeile, 10) = Cells(zeile, 13)
        Else
            ' ...sonst nur M-Zelle in Array
            arrG(i) = Cells(zeile, 13)
        End If
    End If
Next
Application.EnableEvents = True
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
If Sh.Name = "Eingabe Kundendaten" Or Sh.Name = "Eingabe FM-Dienste" Or Sh.Name = "Listen" Or Sh.Name = "Steuerelemente Angaben" Or Sh.Name = "Basistabelle Instandhalten" Or Sh.Name = "Druckbereiche" Or Sh.Name = "Basistabelle Heizenergie" Or Sh.Name = "VonBisWerte" Or Sh.Name = "Tilgungsplan" Then Exit Sub
Application.EnableEvents = False
' Im Tabellenblatt wurde eine Berechnung durchgeführt
Dim i As Double, zeile As Double
zeile = 0
' Übereinstimmung wird geprüft (hat sich was in den M-Zellen geändert?)
For i = 0 To UBound(arrG)
    zeile = i + 1
    ' Wenn gespeicherter Wert ungleich aktueller Wert in M, dann ...
    If arrG(i) <> Cells(zeile, 13) Then
        ' ...: wenn Zelle J = alter Wert M, dann
        If Cells(zeile, 10) = arrG(i) Then
            ' Wertzuweisung J-Zelle und neuer Wert, ...
            arrG(i) = Cells(zeile, 13)
            Cells(zeile, 10) = Cells(zeile, 13)
        Else
            ' ...sonst nur M-Zelle in Array
            arrG(i) = Cells(zeile, 13)
        End If
    End If
Next
Application.EnableEvents = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Eingabe Kundendaten" Or Sh.Name = "Eingabe FM-Dienste" Or Sh.Name = "Listen" Or Sh.Name = "Steuerelemente Angaben" Or Sh.Name = "Basistabelle Instandhalten" Or Sh.Name = "Druckbereiche" Or Sh.Name = "Basistabelle Heizenergie" Or Sh.Name = "VonBisWerte" Or Sh.Name = "Tilgungsplan" Then Exit Sub
' Weiterhin für manuelle Änderung in J-Zellen
    Dim rC As Range
    Application.EnableEvents = False
    If Not Intersect(Target, Range("M1:M400")) Is Nothing Then
        For Each rC In Target
            If rC.Column = 13 Then
                If rC.Offset(0, -3) = "" Then rC.Offset(0, -3) = rC
            End If
        Next rC
    End If
    If Not Intersect(Target, Range("J1:J400")) Is Nothing Then
        For Each rC In Target
            If rC.Column = 10 Then
                If rC = "" Then rC = rC.Offset(0, 3)
            End If
        Next rC
    End If
    Application.EnableEvents = True
End Sub

Modul:

' Array-Variablen zum Speichern der Werte
Public arrG(65535) As Double

Ich würde mich über Hilfe sehr freuen

Gruß

Mario


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
29.03.2011 14:33:51 Mario H
Solved
29.03.2011 14:40:48 Severus
*****
Solved
29.03.2011 14:56:30 Mario H
NotSolved
29.03.2011 16:09:56 Severus
NotSolved
14.04.2011 12:45:47 Mario H
NotSolved
14.04.2011 13:51:41 Severus
NotSolved
14.04.2011 14:23:00 Mario H
NotSolved
14.04.2011 15:03:07 Severus
NotSolved
15.04.2011 10:44:20 Gast61568
NotSolved
15.04.2011 11:38:36 Severus
NotSolved
15.04.2011 13:13:34 Mario H
NotSolved
15.04.2011 18:36:21 Severus
NotSolved
15.04.2011 17:59:48 Mario H
NotSolved
15.04.2011 18:37:41 Severus
NotSolved
16.04.2011 04:54:29 Severus
*****
Solved
21.04.2011 10:43:54 Mario H
NotSolved
Rot Werte aus nebenstehnder Zelle übernehmen
21.04.2011 10:48:45 Mario H
NotSolved
21.04.2011 10:48:46 Mario H
NotSolved
21.04.2011 11:09:06 Serverus
NotSolved
21.04.2011 11:31:09 Mario H
NotSolved
21.04.2011 16:33:17 Severus
NotSolved