Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Direkt auf Speicher des Blatts zugreifen...

Direkt auf Speicher des Blatts zugreifen...
20.01.2007 21:11:55
windalf
Hoi @ll,
ich habe mal folgende Frage. Des öfteren bastel ich mir mal eine kleine Funktion die mir das eine oder andere abnimmt in VBA...
Problem dabei ist, wenn man nun große Ranges hat (also der eigenen Funktion große Ranges übergibt. Man kann diese zwar in ein Variantarray einlesen und dann darauf weiterarbeiten aber wenn man die Funktion dann x mal aufruft wird ja jedes mal des spreicher zugemüllt. Jetzt könnte man auch beim öffnen der Datei ein das ganze array public anlegen und einlesen aber was mir noch lieber ist. Ist es möglich direkt auf den Speicher der beim öffnen der Exceldatei geladen wurde.
Das Blatt liegt doch eh schon einmal im Speicher. Warum also erst irgend eine Range in ein gewünschtes Array reinkopieren statt direkt auf dem Speicher zu arbeiten. Ist das (nur lesend) möglich und wenn ja wie
Bisher arbeite ich meist so in der Art....
Function myfunc(....) As Wasauchimmer
' in etwa in der Art.
With ws
vntArray = .Range(.Cells(2, 1), _
.Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Value
End With
'...
EndFunction
Wie macht man das schlauer?
Danke Gruß Windi

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Direkt auf Speicher des Blatts zugreifen...
21.01.2007 12:01:31
Nepumuk
Hallo Windi,
was meinst du, was du machst, wenn du diese Zeile ausführst:
A = Range("A1")
Du schreibst einen Wert aus einer Speicheradresse in eine andere.
Mit Range("A1") nimmt dir Excel doch nur die mühsame Berechnung einer Speicheradresse und das umrechnen von binären Code in Ascii - Zeichen ab. Direktes lesen und schreiben im Arbeitsspeicher ist zudem nur per API oder Assembler möglich. Ich habe früher in Assembler programmiert, das war viel mühsamer als mit VB.
Gruß
Nepumuk
AW: Direkt auf Speicher des Blatts zugreifen...
21.01.2007 12:32:29
fcs
Hallo windi,
statt die Daten in ein Array einzulesen kannst du auch direkt auf die Daten des Tabellenberiches zugreifen, indem du einem Range-Objektvariablen den entsprechenden Tabellenbereich zuweist.
Auf die Werte des Bereichs kannst du dann genauso zugreifen wie auf die Werte eines Arrays, wobei die Zählung für Spalten und Zeilen der Zellen in einem Range-Objekt jeweils bei 1 beginnt. Dabei kannst du den Bereich (falls konstant) als Parameter übergeben oder innerhalb der Function als Via Set-Anweisung einer Variablen zuweisen.
Beispiel:

Function myfunc(strBlatt As String, Test) As Variant
Dim ws As Worksheet, Bereich As Range
Set ws = Worksheets(strBlatt)
With ws
Set Bereich = .Range(.Cells(2, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count))
End With
'Beispiele
myfunc = Application.WorksheetFunction.VLookup(Test, Bereich, 4, False)
For Zeile = 1 To Bereich.Rows.Count
If Bereich(Zeile, 1) = Test Then
myfunc = Bereich(Zeile, 4)
End If
Next
End Function
By the way: Die Verwendung von .Cells(.UsedRange.Rows.Count,.UsedRange.Columns.Count)
zur Bestimmung der letzten verwendeten Zelle funktioniert nur korrekt,
wenn Zeile 1 und Spalte A Daten enthalten.
Immer korrekt funktioniert folgende Variante:
.Cells(.UsedRange.Row + .UsedRange.Rows.Count - 1, _
.UsedRange.Column + .UsedRange.Columns.Count - 1))

Gruss
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige