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

Dateigröße

Dateigröße
03.08.2005 20:09:05
kk3003
Hallo,
ich habe einige kleine Makros programmiert, die eigentlich (fast) keinen Speicher belegen dürften.
Trotzdem ist meine Excel-Mappe über 6 MB groß?! Hat jemand Erfahrung damit?`
Ich lege einige Arrays an und weiß aber nicht wie ich diese nach Ausführung (da deren Inhalt nicht mehr gebraucht wird) zerstören kann. Gibt's da etwas wie FreeSpace (ich meine den Plattenspeicher)?
Bin für jeden Tipp dankbar.
Danke im voraus
Gruss
kk3003

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateigröße
03.08.2005 20:13:32
Hajo_Zi
Hallo Hans Bärbel,
ich sehe Deinen Code nicht.
Hans hatte früher ein Tool VbClear zur Verfügung gestellt vielleichr suchst Du mal danach.
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.


AW: Dateigröße
03.08.2005 20:16:45
kk3003
Hi Hajo,
soll ich den ganzen Code mal posten?!
Gruß
AW: Dateigröße
03.08.2005 20:23:30
Hajo_Zi
Hallo Hans Bärbel,
das hängt davon ab wie genau die Antwort haben willst.
Führst Du vielleich formatierungen in der Tabelle durch, das hat gewaltigen einfluß auf die Größe.
Gruß Hajo

"Wer Rechtschreibfehler findet, darf sie behalten!"
Anzeige
AW: Dateigröße
03.08.2005 20:29:14
kk3003
Hans-Bärbel?! :)
Hier mal der Code (evtl. mag er etwas diletantisch sein, aber so VBA fitbin ich noch nicht) :
- Schon mal danke im voraus -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1. Modul (hier wird einiges formatiert, wie könnte ich alles auf Standardformatierung ändern, also wie eine "jungfräuchliche" Mappe, die hat bei mir keine 12kB)

Sub OfferPreview()
' S T A R T
' Fehlermeldungen abschalten
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' This Filename
Dim ThisFilename As String
Dim ThisFilenameArray As Variant
Dim ThisFilenameArrayLength As Integer
ThisFilename = ActiveWorkbook.FullName
ThisFilenameArray = Split(ThisFilename, "\")
ThisFilenameArrayLength = UBound(ThisFilenameArray)
ThisFilenameArrayLength = ThisFilenameArrayLength
ThisFilename = ThisFilenameArray(ThisFilenameArrayLength)
' Aktueller Name der Mappe zum späteren Rückschreiben
Dim XLSFile As String
XLSFile = ActiveWorkbook.FullName
' Aktueller Pfad der Mappe
Dim XLSPath As String
XLSPath = ActiveWorkbook.Path
' "Altes" Angebot aufräumen
Sheets("OFFER").Select
Range("A26:G65000").Select
'Selection.Font.ColorIndex = 1
'Selection.Font.Bold = False
Selection.ClearContents
' Zellen formatieren, damit Texte richtig dargestellt werden
Range("B26:C65500").Select
Selection.Value = Format("", "0,00")
Range("G26:G65500").Select
Selection.Value = Format("", "0,00")
' Fettschrift entfernen
Range("E26:E65500").Select
Selection.Font.Bold = False
' Typ des Angebots bestimmen
Dim OfferType As String
If Worksheets("CREATOR").OfferTypeBuyer = True Then
OfferType = "Buyer"
Else
OfferType = "Reseller"
End If
' Abhängig von gewählter Sprache -> Inhalte einfügen
Dim OfferLang As String
Dim Zwischensumme As String
Dim PreisNetto As String
Dim PreisBrutto As String
Dim Rabatt As String
If Worksheets("CREATOR").OfferLangGerman = True Then
' MsgBox ("de!")
Worksheets("OFFER").Cells(7, 1) = "Seiten:"
Worksheets("OFFER").Cells(9, 1) = "Datum:"
Worksheets("OFFER").Cells(10, 1) = "Von:"
Worksheets("OFFER").Cells(13, 1) = "An:"
Worksheets("OFFER").Cells(14, 1) = "z. Hd.:"
Worksheets("OFFER").Cells(16, 1) = "E-Mail"
Worksheets("OFFER").Cells(22, 7) = "Alle Preise in €"
Worksheets("OFFER").Cells(24, 1) = "Pos."
Worksheets("OFFER").Cells(24, 2) = "Artikel"
Worksheets("OFFER").Cells(24, 3) = "Bezeichnung"
Worksheets("OFFER").Cells(24, 5) = "Einzelpreis"
Worksheets("OFFER").Cells(24, 6) = "Menge"
Worksheets("OFFER").Cells(24, 7) = "Gesamt"
OfferLang = "de"
Zwischensumme = "Zwischensumme"
PreisNetto = "Endpreis netto"
PreisBrutto = "Endpreis brutto"
Rabatt = "Rabatt in %"
Else
' MsgBox ("en!")
Worksheets("OFFER").Cells(7, 1) = "Pages:"
Worksheets("OFFER").Cells(9, 1) = "Date:"
Worksheets("OFFER").Cells(10, 1) = "From:"
Worksheets("OFFER").Cells(13, 1) = "To:"
Worksheets("OFFER").Cells(14, 1) = "Attn.:"
Worksheets("OFFER").Cells(16, 1) = "Email"
Worksheets("OFFER").Cells(22, 7) = "All prices in €"
Worksheets("OFFER").Cells(24, 1) = "Pos."
Worksheets("OFFER").Cells(24, 2) = "Item"
Worksheets("OFFER").Cells(24, 3) = "Name"
Worksheets("OFFER").Cells(24, 5) = "Unit price"
Worksheets("OFFER").Cells(24, 6) = "Amount"
Worksheets("OFFER").Cells(24, 7) = "Total"
OfferLang = "en"
Zwischensumme = "Subtotal"
PreisNetto = "Price strictly net"
PreisBrutto = "Price gross"
Rabatt = "Rebate percentage"
End If
' Datum übertragen
Worksheets("OFFER").Cells(9, 3) = Worksheets("CREATOR").OfferDate.Value
' Absender in Zelle schreiben
Worksheets("OFFER").Cells(10, 3) = Worksheets("CREATOR").OfferMaker.Value
' Empfänger-Firma in Zelle schreiben
Worksheets("OFFER").Cells(13, 3) = Worksheets("CREATOR").OfferRecipientCompany.Value
' Empfänger-Name in Zelle schreiben
Worksheets("OFFER").Cells(14, 3) = Worksheets("CREATOR").OfferRecipientName.Value
' Empfänger-Email in die Zelle schreiben
Worksheets("OFFER").Cells(16, 3) = Worksheets("CREATOR").OfferRecipientEmail.Value
' Betreff einfügen und Zellhöhe anpassen
Dim OfferTopic As String
Dim OfferTopicArray As Variant
Dim OfferTopicArrayLeng
OfferTopic = Worksheets("CREATOR").OfferTopic.Value
Worksheets("OFFER").Cells(18, 3) = OfferTopic
' Zeilen zählen und Zellenhöhe anpassen
OfferTopicArray = Split(OfferTopic, Chr(10))
OfferTopicArrayLength = UBound(OfferTopicArray) + 1
Worksheets("OFFER").Rows("18").RowHeight = OfferTopicArrayLength * 17
Worksheets("OFFER").Cells(18, 3).Replace Chr(13), ""
' Anrede einfügen
Dim OfferAnrede As String
Dim OfferAnredeArray As Variant
Dim OfferAnredeArrayLength As Integer
OfferAnrede = Worksheets("CREATOR").OfferText.Value
Worksheets("OFFER").Cells(20, 1) = OfferAnrede
' Zeilen zählen und Zellenhöhe anpassen
OfferAnredeArray = Split(OfferAnrede, Chr(10))
OfferAnredeArrayLength = UBound(OfferAnredeArray) + 1
Worksheets("OFFER").Rows("20").RowHeight = OfferAnredeArrayLength * 15
Worksheets("OFFER").Cells(20, 1).Replace Chr(13), ""
' Produktliste vorbereiten
Dim OfferContent As String
Dim OfferProductTemp As String
Dim OfferAmountTemp As String
Dim OfferContentItemArray()
Dim OfferContentAmountArray()
Dim OfferPreparationArray As Variant
Dim OfferPreparationLength As Integer
Dim OfferPreparationContainer As Variant
Dim OfferPreparationProduct As String
Dim OfferPreparationAmount As String
OfferContent = Worksheets("CREATOR").OfferContent.Value
OfferPreparationArray = Split(OfferContent, Chr(10))
OfferPreparationLength = UBound(OfferPreparationArray)
' Arrays redimensionieren
ReDim OfferContentItemArray(OfferPreparationLength)
ReDim OfferContentAmountArray(OfferPreparationLength)
' Nachfolgende Absätze entfernen
'For i = 0 To OfferPreparationLength
'    If OfferContentItemArray(i) = Chr(10) Then
'    Shift (OfferContentItemArray(i))
'    End If
'Next i
' Eingabe des Produktfeldes in zwei Arrays schreiben
For i = 0 To OfferPreparationLength
OfferPreparationContainer = Split(OfferPreparationArray(i), ">")
'Debug.Print OfferPreparationContainer(0) & "-> " & OfferPreparationContainer(1)
' Produktname in Array schreiben
OfferProductTemp = OfferPreparationContainer(0)
OfferContentItemArray(i) = OfferProductTemp
' Menge in Array schreiben
OfferAmountTemp = OfferPreparationContainer(1)
OfferContentAmountArray(i) = OfferAmountTemp
Next i
' Arrays testen
For i = 0 To UBound(OfferContentItemArray)
Debug.Print OfferContentItemArray(i)
Next i
For i = 0 To UBound(OfferContentAmountArray)
Debug.Print "-> " & OfferContentAmountArray(i)
Next i
'MsgBox "Items -> " & UBound(OfferContentItemArray)
'MsgBox "Amount -> " & UBound(OfferContentAmountArray)
' Produkte des Angebotes vorbereiten
Dim LastLine As Integer
Dim NeuerPreis As Double
Dim PosNumber As Integer
PosNumber = 1
' Letzte Zeile berechnen
Dim OfferLineStart As Integer
OfferLineStart = 26
Dim OfferLineEnd As Integer
OfferLineEnd = OfferLineStart + (UBound(OfferContentItemArray) * 2)
' Laufende Nummer erzeugen
Dim RunningNr As Integer
RunningNr = 0
' ANGEBOT GENERIEREN -> START
Dim LineNumber As Integer
Dim j As Integer
j = 0
For i = OfferLineStart To OfferLineEnd Step 2
' Zeile des Produktes suchen
Dim ProductName As String
ProductName = OfferContentItemArray(j)
ProductName = Left(ProductName, Len(ProductName) - 1)
' Artikelnummer suchen
LineNumber = Workbooks("Preisliste.xls").Sheets("ndt1").Range("A1:A1000").Find(ProductName).Row
' j erhöhen für den nächsten Durchgang
j = j + 1
Workbooks(ThisFilename).Activate
' Positionsnummer einfügen
Worksheets("OFFER").Cells(i, 1) = PosNumber
Worksheets("OFFER").Cells(i, 1).Replace " ", ""
PosNumber = PosNumber + 1
' Artikelnummer schreiben
Worksheets("OFFER").Cells(i, 2).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "A" & LineNumber
Trim (Worksheets("OFFER").Cells(i, 2))
' Bezeichnung schreiben
'   Deutsch ?
If OfferLang = "de" Then
Worksheets("OFFER").Cells(i, 3).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "B" & LineNumber
Trim (Worksheets("OFFER").Cells(i, 3))
'   Englisch ?
Else
Worksheets("OFFER").Cells(i, 3).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "C" & LineNumber
Trim (Worksheets("OFFER").Cells(i, 3))
End If
' Preis schreiben
Dim Preis As Long
'   Endkunde ?
If OfferType = "Buyer" Then
Worksheets("OFFER").Cells(i, 5).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "D" & LineNumber
Trim (Worksheets("OFFER").Cells(i, 5))
'   Reseller ?
Else
Worksheets("OFFER").Cells(i, 5).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "E" & LineNumber
Trim (Worksheets("OFFER").Cells(i, 5))
End If
' Menge schreiben
Dim Menge As Integer
Menge = PosNumber
Worksheets("OFFER").Cells(i, 6) = OfferContentAmountArray(RunningNr)
Worksheets("OFFER").Cells(i, 6).Replace Chr(10), ""
Worksheets("OFFER").Cells(i, 6).Replace Chr(13), ""
Worksheets("OFFER").Cells(i, 6).Value = Format(Worksheets("OFFER").Cells(i, 6), "0,00")
Trim (Worksheets("OFFER").Cells(i, 6))
RunningNr = RunningNr + 1
' Gesamtpreis ausrechnen
'Worksheets("OFFER").Cells(i, 7) = (Worksheets("OFFER").Cells(i, 5) * 1) * Worksheets("OFFER").Cells(i, 6)
Worksheets("OFFER").Cells(i, 7).Formula = _
"=E" & i & "*F" & i
Trim (Worksheets("OFFER").Cells(i, 7))
' Neuer Preis
NeuerPreis = NeuerPreis + Worksheets("OFFER").Cells(i, 7)
' Letzte Zeile in Variable sichern
LastLine = i
Next i
' ANGEBOT GENERIEREN -> ENDE
' Zwischensumme ausgeben
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = Zwischensumme
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
' Rechtbündig
'Worksheets("OFFER").Cells(LastLine, 7).Formula = _
'"=SUMME(G26:G" & LastLine - 2 & ")"
Worksheets("OFFER").Cells(LastLine, 7) = NeuerPreis
' Rabatt einfügen ?
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = Rabatt
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
Dim OfferRebate As Double
OfferRebate = Worksheets("CREATOR").OfferRebate.Value
Worksheets("OFFER").Cells(LastLine, 7) = OfferRebate
' Netto-Preis
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = PreisNetto
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
Dim NettoPreis As Double
NettoPreis = NeuerPreis - (NeuerPreis * (OfferRebate / 100))
Worksheets("OFFER").Cells(LastLine, 7) = NettoPreis
' Brutto-Preis
Dim BruttoPreis As Double
Dim OfferTax As Integer
OfferTax = Worksheets("CREATOR").OfferTax.Value
BruttoPreis = NettoPreis * ((OfferTax / 100) + 1)
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = PreisBrutto
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
Worksheets("OFFER").Cells(LastLine, 7) = BruttoPreis
' Die Zahl der Druckseiten berechnen
Dim CountPages As Integer
' Aktive Tabelle wechseln
Sheets("OFFER").Select
CountPages = ExecuteExcel4Macro("Get.Document(50)")
Worksheets("OFFER").Cells(7, 3) = CountPages
Worksheets("OFFER").Cells(7, 3).Font.ColorIndex = 1
Worksheets("OFFER").Cells(7, 3).Font.Bold = True
' Aktive Tabelle wechseln
Sheets("CREATOR").Select
Application.ScreenUpdating = True
' Druckvorschau öffnen
Worksheets("OFFER").PrintPreview
' E N D E
End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2. Modul

Sub OfferResave()
' This Filename
Dim ThisFilename As String
ThisFilename = ActiveWorkbook.FullName
' Alte Datei überschreiben
ActiveWorkbook.SaveAs ThisFilename
End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3. Modul

Sub OfferSaveAs()
' New Filename
Dim NewFilename As Integer
Dim NextFilename As Integer
NewFilename = Worksheets("CREATOR").Cells(4, 2)
NextFilename = NewFilename + 1
Worksheets("CREATOR").Cells(4, 2) = NextFilename
' Kopie der Mappe speichern
Dim XLSPath As String
Dim XLSFile As String
XLSFile = ActiveWorkbook.FullName
XLSPath = ActiveWorkbook.Path
' Benutzernamen auslesen
Dim UserName As String
UserName = Application.UserName
Dim OfferDate As String
OfferDate = Worksheets("CREATOR").OfferDate.Value
Dim OfferRecipientCompany As String
OfferRecipientCompany = Worksheets("CREATOR").OfferRecipientCompany.Value
' Neue Mappe schreiben
ActiveWorkbook.SaveAs XLSPath & "\ANGEBOTE\" & NewFilename & "_" & UserName & "_" & OfferDate & "_" & OfferRecipientCompany & ".xls"
' Zurückspeichern
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs XLSFile
Application.DisplayAlerts = True
End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4. Modul

Sub OfferPrint()
' Angebot drucken
Worksheets("OFFER").PrintOut
End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Das wäre es.... vielen dank für Deine Zeit.
Gruß
kk3003
Anzeige
AW: Dateigröße
03.08.2005 20:31:34
Matthias
Hallo kk,
also ich habe keine Lust, mir den Code näher anzusehen...
Aber kopiere doch mal alle Blätter und Makros in eine neue Datei, vielleicht hilft das.
Gruß Matthias
AW: Dateigröße
03.08.2005 20:43:14
kk3003
Verstehe ich. Ich hätte auch keine Lust den Code mir anzuschauen...
Ein "Umkopieren" bringt leider nix. Wie kann ich Arrays "zerstören"?! Oder werden automatisch beim Beenden von Excel geleert?!
Gruß
kk3003
AW: Dateigröße
03.08.2005 20:46:15
Hajo_Zi
Hallo Hans Bärbel,
die Array sin fort nach beendigung vom Makro. Schreibe alles in ein Modul. Ich habe noch einige Select entfernt und 2 Variablen nachgeschrieben.
Option Explicit

Sub OfferPreview()
' S T A R T
' Fehlermeldungen abschalten
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' This Filename
Dim ThisFilename As String
Dim ThisFilenameArray As Variant
Dim ThisFilenameArrayLength As Integer
ThisFilename = ActiveWorkbook.FullName
ThisFilenameArray = Split(ThisFilename, "\")
ThisFilenameArrayLength = UBound(ThisFilenameArray)
ThisFilenameArrayLength = ThisFilenameArrayLength
ThisFilename = ThisFilenameArray(ThisFilenameArrayLength)
' Aktueller Name der Mappe zum späteren Rückschreiben
Dim XLSFile As String
XLSFile = ActiveWorkbook.FullName
' Aktueller Pfad der Mappe
Dim XLSPath As String
XLSPath = ActiveWorkbook.Path
' "Altes" Angebot aufräumen
Sheets("OFFER").Range("A26:G65000").ClearContents
'Selection.Font.ColorIndex = 1
'Selection.Font.Bold = False
' Zellen formatieren, damit Texte richtig dargestellt werden
Range("B26:C65500").Value = Format("", "0,00")
Range("G26:G65500").Value = Format("", "0,00")
' Fettschrift entfernen
Range("E26:E65500").Font.Bold = False
' Typ des Angebots bestimmen
Dim OfferType As String
If Worksheets("CREATOR").OfferTypeBuyer = True Then
OfferType = "Buyer"
Else
OfferType = "Reseller"
End If
' Abhängig von gewählter Sprache -> Inhalte einfügen
Dim OfferLang As String
Dim Zwischensumme As String
Dim PreisNetto As String
Dim PreisBrutto As String
Dim Rabatt As String
If Worksheets("CREATOR").OfferLangGerman = True Then
' MsgBox ("de!")
Worksheets("OFFER").Cells(7, 1) = "Seiten:"
Worksheets("OFFER").Cells(9, 1) = "Datum:"
Worksheets("OFFER").Cells(10, 1) = "Von:"
Worksheets("OFFER").Cells(13, 1) = "An:"
Worksheets("OFFER").Cells(14, 1) = "z. Hd.:"
Worksheets("OFFER").Cells(16, 1) = "E-Mail"
Worksheets("OFFER").Cells(22, 7) = "Alle Preise in €"
Worksheets("OFFER").Cells(24, 1) = "Pos."
Worksheets("OFFER").Cells(24, 2) = "Artikel"
Worksheets("OFFER").Cells(24, 3) = "Bezeichnung"
Worksheets("OFFER").Cells(24, 5) = "Einzelpreis"
Worksheets("OFFER").Cells(24, 6) = "Menge"
Worksheets("OFFER").Cells(24, 7) = "Gesamt"
OfferLang = "de"
Zwischensumme = "Zwischensumme"
PreisNetto = "Endpreis netto"
PreisBrutto = "Endpreis brutto"
Rabatt = "Rabatt in %"
Else
' MsgBox ("en!")
Worksheets("OFFER").Cells(7, 1) = "Pages:"
Worksheets("OFFER").Cells(9, 1) = "Date:"
Worksheets("OFFER").Cells(10, 1) = "From:"
Worksheets("OFFER").Cells(13, 1) = "To:"
Worksheets("OFFER").Cells(14, 1) = "Attn.:"
Worksheets("OFFER").Cells(16, 1) = "Email"
Worksheets("OFFER").Cells(22, 7) = "All prices in €"
Worksheets("OFFER").Cells(24, 1) = "Pos."
Worksheets("OFFER").Cells(24, 2) = "Item"
Worksheets("OFFER").Cells(24, 3) = "Name"
Worksheets("OFFER").Cells(24, 5) = "Unit price"
Worksheets("OFFER").Cells(24, 6) = "Amount"
Worksheets("OFFER").Cells(24, 7) = "Total"
OfferLang = "en"
Zwischensumme = "Subtotal"
PreisNetto = "Price strictly net"
PreisBrutto = "Price gross"
Rabatt = "Rebate percentage"
End If
' Datum übertragen
Worksheets("OFFER").Cells(9, 3) = Worksheets("CREATOR").OfferDate.Value
' Absender in Zelle schreiben
Worksheets("OFFER").Cells(10, 3) = Worksheets("CREATOR").OfferMaker.Value
' Empfänger-Firma in Zelle schreiben
Worksheets("OFFER").Cells(13, 3) = Worksheets("CREATOR").OfferRecipientCompany.Value
' Empfänger-Name in Zelle schreiben
Worksheets("OFFER").Cells(14, 3) = Worksheets("CREATOR").OfferRecipientName.Value
' Empfänger-Email in die Zelle schreiben
Worksheets("OFFER").Cells(16, 3) = Worksheets("CREATOR").OfferRecipientEmail.Value
' Betreff einfügen und Zellhöhe anpassen
Dim OfferTopic As String
Dim OfferTopicArray As Variant
Dim OfferTopicArrayLeng
OfferTopic = Worksheets("CREATOR").OfferTopic.Value
Worksheets("OFFER").Cells(18, 3) = OfferTopic
' Zeilen zählen und Zellenhöhe anpassen
OfferTopicArray = Split(OfferTopic, Chr(10))
'   nachgeschrieben
Dim OfferTopicArrayLength
OfferTopicArrayLength = UBound(OfferTopicArray) + 1
Worksheets("OFFER").Rows("18").RowHeight = OfferTopicArrayLength * 17
Worksheets("OFFER").Cells(18, 3).Replace Chr(13), ""
' Anrede einfügen
Dim OfferAnrede As String
Dim OfferAnredeArray As Variant
Dim OfferAnredeArrayLength As Integer
OfferAnrede = Worksheets("CREATOR").OfferText.Value
Worksheets("OFFER").Cells(20, 1) = OfferAnrede
' Zeilen zählen und Zellenhöhe anpassen
OfferAnredeArray = Split(OfferAnrede, Chr(10))
OfferAnredeArrayLength = UBound(OfferAnredeArray) + 1
Worksheets("OFFER").Rows("20").RowHeight = OfferAnredeArrayLength * 15
Worksheets("OFFER").Cells(20, 1).Replace Chr(13), ""
' Produktliste vorbereiten
Dim OfferContent As String
Dim OfferProductTemp As String
Dim OfferAmountTemp As String
Dim OfferContentItemArray()
Dim OfferContentAmountArray()
Dim OfferPreparationArray As Variant
Dim OfferPreparationLength As Integer
Dim OfferPreparationContainer As Variant
Dim OfferPreparationProduct As String
Dim OfferPreparationAmount As String
OfferContent = Worksheets("CREATOR").OfferContent.Value
OfferPreparationArray = Split(OfferContent, Chr(10))
OfferPreparationLength = UBound(OfferPreparationArray)
' Arrays redimensionieren
ReDim OfferContentItemArray(OfferPreparationLength)
ReDim OfferContentAmountArray(OfferPreparationLength)
' Nachfolgende Absätze entfernen
'For i = 0 To OfferPreparationLength
'    If OfferContentItemArray(i) = Chr(10) Then
'    Shift (OfferContentItemArray(i))
'    End If
'Next i
' Eingabe des Produktfeldes in zwei Arrays schreiben
'   nachgeschrieben
Dim I
For I = 0 To OfferPreparationLength
OfferPreparationContainer = Split(OfferPreparationArray(I), ">")
'Debug.Print OfferPreparationContainer(0) & "-> " & OfferPreparationContainer(1)
' Produktname in Array schreiben
OfferProductTemp = OfferPreparationContainer(0)
OfferContentItemArray(I) = OfferProductTemp
' Menge in Array schreiben
OfferAmountTemp = OfferPreparationContainer(1)
OfferContentAmountArray(I) = OfferAmountTemp
Next I
' Arrays testen
For I = 0 To UBound(OfferContentItemArray)
Debug.Print OfferContentItemArray(I)
Next I
For I = 0 To UBound(OfferContentAmountArray)
Debug.Print "-> " & OfferContentAmountArray(I)
Next I
'MsgBox "Items -> " & UBound(OfferContentItemArray)
'MsgBox "Amount -> " & UBound(OfferContentAmountArray)
' Produkte des Angebotes vorbereiten
Dim LastLine As Integer
Dim NeuerPreis As Double
Dim PosNumber As Integer
PosNumber = 1
' Letzte Zeile berechnen
Dim OfferLineStart As Integer
OfferLineStart = 26
Dim OfferLineEnd As Integer
OfferLineEnd = OfferLineStart + (UBound(OfferContentItemArray) * 2)
' Laufende Nummer erzeugen
Dim RunningNr As Integer
RunningNr = 0
' ANGEBOT GENERIEREN -> START
Dim LineNumber As Integer
Dim j As Integer
j = 0
For I = OfferLineStart To OfferLineEnd Step 2
' Zeile des Produktes suchen
Dim ProductName As String
ProductName = OfferContentItemArray(j)
ProductName = Left(ProductName, Len(ProductName) - 1)
' Artikelnummer suchen
LineNumber = Workbooks("Preisliste.xls").Sheets("ndt1").Range("A1:A1000").Find(ProductName).Row
' j erhöhen für den nächsten Durchgang
j = j + 1
Workbooks(ThisFilename).Activate
' Positionsnummer einfügen
Worksheets("OFFER").Cells(I, 1) = PosNumber
Worksheets("OFFER").Cells(I, 1).Replace " ", ""
PosNumber = PosNumber + 1
' Artikelnummer schreiben
Worksheets("OFFER").Cells(I, 2).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "A" & LineNumber
Trim (Worksheets("OFFER").Cells(I, 2))
' Bezeichnung schreiben
'   Deutsch ?
If OfferLang = "de" Then
Worksheets("OFFER").Cells(I, 3).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "B" & LineNumber
Trim (Worksheets("OFFER").Cells(I, 3))
'   Englisch ?
Else
Worksheets("OFFER").Cells(I, 3).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "C" & LineNumber
Trim (Worksheets("OFFER").Cells(I, 3))
End If
' Preis schreiben
Dim Preis As Long
'   Endkunde ?
If OfferType = "Buyer" Then
Worksheets("OFFER").Cells(I, 5).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "D" & LineNumber
Trim (Worksheets("OFFER").Cells(I, 5))
'   Reseller ?
Else
Worksheets("OFFER").Cells(I, 5).Formula = _
"='" & XLSPath & "\DATA\" & "[" & "Preisliste.xls" & "]" & "ndt1" & "'!" & "E" & LineNumber
Trim (Worksheets("OFFER").Cells(I, 5))
End If
' Menge schreiben
Dim Menge As Integer
Menge = PosNumber
Worksheets("OFFER").Cells(I, 6) = OfferContentAmountArray(RunningNr)
Worksheets("OFFER").Cells(I, 6).Replace Chr(10), ""
Worksheets("OFFER").Cells(I, 6).Replace Chr(13), ""
Worksheets("OFFER").Cells(I, 6).Value = Format(Worksheets("OFFER").Cells(I, 6), "0,00")
Trim (Worksheets("OFFER").Cells(I, 6))
RunningNr = RunningNr + 1
' Gesamtpreis ausrechnen
'Worksheets("OFFER").Cells(i, 7) = (Worksheets("OFFER").Cells(i, 5) * 1) * Worksheets("OFFER").Cells(i, 6)
Worksheets("OFFER").Cells(I, 7).Formula = _
"=E" & I & "*F" & I
Trim (Worksheets("OFFER").Cells(I, 7))
' Neuer Preis
NeuerPreis = NeuerPreis + Worksheets("OFFER").Cells(I, 7)
' Letzte Zeile in Variable sichern
LastLine = I
Next I
' ANGEBOT GENERIEREN -> ENDE
' Zwischensumme ausgeben
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = Zwischensumme
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
' Rechtbündig
'Worksheets("OFFER").Cells(LastLine, 7).Formula = _
'"=SUMME(G26:G" & LastLine - 2 & ")"
Worksheets("OFFER").Cells(LastLine, 7) = NeuerPreis
' Rabatt einfügen ?
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = Rabatt
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
Dim OfferRebate As Double
OfferRebate = Worksheets("CREATOR").OfferRebate.Value
Worksheets("OFFER").Cells(LastLine, 7) = OfferRebate
' Netto-Preis
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = PreisNetto
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
Dim NettoPreis As Double
NettoPreis = NeuerPreis - (NeuerPreis * (OfferRebate / 100))
Worksheets("OFFER").Cells(LastLine, 7) = NettoPreis
' Brutto-Preis
Dim BruttoPreis As Double
Dim OfferTax As Integer
OfferTax = Worksheets("CREATOR").OfferTax.Value
BruttoPreis = NettoPreis * ((OfferTax / 100) + 1)
LastLine = LastLine + 2
Worksheets("OFFER").Cells(LastLine, 5) = PreisBrutto
Worksheets("OFFER").Cells(LastLine, 5).Font.Bold = True
Worksheets("OFFER").Cells(LastLine, 7) = BruttoPreis
' Die Zahl der Druckseiten berechnen
Dim CountPages As Integer
' Aktive Tabelle wechseln
Sheets("OFFER").Select
CountPages = ExecuteExcel4Macro("Get.Document(50)")
Worksheets("OFFER").Cells(7, 3) = CountPages
Worksheets("OFFER").Cells(7, 3).Font.ColorIndex = 1
Worksheets("OFFER").Cells(7, 3).Font.Bold = True
' Aktive Tabelle wechseln
Sheets("CREATOR").Select
Application.ScreenUpdating = True
' Druckvorschau öffnen
Worksheets("OFFER").PrintPreview
' E N D E
End Sub


Sub OfferResave()
' This Filename
Dim ThisFilename As String
ThisFilename = ActiveWorkbook.FullName
' Alte Datei überschreiben
ActiveWorkbook.SaveAs ThisFilename
End Sub


Sub OfferSaveAs()
' New Filename
Dim NewFilename As Integer
Dim NextFilename As Integer
NewFilename = Worksheets("CREATOR").Cells(4, 2)
NextFilename = NewFilename + 1
Worksheets("CREATOR").Cells(4, 2) = NextFilename
' Kopie der Mappe speichern
Dim XLSPath As String
Dim XLSFile As String
XLSFile = ActiveWorkbook.FullName
XLSPath = ActiveWorkbook.Path
' Benutzernamen auslesen
Dim UserName As String
UserName = Application.UserName
Dim OfferDate As String
OfferDate = Worksheets("CREATOR").OfferDate.Value
Dim OfferRecipientCompany As String
OfferRecipientCompany = Worksheets("CREATOR").OfferRecipientCompany.Value
' Neue Mappe schreiben
ActiveWorkbook.SaveAs XLSPath & "\ANGEBOTE\" & NewFilename & "_" & UserName & "_" & OfferDate & "_" & OfferRecipientCompany & ".xls"
' Zurückspeichern
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs XLSFile
Application.DisplayAlerts = True
End Sub


Sub OfferPrint()
' Angebot drucken
Worksheets("OFFER").PrintOut
End Sub

Gruß Hajo

"Wer Rechtschreibfehler findet, darf sie behalten!"
Anzeige
AW: Dateigröße
03.08.2005 20:48:01
kk3003
Hi,
schon mal ein großes Danke. Ist das dein editierter Code? Soll ich diesen kopieren und in meiner Mappe ausprobieren?
Gruß
kk3003
AW: Dateigröße
03.08.2005 20:49:39
Hajo_Zi
Hallo Hans Bärbel,
ja, warum sollte ich snst Posten?
Gruß Hajo

"Wer Rechtschreibfehler findet, darf sie behalten!"
AW: Dateigröße
03.08.2005 20:55:34
kk3003
Hi,
ok ok ... :) *missverständnis*
nach OfferPreview() war sie ca. 3MB
nach OfferPrint() war sie ca. 5 MB
wobei die Sache mit Print eigentlich gar keine Auswirkung auf die Dateigröße haben sollte, oder?
Was genau hast Du optimiert? Ein Sprung von 6MB auf 3MB ist doch schon erheblich...
Danke im voraus
Gruß
kk3003
Anzeige
AW: Dateigröße
03.08.2005 20:58:55
Hajo_Zi
Hallo Hans Bärbel,
in diesem Bereich habe ich select entfernt
Sheets("OFFER").Select
Range("A26:G65000").Select
'Selection.Font.ColorIndex = 1
'Selection.Font.Bold = False
Selection.ClearContents


' Zellen formatieren, damit Texte richtig dargestellt werden
Range("B26:C65500").Select
Selection.Value = Format("", "0,00")

Range("G26:G65500").Select
Selection.Value = Format("", "0,00")

' Fettschrift entfernen
Range("E26:E65500").Select
Selection.Font.Bold = False
Gruß Hajo

"Wer Rechtschreibfehler findet, darf sie behalten!"
Anzeige
AW: Dateigröße
03.08.2005 20:47:44
Matthias
Hallo kk,
Oder werden automatisch beim Beenden von Excel geleert?!

Eigentlich schon. Jedenfalls werden Variablen sie nicht in der Datei mitgespeichert.
Kopiere mal jedes Blatt in eine extra Mappe und speichere sie ab, vielleicht siehst du dann welches Blatt soviel Speicher frisst.
Gruß Matthias
AW: Dateigröße
03.08.2005 20:57:51
kk3003
Hi,
Tabelle "OFFER" ca. 3 MB
Tabelle "CREATOR" ca. 3 MB
Das nimmt quasi nix....
Gruß
kk3003
AW: Dateigröße
03.08.2005 22:09:05
kk3003
Also kann es nur an Formatierungen der Excel-Zellen liegen?!
Gruß
kk3003
AW: Dateigröße
03.08.2005 22:15:17
Matthias
Hallo kk,
also wenn ich in einer neuen Mappe alle Zellen eines Blattes so formatiere (und leer lasse), wird sie gerade mal 16 kb groß. Spalten A-G mit einer 1 gefüllt, macht schon 4,7 MB.
Gruß Matthias
Anzeige
AW: Dateigröße
03.08.2005 22:19:23
kk3003
Hi,
nun ja meine Zellen sind leer... komisch.
wenn ich das ganze blatt lösche, sinkt die größe um 3 mb.
gruß
kk3003
AW: Dateigröße
03.08.2005 23:25:26
kk3003
Hi,
wenn ich Zellen via VBA formatiere, schreibt EXCEL baer nix rein? Nichtmal Steuercodes oder dergleichen?
Gruß
kk3003
AW: Dateigröße
06.08.2005 08:10:24
Hajo_Zi
Hallo Hans Bärbel,
wie liest Du den Steuercode aus? Was ist das?
Gruß Hajo

"Wer Rechtschreibfehler findet, darf sie behalten!"
AW: Dateigröße
06.08.2005 13:25:14
kk3003
Hi,
Problem hat sich erledigt. Die Mappe ist nun schlanke 150 kB. Es lage einfach an partiellen Formatierungen, also Formatierungen, die nicht eine ganze Tabelle betreffen...
Gruß
kk3003
Anzeige
AW: Dateigröße
03.08.2005 20:46:24
kk3003
Aufgefallen ist mir allerdings, dass die Dateigröße erst nach einer erstmaligen Ausführung der Module ansteigt...
Was belegt eine Formatierung von A1:G65000 als Zahlen mit 2 Dezimalstellen z.b.?
Gruß
kk3003

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige