public array row-column-problem
11.08.2004 07:44:11
sandy
beim Öffnen der mitgeschickten arbeitsmappe(von Nepumuk angelegt) wird das worksheet in einem array gespeichert. Wenn man dann eine Zelle im sheet verändert, wird diese Zahl zu der vorhergenden Zahl in der Zelle im array dazuaddiert und dann an die entsprechende stelle im sheet zurückgeschrieben. Allerdings wird an manchen Positionen falsch gerechnet. Z.Bsp bei D8 oder E8
Ich glaube das liegt daran, daß das array in row,column angegeben wird und excel aber mit column,row arbeitet. Eigentlich wollt ich das umgehn, indem ich die Zellen(icells) bis zum Target zähle und dem Index im array gleichsetze, aber irgendwie gehts so net.
Noch ne prinzipielle frage, ich hatte zu dem worksheet_change schon mal en thread aufgemacht, hätte ich diese frage eher unter den gleichen thread schreiben sollen oder ist das egal ?
Viele Grüsse, sandy
https://www.herber.de/bbs/user/9484.xls
Für alle die, die die mappe nicht speichern wollen hier der code :
Option Explicit
Option Base 1
Public
Sub Worksheet_Activate()
Dim iIndex As Integer 'Zähler für den Index
Dim iRow As Integer 'Schleifenzähler für die Zeilen
Dim iCol As Integer 'Schleifenzähler für die Spalten
iIndex = 1
sRange = "A1:F24" ' Range festlegen
' Die Anzahl der Zellen ermitteln
icells = Range(sRange).Cells.Count
' Das Array per Redim dimensionieren
ReDim Preserve sarray(icells)
'nun über alle Zeilen und Spalten die Werte ins Array einlesen
For iCol = 1 To Range(sRange).Columns.Count
For iRow = 1 To Range(sRange).Rows.Count
sarray(iIndex) = Range(sRange).Cells(iRow, iCol).Value
iIndex = iIndex + 1
Next
Next
Debug.Print sarray(1)
End Sub
Public
Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 6 Then
Exit Sub
Else
sRange = ("a1:" & Target.Address)
'Debug.Print sarray(icells) ' alter Zellwert
icells = (Range(sRange).Cells.Count) ' Anzahl der Zellen bis zum Target
Debug.Print sarray(icells) ' alter Zellwert
sarray(icells) = sarray(icells) + Target.Value 'neuer Zellwert
Application.EnableEvents = False
Target.Value = sarray(icells)
Application.EnableEvents = True ' neuen Zellwert ins Sheet übertragen
Range("g1").Select
End If
End Sub