Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1028to1032
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

Anzahl von Modulen beschränkt?

Anzahl von Modulen beschränkt?
03.12.2008 20:27:00
Modulen
Hallo Wissende,
mit nachstehendem Code (Aufruf durch ModuleErzeugen) versuche ich die Bytes einer beliebigen Binär-Datei in der Mappe selbst zu speichern.
Unerfülltes Endziel ist dann mittels "Put" die Bytes in eine Datei auf einem Fremdrechner zu schreiben und diese dann zu "starten"
Zweck des Ganzen, eine Excelmappe zu haben, die auf Fremdrechnern z.B. einen Flash ablaufen zu lassen und das ohne dabei seperat die dazu notwendige swf-Datei mit zu versenden.
Da, soweit ich weiß, die Modulgröße maximal 64KB beträgt, die Datei um die es geht aber 500KB erzeuge ich halt viele Moduel, die dann immer eine Prozedur nach diesem Muster haben:

Function Prog0() As String
Prog0 = Prog0 & Chr(67)
Prog0 = Prog0 & Chr(87)
Prog0 = Prog0 & Chr(83)
Prog0 = Prog0 & Chr(6)
Prog0 = Prog0 & Chr(10)
usw.
End Function


Jetzt habe ich erstens keinen genauen Plan wie ich in einer Schleife alle Prozeduren/Funktionen aufrufe um dann mit "Put" das Ergebniss immer an eine neue swf-Datei "anzuhängen".
Sehr erschwerend kommt dazu, mein Code läüft nur bis zum 422ten Modul, dann ist Schluß.
Welche Limitationen werden da verletzt?
pro Modul gibt es ca 1000 Einträge a 27 Bytes
also 27 KB
422 Module a 27 KB ergeben ca. 12000 KB
das ist keine mir bekannte Grenze!?
Danke für jeden Hinweis,Tipp,Lösung, wie ich das Problem lösen kann.
Ich habe auch schon probiert, jedes Byte der swf-datei in eine Zelle zu schreiben, diese Zellen dann auszulesen und in eine Datei zu schreiben, das klappt, ist aber grottenlangsam :-(
Gruß
Reinhard


Option Explicit
'Declare Sub CopyMemory Lib "kernel32.dll" _
'            Alias "RtlMoveMemory" ( _
'            Destination As Any, _
'            Source As Any, _
'            ByVal Length As Long)
Public txt As String, Block() As String, Anz As Integer
Sub ModuleErzeugen()
' Verweis auf Microsoft Visual basic for Applications Extensibility 5.3 setzen!
Dim N As Integer, NN As Long, vbComp As VBComponent, Zei As Long
Call ModuleLoeschen
'Exit Sub
Call tt
For N = 0 To UBound(Block)
Set vbComp = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
vbComp.Name = "mdlTeil" & N
With vbComp.CodeModule
.InsertLines .CountOfLines + 1, "Function Prog" & N & "() As String"
For NN = 1 To Len(Block(N))
.InsertLines .CountOfLines + 1, "Prog" & N & " = Prog" & N & " & Chr(" & Asc(Mid(Block( _
N), NN, 1)) & ")"
Next NN
.InsertLines .CountOfLines + 1, "End Function"
End With
Application.StatusBar = N & " / " & UBound(Block)
Next N
End Sub
Sub ModuleLoeschen()
Dim mdl As VBComponent
With ThisWorkbook.VBProject
For Each mdl In .VBComponents
If mdl.Name Like "mdlTeil*" Then .VBComponents.Remove mdl
Next mdl
End With
End Sub
Sub tt()
Dim Dat As String, FF As Long, Platz As Long
Dat = "H:\europeanchampionship2008\europeanchampionship2008.swf"
FF = FreeFile
Platz = FileLen(Dat)
Open Dat For Binary As #FF
txt = Input(Platz, #FF)
Close #FF
Call Teilen(txt, 1000)
End Sub
Sub Teilen(ByVal txt As String, Laenge As Long)
Dim N As Long, NN As Long
For N = 1 To Len(txt) Step Laenge
ReDim Preserve Block(Anz)
Block(Anz) = Mid(txt, N, Laenge)
Anz = Anz + 1
Next N
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anzahl von Modulen beschränkt?
03.12.2008 22:19:00
Modulen
Hallo Reinhard,
an der "Größe" deines Codes kann das nicht liegen ich hab in einer Mappe ~ 90.000 Zeilen Code das sind mit Userforms zusammen rund 4MB. Die 64KB sind aber nicht pro Modul, sondern pro Prozedur. Ich hab in manchen Modulen über 10.000 Zeilen Code (natürlich nicht in einer Prozedur). Hast du schon mal überlegt, das ganze als Arrays unter Namen zu speichern? Da hast du pro Namen 5.460 Einträge frei. Ich hab jetzt mal zum Testen 5.000 dieser Arrays angelegt. Null Problemo. Bei über 8.000 steigt Excel dann aus wg. Arbeitsspeicher. Die Mappe hat anschließend auch fast 400MB. :-)
Userbild
Gruß
Nepumuk
Anzeige
AW: Anzahl von Modulen beschränkt?
05.12.2008 08:25:00
Modulen
Hallo Nepumuk,
danke dir erstmal, ich probiere es jetzt mit mehr Prozeduren pro Modul, das traue ich mir zu, da muß ich ja nur leicht meinen Code abändern.
::::Hast du schon mal überlegt, das ganze als Arrays unter Namen zu speichern?::::
Nein. Ich weiß nämlich nicht wie ich das machen müßte.
Wie macht man das?
Gruß
Reinhard
AW: Anzahl von Modulen beschränkt?
05.12.2008 08:56:00
Modulen
Hallo Reinhard,
Beispiel:
Public Sub ArraytoName()
    Dim vntArray(1 To 260, 1 To 21) As Variant, i
    vntArray(1, 1) = "A.A.A.A"
    vntArray(1, 2) = "B.B.B.B"
    vntArray(1, 3) = 12345
    For i = 1 To 10
        Names.Add Name:="MyName" & i, RefersTo:=vntArray, Visible:=False
    Next
End Sub

Public Sub NametoArray()
    Dim vntArray As Variant
    vntArray = [MyName1]
    MsgBox vntArray(1, 1) & vbLf & vntArray(1, 2) & vbLf & vntArray(1, 3)
    vntArray = [MyName2]
    MsgBox vntArray(1, 1) & vbLf & vntArray(1, 2) & vbLf & vntArray(1, 3)
End Sub

Gruß
Nepumuk
Anzeige
Binärdaten in Excel speichern
05.12.2008 09:54:39
Reinhard
Hallo Nepumuk,
danke dir, da wäre ich nicht darauf gekommen.
Als du "Namen" schriebst dachte ich schon an Einfügen--Namen usw, aber das man da auch einen Bezug auf ein Array machen kann war mir nicht klar.
Dein Code klappt natürlich, leider scheint er nur mit reinem Text zu funktionieren :-(
Versuche ich mit deinem Code Bnärdaten in einem Namen zu speichern, so werden nur die ersten paar Bytes gespeichert, wahrscheinlich beim Zeichen 10, 13 oder 0 bricht die Speicherung ab.
Wie speichere ich denn nun viele Binärdaten in Excel dauerhaft irgendwie ab?
Sinn ist, auf einen Fremdrechner nur die Exceldatei aufzuspielen. Ein Makro liest dann die Binärdaten in der Mappe aus und erstellt vor Ort z.B. wieder eine swf-Datei daraus.
In der Public Variablen Txt habe ich ja alle Binärdaten nach dem Code:

Sub tt()
Dim Dat As String, FF As Long, Platz As Long
Dat = "H:\europeanchampionship2008\europeanchampionship2008.swf"
FF = FreeFile
Platz = FileLen(Dat)
Open Dat For Binary As #FF
txt = Input(Platz, #FF)
Close #FF
End Sub


Danke ^ Gruß
Reinhard

Anzeige
AW: Binärdaten in Excel speichern
05.12.2008 10:19:00
Nepumuk
Hallo Reinhard,
du kannst natürlich auch ein Byte-Array als Name speichern.
Gruß
Nepumuk
AW: Binärdaten in Excel speichern
05.12.2008 15:34:50
Reinhard
Hallo Nepumuk,
das kriege ich leider nicht hin, bis jetzt zumindest.
Gruß
Reinhard
AW: Binärdaten in Excel speichern
05.12.2008 15:48:59
Nepumuk
Hallo Reinhard,
wieso?
Public Sub ArraytoName()
    Dim bytArray(1 To 260, 1 To 21) As Byte
    Dim lngIndex As Long
    bytArray(1, 1) = 0
    bytArray(1, 2) = 1
    bytArray(1, 3) = 2
    For lngIndex = 1 To 10
        Names.Add Name:="MyName" & CStr(lngIndex), RefersTo:=bytArray, Visible:=False
    Next
End Sub

Public Sub NametoArray()
    Dim vntArray As Variant
    Dim lngIndex As Long
    vntArray = [MyName1]
    MsgBox vntArray(1, 1) & vbLf & vntArray(1, 2) & vbLf & vntArray(1, 3)
    vntArray = [MyName2]
    MsgBox vntArray(1, 1) & vbLf & vntArray(1, 2) & vbLf & vntArray(1, 3)
End Sub

Die Dimensionen des Arrays darfst du nicht ändern, da bin ich schon an der oberen Grenze. Aber aus so einem Array einen String zusammenzusetzen sollte ja kein Problem sein. Also, woran hängt es?
Gruß
Nepumuk
Anzeige
AW: Binärdaten in Excel speichern
05.12.2008 16:08:00
Reinhard
Hallo Nepumuk,
ich glaube ich habe meinen Fehler entdeckt, ich habe die Variable txt ja als String definiert, daran wird das wohl liegen daß ich es nicht schaffe die Binärdaten von Txt mittels deiner Codes in namen abzuspeichern.
Einlesen tue ich bislang so:

Option Explicit
Public txt As String
Sub tt()
Dim Dat As String, FF As Long, Platz As Long, N
Dat = "H:\europeanchampionship2008\europeanchampionship2008.swf"
FF = FreeFile
Platz = FileLen(Dat)
Open Dat For Binary As #FF
txt = Input(Platz, #FF)
Close #FF
End Sub


Ich gehe davon aus, ich muß da "As String" rausnehmen und es dann neu mit deinen Codes ausprobieren.
Gruß
Reinhard

Anzeige
AW: Binärdaten in Excel speichern
05.12.2008 16:46:51
Nepumuk
Hallo Reinhard,
wenn du eine Textdatei einliest, wirst du immer Text bekommen, Also als String ist schon richtig. Wie sieht der denn aus? Stell mal einen Auszug davon rein.
Gruß
Nepumuk
AW: Binärdaten in Excel speichern
05.12.2008 17:44:09
Reinhard
Hallo Nepumuk,
danke daß du dir soviel Mühe mit mir machst.
Es ist ja grad keine Textdatei, siehe das Bild unten, sondern eine Binärdatei, also alle Zeichen von 0 - 255
kommen darin vor.
Aber die Datei an sich ist nicht wichtig. Mein Begehr ist zu wissen wie ich grundsätzlich eine Binärdatei
irgendwie/irgendwo in Excel/Vba einlese, um dann nur diese Exceldatei an einen Kunden (hab zwar keine,
kann ja mal kommen *gg) maile.
Er öffnet dieses Exceldatei, durch Ereigniscode werden dann die gespeicherten Binärdaten ausgelsen und
mit ihnen eine exe, com, swf, sonstwas erstellt.
Diese erstellte Datei wird dann gestartet.
Ich suche halt eine Alternative dazu daß ich in diesem Fall die Exceldatei und die swf-datei
schicken müßte.
Und für mich hat eine reine Textdatei nur Zeichen von 32-255 plus Zeichen 10,13,9.
Eine Binärdatei kann alle zeichen von 0-255 in sich bergen.
Ich denke das sollte so richtig sein.
Danke ^ Gruß
reinhard
Userbild
Anzeige
Frage noch offen o.w.T.
06.12.2008 18:24:34
Reinhard


Könntest du nicht die Binärdatei einfach...
08.12.2008 04:07:00
Luc:-?
...als Text in den VBA-Code einbinden, Reinhard,
und den dann per entsprechendem Objekt mittels VBA-Codesequenz aus der Subprozedur heraus exportieren? Ich erzeuge so Event- und HilfsProcs sowie HTML-Dateien.
Gruß Luc :-?
AW: Könntest du nicht die Binärdatei einfach...
08.12.2008 14:05:41
Reinhard
Hallo Luc,
genau das kriege ich ja nicht hin :-( Ich weiß auch trrotz der bemühungen von Nepumuk wie ich den Inhalt von "txt" in einem Modul abspeichern kann. Problem sind m.E. die Zeichen mit dem Code unter 32 in "txt"

Sub tt()
Dim Dat As String, FF As Long, Platz As Long, txt As String
Dat = "H:\europeanchampionship2008\europeanchampionship2008.swf"
FF = FreeFile
Platz = FileLen(Dat)
Open Dat For Binary As #FF
txt = Input(Platz, #FF)
Close #FF
Dat = "H:\fusstext.swf"
FF = FreeFile
Open Dat For Binary As #FF
Put #FF, , txt
Close #FF
End Sub


Gruß
Reinhard

Anzeige
Da wirst du recht haben! Leider! Gruß owT
09.12.2008 02:42:00
Luc:-?
:-?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige