Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"ListView" ist unter der 64 Bit

Forumthread: "ListView" ist unter der 64 Bit

"ListView" ist unter der 64 Bit
11.02.2017 08:40:53
Andi
Guten Morgen,
ich habe Office 2016 in der 64 Bit Version installiert, da ich denke, das dieses mehr leisten könnte und stabiler lauft.
Nun habe ich aber große Dateien 130 A4 Seiten- die auch schon mal beim "Drucken" in PDF oder auch nur beim Drucken innerhalb der Mappe sehr lange Verabeitungszeiten haben.
Weiß nicht ob das bei der 32Bit Version auch so lange gedauert hat.
Z.B. das Zusätzliche Steuerelement "ListView" ist unter der 64 Bit gar nicht aufrufbar, eine MSCOMCTL.OCX hat sich gar nicht Installieren lassen.
Soll ich zur 32 Bit Version zurückgreifen?
Grüße Andi
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "ListView" ist unter der 64 Bit
11.02.2017 09:33:33
mumpel
Hallo!
Die 64-bit-Version brauchst Du nur wenn Du regelmäßig Dateien größer 2GB verarbeiten musst. Sonst ist die 32-bit-Version so schnell wie die 64-bit-Version. Die Nachteile der 64-bit-Version kennst Du ja jetzt schon. Nimm wieder die 32-bit-Version.
130 Seiten sind schon viel. Das dauert nun mal länger. Welches PDF-Programm nutzt Du? Vielleicht probierst Du mal verschiedene PDF-Programme aus.
Gruß, René
Anzeige
AW: "ListView" ist unter der 64 Bit
11.02.2017 09:52:28
Andi
Danke, René, ich verwende Adobe Acrobat Pro. Ok werde die 32 Bit Version dann doch wieder vorziehen.
Lohnt es sich, ein neues "ListView" zu erstellen,- nicht das es bei den nächsten Updates von MSO wieder Probleme gibt? Ich werde es wagen.
Danke erst mal.
Grüße Andi
AW: "ListView" ist unter der 64 Bit
11.02.2017 10:43:32
mumpel
Was macht das Liestenfeld? Druckst Du per VBA? Wenn Du per VBA druckst dann zeig uns mal den Code (als Beispielmappe, dann müssen wir nicht extra nachbauen), vielleicht lässt er sich optimieren.
Anzeige
AW: VBA Druck
11.02.2017 15:43:20
Andi
Hallo Mumpel,
ja ich Drucke per VBA- die Datei ist leider zu groß - trotz das ich alles Unwichtige entfernt habe.
ABER ich hab bestimmt den Fehler gefunden.
Hier erst mal das Druckmakro- Das funktioniert Top.
kurze Erläuterung: Tabelle "Bearbeiten ist mit Daten im Bereich von A-L nach unten bis zu 3000 Zeilen gefüllt.
Dann habe ich ein Startblatt- und ein Endblatt- es wird nach Zeilenabfrage die Anzahl der zu druckenden Blätter bestimmt, und es wird dann in die richtigen Blätter gedruckt.
Die "Bearbeiten Daten" sind dort in den Zeilen mit Rahmen Formatiert und diese werden auch so in die " Start_End-Blätter" übertragen.
Entferne ich die Rahmen Formatierung ( im Blatt Bearbeiten), dann werden die 3000 Zeilen ganz schnell übertragen.
Dann fehlen aber auch die Zeilen Rahmen in der fertigen gedruckten Datei.
Abhilfe: Kann man im Druckcode eine Veränderung vornehmen- so das nur Zellinhalte ( A-L ) von "Bearbeiten" K O P I E R T werden und in "Start und Endblatt" nur Zellinhalte ohne Formatierung E I N G E F Ü G T werden?
Die Zeilenformatierung ist ja schon in den Start-End Druckblätter hinterlegt- und darf nicht mit gelöscht werden.
Kann mal jemand drüberschauen?

Option Explicit
Const Druck = "Druckmenü" ' hier als Konstante zum einfachen Ändern
Sub D_In_Blatt_Drucken()
'Bildschirmaktivitäten deaktivieren
Application.ScreenUpdating = False
Dim s&, vS&, bS&, ZpS& ' Seite, von .. bis Seite, Zeilen pro Seite
Dim MBl&, Zm&, r& 'letzte MB, Zeilen max., Rest
Dim rB As Range ' Bereich im Blatt "Bearbeiten"
Dim mitKopie As Boolean ' gibt es noch Zeilen für das Endblatt?
Dim inTB As String, shTB As Worksheet
Dim zkZ&    ' zu kopierende Zeilen (Anzahl); evtl. auf 50, 51? Im Druckmenü: O12
Const AzeE = 19 ' Abstand zum ersten Eintrag im Start- bzw. Endblatt, also 1+19=20
Dim zNrn&() ' Array für Zeilennummern
Dim Grafik As Shape
With Sheets(Druck)
vS = 1             ' immer ab Seite 1
bS = .Range("q10") ' nicht das "eingegebene" bis, sondern "Seiten eff."
ZpS = .Range("o8")
Zm = .Range("o6")
r = .Range("q8")   ' Rest
inTB = .Range("o11")
zkZ = .Range("o12")
End With
If ZpS + AzeE > zkZ Then MsgBox "Abstand + Zeilen pro Seite > als zu kopierende Zeilen.": Exit  _
Sub
' Ermitteln, ob inTB existiert
On Error Resume Next
Sheets(inTB).Activate
Application.DisplayAlerts = False ' wegen Meldung beim Löschen...
If Err.Number = 0 Then Sheets(inTB).Delete ' wenn es da ist, löschen
Application.DisplayAlerts = True
Err.Clear
On Error GoTo 0
' die folgenden Zeilen sind eigentlich ein programmiertechnisch unnützer Umweg,
' aber so ist wahrscheinlich einfacher nachvollziehbar, was die Formel macht.
' Ich definiere ein Array mit zwei Spalten, das die Zeilennummer zum Einfügen
' des Formulars (Spalte 1) und die Zeilennummer zum Einfügen der Werte (Spalte 2)
' enthält:
ReDim zNrn(1 To bS + 1, 1 To 2) ' bs + 1: bs*Startblatt + Endblatt
For s = 1 To bS + 1
zNrn(s, 1) = 1 + (s - 1) * zkZ  ' ergibt bei  zkz=49:  1, 50, ...
zNrn(s, 2) = zNrn(s, 1) + AzeE  ' ergibt bei AzeE=19: 20, 69, ...
Next
Application.ScreenUpdating = False
' zuerst das Formular kopieren
Sheets("Startblatt").Range("A20:L49").ClearContents
' evlt. vorhandene Daten müssen nicht mitkopiert werden
' einmal die SPALTEN kopieren - dann passen die Spaltenbreiten
' Sheets("Startblatt").Columns("A:M").Copy shTB.Range("A1")
' For Each Grafik In shTB.Shapes: Grafik.Delete: Next
Sheets("Startblatt").Copy before:=Sheets(1)
Set shTB = ActiveSheet
shTB.Name = inTB
' dann die ZEILEN...
Sheets("Startblatt").Rows("1:" & zkZ).Copy
With shTB
For s = vS + 1 To bS                      ' + 1
.Paste Destination:=.Cells(zNrn(s, 1), 1)
.Range("K" & zNrn(s, 1) + 7) = s
Next
End With
Set rB = Sheets("Bearbeiten").Range("A1:L" & ZpS)
With shTB
For s = vS To bS
rB.Offset((s - 1) * ZpS).Copy .Cells(zNrn(s, 2), 1)
Next
End With
' nach Ablauf der Schleife hat s den Wert bS+1, also 1 mehr als eigentlich erwartet
If Zm > (s - 1) * ZpS Then
Set rB = rB.Offset((s - 1) * ZpS).Resize(r)
mitKopie = True
Else
mitKopie = False
End If
With Sheets("Endblatt")
.Range("A20:L30").ClearContents
.Rows("1:" & zkZ).Copy shTB.Cells(zNrn(s, 1), 1)
End With
If mitKopie Then rB.Copy shTB.Cells(zNrn(s, 2), 1)
shTB.Range("K" & zNrn(s, 1) + 7) = s
MsgBox "fertig"
End Sub
Sub D_zeilen()
Dim z&
With Sheets("Bearbeiten")
z = .Range("C" & .Rows.Count).End(xlUp).Row
End With
With Sheets(Druck)
.Range("O6") = z
.Range("t8") = .Range("q10")
.Range("s8") = 1
.Range("t9") = 0
End With
End Sub
Sub D_Drucken()
Dim MBn&, s&, vS&, bS&, ZpS& ' MBnach, Seite, von .. bis Seite, Zeilen pro Seite
Dim MBl&, Zm&, r& 'letzte MB, Zeilen max., Rest
Dim rB As Range ' Bereich im Blatt "Bearbeiten"
Dim mitKopie As Boolean ' gibt es noch Zeilen für das Endblatt?
With Sheets(Druck)
MBn = .Range("t6")
vS = .Range("s8")
bS = .Range("t8")
ZpS = .Range("o8")
Zm = .Range("o6")
r = .Range("q8")
End With
Set rB = Sheets("Bearbeiten").Range("A1:L" & ZpS)
With Sheets(Druck)
MBl = vS - 1
For s = vS To bS
rB.Offset((s - 1) * ZpS).Copy .Range("A20")
.Range("t9") = s: .Range("k8") = s
.PrintPreview
If s - MBl >= MBn And MBl  (s - 1) * ZpS Then
Set rB = rB.Offset((s - 1) * ZpS).Resize(r)
mitKopie = True
Else
mitKopie = False
End If
With Sheets("Endblatt")
.Range("A20:L30").ClearContents
If mitKopie Then rB.Copy .Range("A20")
.Range("k8") = s
.PrintPreview
End With
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

ListView in Excel 64 Bit optimal nutzen


Schritt-für-Schritt-Anleitung

  1. Überprüfung der Excel-Version: Stelle sicher, dass Du die 64 Bit-Version von Office 2016 installiert hast, falls Du große Dateien (über 2 GB) verarbeiten möchtest.

  2. Installiere das Steuerelement "ListView": Dieses Steuerelement ist in der 64 Bit-Version nicht standardmäßig verfügbar. Du kannst es versuchen, indem Du die Datei MSCOMCTL.OCX manuell installierst. Suche dazu nach Anleitungen zur Installation von ActiveX-Steuerelementen in Excel.

  3. VBA-Programmierung: Wenn Du mit VBA arbeitest, stelle sicher, dass Dein Code an die 64 Bit-Umgebung angepasst ist. Achte darauf, dass Du die richtigen Datentypen verwendest, z.B. Long statt Integer.

  4. Drucken per VBA: Wenn Du große Tabellen drucken möchtest, optimiere Deinen Druckcode, um die Verarbeitungszeit zu reduzieren.

  5. Testen und Anpassen: Teste Deinen VBA-Code regelmäßig, um sicherzustellen, dass alles wie gewünscht funktioniert und passe ihn gegebenenfalls an.


Häufige Fehler und Lösungen

  • Fehler beim Zugriff auf "ListView":

    • Lösung: Stelle sicher, dass das Steuerelement korrekt registriert ist. Verwende die Eingabeaufforderung mit Administratorrechten und führe den Befehl regsvr32 MSCOMCTL.OCX aus.
  • Lange Verarbeitungszeiten beim Drucken:

    • Lösung: Reduziere die Anzahl der formatierten Zellen oder teste das Drucken ohne Rahmenformatierungen. Du kannst die Formatierung im Druckbereich beibehalten, indem Du nur die Zellinhalte kopierst.

Alternative Methoden

  • Nutzung der 32 Bit-Version: Wenn Du keine großen Dateien verarbeiten musst, könnte die 32 Bit-Version für Deine Bedürfnisse ausreichend sein. Diese Version ist stabiler und benötigt weniger Systemressourcen.

  • VBA optimieren: Achte darauf, dass Du nur benötigte Daten kopierst und überflüssige Formatierungen vermeidest. Eine einfache Kopier-Anweisung könnte so aussehen:

Sheets("Bearbeiten").Range("A1:L3000").Copy Destination:=Sheets("Startblatt").Range("A1")

Praktische Beispiele

Wenn Du mit großen Datenmengen arbeitest, kann es hilfreich sein, den Druckcode wie folgt zu strukturieren:

Sub SchnellerDrucken()
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Set wsSource = ThisWorkbook.Sheets("Bearbeiten")
    Set wsDest = ThisWorkbook.Sheets("Startblatt")

    ' Nur Zellinhalte kopieren
    wsSource.Range("A1:L3000").Copy
    wsDest.Range("A1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

Dieses Beispiel zeigt, wie Du nur die Werte ohne Formatierungen von "Bearbeiten" nach "Startblatt" kopieren kannst, um die Verarbeitungszeit zu verkürzen.


Tipps für Profis

  • Verwende Excel-Tabellen: Wenn Du mit großen Datenmengen arbeitest, konvertiere Deine Daten in Excel-Tabellen. Dies kann die Verarbeitungszeit erheblich reduzieren und die Handhabung der Daten erleichtern.

  • Fehlerprotokollierung: Implementiere ein einfaches Fehlerprotokoll in Deinem VBA-Code, um mögliche Probleme schnell zu identifizieren und zu beheben.

  • Regelmäßige Backups: Erstelle regelmäßig Backups Deiner Excel-Dateien, besonders wenn Du mit VBA arbeitest, um Verlust von Arbeit zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich das Steuerelement "ListView" in Excel 64 Bit aktivieren?
Du musst das Steuerelement manuell installieren, indem Du die Datei MSCOMCTL.OCX registrierst.

2. Welche Version ist besser für große Datenmengen geeignet?
Die 64 Bit-Version ist optimal, wenn Du regelmäßig große Dateien (über 2 GB) verarbeiten musst. Ansonsten könnte auch die 32 Bit-Version ausreichend sein.

3. Wie kann ich die Druckgeschwindigkeit über VBA verbessern?
Vermeide es, Formatierungen zu kopieren, wenn es nicht notwendig ist. Nutze die PasteSpecial Methode, um nur Zellinhalte zu übertragen.

4. Gibt es eine Möglichkeit, die Verarbeitungsgeschwindigkeit von Excel zu erhöhen?
Ja, du kannst Application.ScreenUpdating = False verwenden, um die Bildschirmaktualisierung während des VBA-Codes zu deaktivieren, was die Geschwindigkeit erhöhen kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige