web-dev-qa-db-de.com

Wie kann dieselbe Datei auf zwei verschiedenen Computern zu unterschiedlichen Ergebnissen führen?

Ich habe ein VBA-Skript erstellt, das Werte aus einem Blatt liest und ein "Label" auf einem anderen Blatt erstellt.
Dieses Etikett soll auf einem dreiteiligen Spezialpapier gedruckt werden. 

Seit ich in Schweden lebe, verwenden wir das A4-Papierformat (297 x 210 mm). Die Etiketten sollen 99x210 mm betragen.
Dies bedeutet, dass jeder Wert genau an der Position auf dem Papier gedruckt werden muss. 

Ich mache das für mein Unternehmen, daher sind alle Computer gleich.
Gleiches Modell, gleiche Version von Windows, gleiche Version von Excel. 

Dies ist ein kleiner Teil des Codes (was für die Positionierung von Text relevant ist) 

For i = 2 To Lastrow

        ' Location name
        Sheets("Etikett").Range("A" & intRad) = Sheets("Bins").Range("A" & i)
        With Sheets("Etikett").Range("A" & intRad & ":K" & intRad)
            .MergeCells = True
            .Font.Color = clr 
            .Font.Size = 150
            .Font.Bold = True
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThick
            .Borders.Color = clr
            .Borders(xlEdgeLeft).Weight = xlThick ' this may look odd but is needed
            .Borders(xlEdgeRight).Weight = xlThick
        End With

        'Checknumber
        Sheets("Etikett").Range("B" & intRad + 1) = Sheets("Bins").Range("B" & i)
        With Sheets("Etikett").Range("B" & intRad + 1 & ":D" & intRad + 1)
            .MergeCells = True
            .Font.Color = clr
            .Font.Size = 100
            .NumberFormat = "00"
            .Font.Bold = True
            .VerticalAlignment = xlCenter
            .HorizontalAlignment = xlCenter
        End With

        ' old location
        If Sheets("Bins").Range("E" & i) <> "" Then
            Sheets("Etikett").Range("K" & intRad + 1) = Sheets("Bins").Range("E" & i)
            With Sheets("Etikett").Range("K" & intRad + 1)
                .MergeCells = True
                .Font.Color = clr
                .Font.Size = 8
                .Font.Bold = True
                .VerticalAlignment = xlBottom
                .HorizontalAlignment = xlLeft
            End With
        End If

        ' copy already premade barcode or generate barcode if not premade
        If Sheets("Bins").Cells(i, 2) < 100 Then
            Sheets("0-99").Select
            shp = "B" & Right("0" & Sheets("Bins").Cells(i, 2), 2)
            Sheets("0-99").Shapes(shp).Select
        Else
            Sheets("VBA").Select
            ThisWorkbook.ActiveSheet.Shapes.SelectAll
            Selection.Delete

            Code128Generate_v2 30, 0, 40, 2.5, ThisWorkbook.ActiveSheet, Sheets("Bins").Cells(i, 2), 200
            ThisWorkbook.ActiveSheet.Shapes.SelectAll
            Selection.ShapeRange.Group.Select
        End If

        'color the barcode
        Selection.ShapeRange.Line.ForeColor.RGB = clr

        Selection.Copy
        Sheets("Etikett").Select
        Sheets("Etikett").Range("G" & intRad + 1 & ":J" & intRad + 1).MergeCells = True

        ' Set rowheights
        Sheets("Etikett").Rows(intRad).RowHeight = 135
        Sheets("Etikett").Rows(intRad + 1).RowHeight = 115
        If Etikettcount Mod 3 = 0 Then ' if it's the last label on paper, no space is needed between this and the next.
            Range("G" & intRad + 1).Select
            intRad = intRad - 1 
        Else
            Sheets("Etikett").Rows(intRad + 2).RowHeight = 25
            Range("G" & intRad + 1).Select
        End If
        ActiveSheet.Paste ' paste barcode

        Etikettcount = Etikettcount + 1
        intRad = intRad + 3
    End If
Next i

Beachten Sie, dass dies nicht der gesamte Code ist, sondern der Text und die Barcodes kopiert und auf dem Blatt platziert wird. 

Auf meinem Computer ist die Ausgabe wie erwartet:
Druckausgabe
 enter image description here

Bei anderen Computern ist das letzte Zeichen leicht abgeschnitten und die vertikale Ausrichtung ist nicht korrekt.
Wie ich bereits schrieb, brauche ich, dass der Leerraum zwischen den Etiketten etwa 99 mm von oben und dann 99 mm zwischen ihnen liegt. 

Ich habe die vollständige Datei hochgeladen, wenn jemand sie hier testen möchte: http://hoppvader.nu/docs/Streckkod.xlsm
Beachten Sie, dass nur das Modul3 verwendet wird. Wenn Sie eine andere Kontrollnummer als "Checksiffra" wählen, ist das Modul2 anders als 00-99. 

Jede Hilfe wird geschätzt, warum sie nur auf meinem Computer funktioniert.

15
Andreas

Die Ausgabe kann durch viele Faktoren beeinflusst werden, z. B. die Auflösung des Druckers, die Auflösung des Desktops, die Schriftart oder die Größe der Zellen.

Wenn ich beispielsweise auf einem neuen Blatt eine quadratische Form von 10 x 10 cm zeichne, ist das gedruckte Ergebnis ein Rechteck von 10,5 x 9,5 cm, obwohl die Skalierung im Seiten-Setup und in den erweiterten Optionen deaktiviert ist.

Um eine genaue Ausgabe zu erhalten, besteht eine Lösung darin, den Inhalt auf einem Diagrammblatt zu zeichnen, da jede Zeichnung auf diesem Blatttyp genau in Zentimetergröße gedruckt wird:

 enter image description here

Hier ein Beispiel zum Hinzufügen eines Diagrammblatts und zum Erstellen der Etiketten:

Sub DrawLabel()

  ' add new empty Chart sheet '
  Dim ch As Chart
  Set ch = ThisWorkbook.Charts.Add()
  ch.ChartArea.ClearContents
  ch.ChartArea.Format.Fill.Visible = msoFalse
  ch.ChartArea.Format.line.Visible = msoFalse

  ' setup page as A4 with no margin '
  ch.PageSetup.PaperSize = xlPaperA4
  ch.PageSetup.Orientation = xlPortrait
  ch.PageSetup.LeftMargin = 0
  ch.PageSetup.TopMargin = 0
  ch.PageSetup.RightMargin = 0
  ch.PageSetup.BottomMargin = 0
  ch.PageSetup.HeaderMargin = 0
  ch.PageSetup.FooterMargin = 0
  DoEvents ' force update '

  ' add labels
  AddText ch, x:=0.5, y:=0.5, w:=19.9, h:=4.6, Color:=vbRed, Border:=3, Size:=150, Text:="DB136C"
  AddText ch, x:=2.5, y:=5.1, w:=5, h:=4, Color:=vbRed, Border:=0, Size:=100, Text:="79"
  AddText ch, x:=0.5, y:=10, w:=19.9, h:=4.6, Color:=vbGreen, Border:=3, Size:=150, Text:="DB317A"
  AddText ch, x:=2.5, y:=14.6, w:=5, h:=4, Color:=vbGreen, Border:=0, Size:=100, Text:="35"
  AddText ch, x:=0.5, y:=19.5, w:=19.9, h:=4.6, Color:=vbBlack, Border:=3, Size:=150, Text:="AA102A"
  AddText ch, x:=2.5, y:=24.1, w:=5, h:=4, Color:=vbBlack, Border:=0, Size:=100, Text:="10"

End Sub

Private Sub AddText(self As Chart, x#, y#, w#, h#, Color&, Border#, Size#, Text$)
  With self.Shapes.AddTextBox( _
    msoTextOrientationHorizontal, _
    Application.CentimetersToPoints(x) - 8, _
    Application.CentimetersToPoints(y) - 8, _
    Application.CentimetersToPoints(w), _
    Application.CentimetersToPoints(h))

    .line.Weight = Border
    .line.ForeColor.RGB = Color
    .line.Visible = Border <> 0
    .TextFrame.VerticalAlignment = xlVAlignCenter
    .TextFrame.HorizontalAlignment = xlHAlignCenter
    .TextFrame2.TextRange.Font.Name = "Calibri"
    .TextFrame2.TextRange.Font.Size = Size
    .TextFrame2.TextRange.Font.Bold = msoTrue
    .TextFrame2.TextRange.Font.Fill.ForeColor.RGB = Color
    .TextFrame2.TextRange.Text = Text
  End With
End Sub
8
Florent B.

Überprüfen Sie die Spaltenbreite und vergleichen Sie die Spaltenbreiten Ihres Computers mit den anderen, falls sie sich unterscheiden. Dies ist wahrscheinlich ein Problem mit der Schriftartversion:

  • Prüfen Sie, welche Schriftart Sie in Ihrem Arbeitsblatt verwenden. 
  • Prüfen Sie, welche Version der Schriftart sich auf Ihrem Computer und welche auf dem anderen Computer befindet.
  • Überprüfen Sie außerdem die Schriftartversionen von Calibri und Cambria auf beiden Computern (da dies die Standardeinstellungen von Microsoft sind).

Stellen Sie sicher, dass Sie auf allen Computern die gleiche Schriftartversion installieren!

Das Problem hier ist wahrscheinlich, dass Excel die Spaltenbreite anhand der Zeichenbreite bestimmt (siehe Beschreibung, wie Spaltenbreiten in Excel bestimmt werden). Wenn sich also die Schriftart ändert, ändert sich die Spaltenbreite.

Ich hatte vor einiger Zeit einige Probleme, als Microsoft Update eine falsche Schriftartdatei mit einer anderen Zeichenbreite lieferte. Wenn sich eine dieser falschen Dateien auf Ihrem Computer befindet, wird die Spaltenbreite falsch berechnet.
Siehe auch: Warum unterscheidet sich die Pixelbreite der Excel-Spalte auf verschiedenen Maschinen, aber demselben Betriebssystem, derselben Auflösung, derselben Excel-Version usw.?

2
Pᴇʜ

wenn Sie zum Drucken gehen, sollte es eine Option geben: "Anpassen" Möglicherweise sind erweiterte Optionen vorhanden. Auf einem Mac musste ich auf "Details anzeigen" klicken.

Ich habe früher so vba. Und ich bin ein Computerprogrammierer. Das Problem scheint jedoch kein Code-Problem zu sein. 

ps- Sie könnten wahrscheinlich einen Weg finden, um "skalierbar zu passen" über Makro zu aktivieren. __ Hier sind einige Ressourcen für eine Programmierlösung: https://www.ozgrid.com/forum/forum/hilfe-foren/Excel allgemein/5968-force-printing-macro-to-fit-page

https://www.experts-exchange.com/questions/28156905/VBA-Print-Code-Print-Area-Fit-on-on-one-page.html

auszug aus dem obigen Link von Patrick Matthews gelöst

 With Worksheets("name").PageSetup
   .Zoom = False
   .FitToPagesTall = 1
   .FitToPagesWide = 1
 End With

Wie wäre es mit dem Code-Snippet auf @Andreas? 

entfernen Sie zusätzlich .FitToPagesTall

 With Worksheets("name").PageSetup
   .Zoom = False
   .FitToPagesWide = 1
 End With

hoffentlich wird es dann nicht vertikal ausgerichtet, sondern immer noch horizontal ausgerichtet.

2
Michael Dimmitt

Es hört sich so an, als ob dieselbe Datei auf einem anderen Computer zu verwenden , nicht Ihr Problem ist. Die Datei ist nur einer von vielen Faktoren, die sich auf das Druckergebnis eines Dokuments auswirken.

  • Der Windows-Druckertreiber kann auf jedem Computer eine andere Version haben (dh er wurde auf dem einen, aber nicht auf dem anderen Computer aktualisiert)

  • Die Windows-Druckereinstellungen können sich von Computer zu Computer geringfügig unterscheiden.

Ich weiß, dass Sie unbeirrt sind, dass die beiden Computer identisch sind und dass diese Einstellungen nicht geändert werden können, aber solche Unterschiede auf scheinbar identischen Arbeitsstationen immer wieder auftreten durch eine beliebige Anzahl von unerwarteten Variablen. (dh "Einmal, als ein Windows Update auf die beiden Computer übertragen wurde, wurde einer versehentlich ausgeschaltet und konnte das Update nicht ordnungsgemäß abrufen oder installieren.")

Es gibt unzählige verdeckte Druckereinstellungen und andere Variablen, die möglicherweise die Ursache für Ihr Problem sind und auf verschiedenen Ebenen verborgen sind. (dh Systemebene, Geräteebene, Anwendungsebene)


Nachfolgend finden Sie drei Arten von Eigenschaften, bei denen es sich wahrscheinlich um den Täter handelt. Überprüfen Sie alle drei Stellen von beiden Computern und vergleichen Sie die Einstellungen.

Gerätemanager

  • Schlagen Sie die Windows KeyWindows-Taste, geben Sie device manger und Push ein Enter

  • Doppelklicken Sie auf Imaging Devices, klicken Sie mit der rechten Maustaste auf den gewünschten Drucker und wählen Sie Properties

  • Klicken Sie auf die Registerkarte Driver, und notieren Sie sich den Driver Date und den Driver Version.

  • Wiederholen Sie diese Schritte auf dem anderen Computer, um das Treiberdatum und die Treiberversion zu vergleichen.

Wenn sie nicht übereinstimmen, lassen Sie sie übereinstimmen. Wenn Sie keinen Zugang zu einem dieser Bereiche haben oder sich nicht sicher sind, welche Option Sie ändern sollen, wenden Sie sich an Ihren Kundenbetreuer. Abteilung.

Druckerhersteller-Einstellungen

  • Schlagen Sie die Windows KeyWindows-Taste, geben Sie printers und Push ein Enter

  • Klicken Sie mit der rechten Maustaste auf den gewünschten Drucker und wählen Sie Printer Preferences

  • Das Layout dieses Fensters hängt vom Hersteller Ihres Druckers ab. Durchsuchen Sie alle Werte auf allen Registerkarten nach Unterschieden zwischen den beiden Einstellungen auf den beiden Computern.

Druckereigenschaften

  • Gehe zu Control PanelHardware and SoundDevices and Printers

  • Klicken Sie mit der rechten Maustaste auf den gewünschten Drucker und wählen Sie Printer Properties

  • Durchsuchen Sie alle Werte auf allen Registerkarten nach Unterschieden zwischen den beiden Einstellungen auf den beiden Computern.

  • Zum Schluss drucken Sie eine Testseite auf dem gewünschten Drucker von beiden Computern aus und untersuchen Sie sie genau auf Unterschiede (einschließlich Versionsnummern) .

0
ashleedawg