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
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.
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:
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
Ü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:
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.?
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
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.
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.
Schlagen Sie die Windows-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
.
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.
Schlagen Sie die Windows-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.
Gehe zu Control Panel
→ Hardware and Sound
→ Devices 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) .