Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1312to1316
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
Inhaltsverzeichnis

Exel Array Geschwindigkeit

Exel Array Geschwindigkeit
16.05.2013 12:13:01
Dirk
Hi,
ich hab mir da ein kleines VBA Programm in Excel geschrieben welches mir aus einem Blatt einen Bereich heraus liest und auf ein anderes wieder schreibt.
Doch beim Schreiben brauch Excel zu lange!
Alp() gibt nur ein Buchstaben zurück welche auch über eine For-Schleife aus einem Blatt heraus gelesen wir. (1-Dimensionales Array)
Hier mal der Code zum heraus lesen:

Public Function f45lpz(ByVal a, ByVal b As Integer) As String
Dim g(3, 25) As String
Dim c, d, e, f As Integer
f = 0
For e = 1 To 25 'Zeile
d = 0
For c = 3 To 6 'Spalte
g(d, f) = Worksheets("DB-PM-Module").Range(Alp(c) & e)
d = d + 1
Next
f = f + 1
Next
f45lpz = g(a, b)
End Function

Und hier der Code Welcher mir ihn wieder schreibt

Public Sub f45lpzort()
Dim a, b, c, d As Integer
c = 0   'Array Zeile
d = 0   'Array Spalte
For b = 1 To 24
For a = 1 To 3
Select Case a
Case 1: Range(Alp(a) & b) = f45lpz(d, c) & f45lpz(a, c)
Case 2: Range(Alp(a) & b) = f45lpz(a, c)
Case 3: Range(Alp(a) & b) = f45lpz(a, c)
End Select
Next
c = c + 1
Next
End Sub

Was mache ich da falsch bin schon darauf gekommen das ich die For-Schleife bei jedem Schreibvorgang wieder neu aufrufe doch habe ich keinen Schimmer wie ich das Array an die Function übergeben könnte. Wenn es überhaupt daran liegt :)

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Exel Array Geschwindigkeit
16.05.2013 12:39:50
Matze
Hallo Dirk,
bin nicht der Experte, aber eventuell hilft es die Events aus/ein zuschalten.
Public Sub f45lpzort()
Dim a, b, c, d As Integer
Application.EnableEvents = False
....
Next
Application.EnableEvents = True
Matze

AW: Exel Array Geschwindigkeit
16.05.2013 12:46:54
Dirk
Hab ich Versucht, doch leider hilft das nix
Private Sub test()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Call f45lpzort
With Application
.ScreenUpdating = True
End Sub

AW: Exel Array Geschwindigkeit
16.05.2013 12:50:21
Matze
Hallo Dirk,
dann solltest du uns eventuell zeigen was genau dein Vorhaben ist,
ist schon ein wenig verwirrend mit den vielen Variablen.
Rudi hat dir schon was geschrieben,...ich hab spät bin jetzt wech.
Mach eine Musterdatei , dann hier einstellen, dann wird vieles deutlicher, oder?
Matze
Viel Spaß noch beim knobeln

Anzeige
AW: Exel Array Geschwindigkeit
16.05.2013 12:41:33
Rudi
Hallo,
unverständlich.
Ein Array kannst du doch einfach so festlegen:
DasArray=Range("A1:D25")
Gruß
Rudi

AW: Exel Array Geschwindigkeit
16.05.2013 12:49:29
Dirk
hmm, Danke werde ich mal Ausprobieren klingt auch logisch >_ Somit läuft er nicht die Schleife immer und immer wieder durch...

Rudi hat ja indirekt schon geschrieben, dass ...
16.05.2013 13:15:35
Luc:-?
…unsinnig ist, was du da machst, Dirk;
außerdem hast du auch noch den langsamsten „Schleifen“-Typ gewählt und wasweißich noch für Hindernisse eingebaut, so dass daraus eher ein Hürdenlauf-Pgm geworden ist. Und das alles nur, um ein „klassisches“ xlVBA-Array zu füllen, obwohl es doch noch die andere (quasi auch von Rudi benutzte), in den allermeisten modernen PgmierSprachen übliche DatenfeldForm gibt (dort dann meist ein Objekt), die hier als ein Variant mit einem Array erscheint. So etwas kann auch besser gehandhabt wdn, wenn man es geschickt macht (auf Office-Loesung hatte ich dazu mal längere Ausführungen gemacht, evtl auch hier im Archiv verlinkt).
Gruß Luc :-?

Anzeige
AW: Rudi hat ja indirekt schon geschrieben, dass ...
16.05.2013 13:42:20
Dirk
Sorry das ich nochmal frage doch,
Wie gibt man denn ein Variant da aus?
Wenn ich Dim Test (999,999) as String definiere
und sage Test = F45LPZ
klappt das auch nicht da ich keine Datenfelder auf Datenfelder übergeben darf oO
Aber mein Datenfeld, Strings sowie Integer enthält.
Public Sub f45lpzort()
Dim F45LPZ As Variant
F45LPZ = Worksheets("Test").Range("A1:B4")
MsgBox F45LPZ("A1")
End Sub
So bin ich außerhalb des Gültigen Bereiches...

AW: Rudi hat ja indirekt schon geschrieben, dass ...
16.05.2013 13:48:20
Rudi
Hallo,
da ich keine Datenfelder auf Datenfelder übergeben darf
Unsinn.
Public Sub f45lpzort()
Dim F45LPZ As Variant, Test as Variant
F45LPZ = Worksheets("Test").Range("A1:B4")
Test=F45LPZ
MsgBox F45LPZ(1,1)
MsgBox Test(1,1)
End Sub
Gruß
Rudi
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige