OT anzahl geöffn. Mappen in Excel, Put Msgbox
Hallo Rainer,
Ebenfalls nicht getestet, aber der Debugger wid sicher bei
Zeilen_in_Exceltabelle rummotzenJa logisch, das ist ja auch Pseudocode.
Wie Du von Excel
die Anzahl der gefüllten zeilen bekommst, weiß ich doch nicht,
das war nur ein Hinweis für Dich, was da hin gehört.
Axo, manchmal sehe ich die dicke Kartoffel nicht
)
Mit Sicherheit richtig, aber schau mal meine Frage:
@Zodan, willst du eigentlich als Endergebnis Textfiles für
jede Frequenz, oder gleich Exceldateien?Die frage ist natürlich berechtigt, Zodan schreibt ja, daß er
Textfiles nur in Betracht gezogen hat, weiß er nicht weiß, wie
man Excel-Files schreibt.
Ja, aber ich wurde in dem Punkt unsicher weil er von FSO und vbarchiv usw. spricht.
Ich habe jetzt eine reine Excellösung, die direkt alle Dateien eines Ordners nacheinander öffnet, dann pro Frequenz die entsprechende Zeile in die entsprechende Frequensdatei (gibt 250 Stück davon) schreibt.
Aber Zodan macht da wohl jetzt FSO, naja, warte ich mal ab.
250 Frequenzen, eine Tabelle zum lesen … kannst Du in Excel
251 Tabellenblätter gleichzeitig öffnen? …
Ja, ist nur vom Speicher und den Systemressourcen abhängig, letztlich nur vom verfügbaren Speicher, erschöpfte Sytemressourcen sind nur Belastung für die Nerven wenn man 1000 Arbeitsmappen beim Aufbauen zellenweise zuschauen kann
Dauert dann halt lange.
Diese Info gilt für XL97-XL2003.
Da dieser Thraed sowieso unübersichtlich geworden ist und nur noch wenige Unentwegte hier mitlesen antworte ich mal hier , bzw. setze hier unsre Beitragsfolge fort.
Ich weiß jetzt warum ich immer eine Satzlänge hatte, egal ob ich 2,3,4 Messwerte hatte bei
Type Satz
Frequenz as Single
Messwerte(4)
End Type
Wenn ich mit Binaray eine datei öffne, die es nicht gibt, wird sie angelegt. Schreibe ich einen Satz rein, so hat sie mit dem obigen Type 24 Bytes.
Nun habe ich die 4 geändert, auf 3,2 o.ä. und sie wieder Binary geöffnet, dann wurde zwar brav der Satz reingeschrieben, aber die Dateigröße blieb gleich groß.
Kill-Befehl vor dem Öffnen und alles klappt so wie von dir gesagt in Richtung Byteanzahl.
Beim Nachprüfen irritiert mich dieser Put-Befehl.(Annahme Satz hat 20 bytes) und Dim f(a) as Satz gilt,so ergibt
put #1,f() 20 Bytes Dateigröße
put #1,1,f() 20 Bytes Dateigröße
put #1,2,f() 21 Bytes Dateigröße
put #1,100,f() 120 Bytes Dateigröße
(können auch +/- 1 sein, schreibs grad auswendig)
also pro Datensatznummer kommt ein Byte dazu, wozu, was ist das für ein Byte, die Datensatznummer kanns nicht sein, denn bei
put #1,1000,f() kommt 1020 Bytes Dateigröße raus!?
Gibt es in VB einen MemoryFree- bzw. auch MemoryUsed-Befehl?
In Excel-Vba soll MemoryFree angeblich laut Hilfe den Speicherplatz in Byte angeben den Excel noch nutzen könnte, MemoryUsed den byteplatz den Ecel schon belegt.
Das kann aber so nicht stimmen oder ich übersehe etwas bei Redim.
Sub nn()
Dim c As Double
MsgBox Application.MemoryUsed 'je nach Rechner unterschiedlich
MsgBox Application.MemoryFree 'bei 2 Rechnern immer 1048675
ReDim a(Application.MemoryFree) As String * 10
a(1) = „1234567890“
MsgBox UBound(a)
MsgBox Application.MemoryFree
MsgBox Application.MemoryUsed
Dim b
End Sub
Die ausgegebenen Werte sind immer die gleichen, egal ob zwischendurch a dimensioniert wird. Da ich ja a(1) mit Werten belege, muß das m.E. in einem Speicherbereich geschehen, der nicht von Memoryused überwacht wird *rätsel*
Hat VB eine MsgBox-Anweisung bzw. kannst du dir hierauf einen Reim machen:
Sub nn2()
Dim c As Double
c = 120000000 'klappt problemlos
MsgBox c
c = 10 * 12000
MsgBox c ’ ergibt Laufzeitfehler 6, Überlauf !?
End Sub
Nachfolgend meine ersten Gehschritte mit CopyMemory. Du hattest Recht, mein erster Ansatz um Arrays umzustellen war von der Logik her falsch. Aber um Arrays zu manipieren ist Copymemory äußerst brauchbar.
Und dein Tipp Copymemory erstmal nur mit String-Variablen zu testen war Gold wert, erst dadurch kam ich soweit daß das überhaupt mal klappte.
Ich muß nur noch herausfinden, warum „ByVal“ da so wichtig ist. Wenn man es fälschlicherweise wegläßt oder fälschlicherweise benutzt, kommt entweder der Debugger, oder man muß Excel neu starten da es im Bruchteil von Sekunden verschwunden ist.
Aber kann man ja auch benutzen, warum langwierig programmieren wie man Excel beendet ohne zu speichern, geht so recht easy und sehr schnell *gg*
Wie an den Codes ersichtlich, muß das wohl an den Variablentypen irgendwie liegen, aber das muß ich noch genauer austesten.
Übrigens, es zwang dich keiner bis hierher zu lesen und gar gleich gar noch mit diesen von mir aufgeführten Herausforderungen rumzutesten *lächel*
Auch in diesem Sinne Danke ^ Gruß
Reinhard
Sub ff()
Dim a(5, 3) As Single, b As Single
Call CopyMemory(ByVal b, ByVal a(2, 1), 4)
MsgBox b
End Sub
'
Sub ff2()
Dim a(5, 3) As Satz, b As Satz
Call CopyMemory(b, a(2, 1), 16)
MsgBox b.Frequenz
MsgBox b.Messwert(1)
End Sub
'
Sub ff3()
Dim a(5, 3) As Satz, b(3) As Satz, N, nn
For N = 0 To 3
Call CopyMemory(b(N), a(2, N), 10)
MsgBox b(N).Frequenz
For nn = 0 To 3
MsgBox b(N).Messwert(1)
Next nn
Next N
End Sub