Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
464to468
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
464to468
464to468
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

public array row-column-problem

public array row-column-problem
11.08.2004 07:44:11
sandy
Hallo
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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: public array row-column-problem
Luschi
Hallo Sandy,
in Deinen Makros ist ein großer logischer Fehler enthalten. Beim Aktivieren der Tabelle
wird der gesamte Bereich in das Array eingelesen. Das geschieht nach meinen Tests spaltenweise; also:
A1, A2, A3, ... , A24, B1 usw.
Beim Ändern einer Zelle (z.B. "B1") setzt Du mit sRange = ("a1:" & Target.Address)
folgenden Bereich zusammen:
sRange = ("A1:B1") und erhälts als Anzahl der Zellen die 2.
Dannt holst Du Dir den 2. Indexwert aus dem Array (also aus "A2") und addierst ihn
mit dem gerade eingegebenen Wert aus "B2".
Der Indexwert für B2 ist aber 25!!!.
Ich teste noch ein bischen und versuche eine Lösung zu finden.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: public array row-column-problem
Luschi
Hallo Sandy,
hier der Coce für das Worksheet_Change - Ereignis:
Public

Sub Worksheet_Change(ByVal Target As Range)
Dim i, j, adr1, adr2, ok As Boolean
If Target.Column <= 6 Then
adr1 = ""
adr2 = ""
'Adreßbereich in adr2 zusammensetzen, _
gilt nur für den Bereich "A1:F24"
For i = 65 To 70
ok = False
If i > 65 Then
adr2 = adr2 & ","
End If
adr2 = adr2 & "$" & Chr(i) & "$" & "1"
For j = 1 To 24
adr1 = "$" & Chr(i) & "$" & j
If adr1 = Target.Address Then
adr2 = adr2 & ":" & adr1
ok = True
Exit For
End If
Next j
If ok Then
Exit For
Else
adr2 = adr2 & ":" & "$" & Chr(i) & (j - 1)
End If
Next i
'Ende Adreßbereich zusammensetzen
icells = (Range(adr2).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

Gruß von Luschi
aus klein-Paris
Anzeige
AW: public array row-column-problem
11.08.2004 12:13:13
sandy
Hallo Luschi,
ja da hatte ich wirklich einen Denkfehler - Danke für deine große Mühe und gute Erklärung
Hab da jetzt noch ne andere Lösung, ist zwar nicht so variabel wie deine, aber tut auch.
Viele Grüsse, sandy
Public

Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer             'Schleifenzähler für die Zeilen
Dim iCol As Integer
If Target.Column > 6 Then
Exit Sub
Else
sRange = ("a1:" & Target.Address)
End If
'Debug.Print sarray(icells) ' alter Zellwert
iCol = Range(sRange).Columns.Count 'columns bis zum Target
iRow = Range(sRange).Rows.Count 'Zeilen bis zum Target
icells = iCol * 24 - (24 - iRow) 'Gesamtzellenanzahl bis target - zellen in der      angebrochenen Spalte
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("h1").Select
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige