Как может тот же файл на двух разных компьютерах давать разные результаты?

Я создал скрипт VBA, который будет считывать значения с одного листа и создавать "метку" на другом листе.
Предполагается, что этот ярлык будет напечатан на специальной бумаге, разделенной на три части.

Поскольку я живу в Швеции, мы используем формат бумаги A4 (297x210 мм). Пластины должны быть 99x210 мм.
Это означает, что каждое значение должно быть напечатано в точном месте на бумаге.

Я делаю это для своей компании, поэтому все копираусы точно такие же.
Такая же модель, такая же версия Windows, та же версия Excel.

Это небольшая часть кода (что имеет отношение к позиционированию текста)

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 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

Имейте в виду, что это не весь код, но это то, что копирует текст и штрих-коды и помещает их на листе.

На моем компьютере выход выглядит так, как ожидалось:
выход для печати
enter image description here

На других компьютерах последний символ слегка обрезается, а вертикальное выравнивание неверно.
Как я писал ранее, мне нужно, чтобы пустое пространство между листами составляло около 99 мм от вершины, а затем между ними 99 мм.

Я загрузил полный файл, если кто-то хочет его протестировать здесь: http://hoppvader.nu/docs/Streckkod.xlsm
Обратите внимание, что только модуль 3, который используется, module2 - это если вы выберете контрольный номер "Checksiffra", отличный от 00-99.

Любая помощь приветствуется, почему она работает только на моем компьютере.

Ответы

Ответ 1

На выход могут влиять многие параметры, такие как разрешение принтера, разрешение рабочего стола, шрифт или размер ячеек.

Например, когда я рисую квадратную форму размером 10 см на 10 см на новом листе, напечатанный результат представляет собой прямоугольник размером 10,5 см х 9,5 см, даже если масштабирование отключено в настройках страницы и в дополнительных параметрах.

Чтобы получить точный результат, одним из решений было бы нарисовать содержимое в Листе диаграмм, поскольку любой чертеж на этом типе листа печатается с точным размером, указанным в сантиметре:

enter image description here

Здесь приведен пример добавления листа диаграммы и создания меток:

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

Ответ 2

Проверьте ширину столбца и сравните ширину столбцов ваших компьютеров с другими, если они разные, это, вероятно, проблема с версией шрифта:

  • Проверьте, какой шрифт вы используете в своем листе.
  • Проверьте, какая версия шрифта находится на вашем компьютере и какая находится на другом компьютере.
  • Кроме того, проверьте версии шрифтов Calibri и Cambria на обоих компьютерах (поскольку они являются стандартными по умолчанию Microsoft).

Убедитесь, что вы устанавливаете ту же версию шрифта на всех компьютерах!

Вероятно, проблема заключается в том, что Excel определяет ширину столбца по ширине символа (см. Описание того, как ширина столбцов определяется в Excel). Поэтому, если шрифт изменяет ширину столбца.

У меня были некоторые проблемы, подобные тому, когда Microsoft Update доставил неправильный файл шрифта с различной шириной символов. Если один из этих неправильных файлов находится на вашем или другом компьютере, тогда ширина столбца вычисляется неправильно.
Также см.: Почему ширина столбца Excel равна ширине столбца на разных компьютерах, но такая же ОС, такое же разрешение, то же Excel verison и т.д.?

Ответ 3

должен быть вариант, когда вы переходите к печати: "шкала для соответствия". Это могут быть расширенные параметры. На mac мне пришлось нажать "Показать детали",

Я привык к этому vba. И я компьютерный программист. Но проблема, похоже, не проблема с кодом.

ps-, вы, вероятно, можете найти способ включить "масштабирование" с помощью макроса. Вот некоторые ресурсы для проверки программного решения: https://www.ozgrid.com/forum/forum/help-forums/excel-general/5968-force-printing-macro-to-fit-page

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

выдержка из вышеупомянутой ссылки, разрешенной Патриком Мэтьюсом

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

Отвечая на @Andreas, как насчет фрагмента кода?

дополнительно удалите.FitToPagesTall

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

надеюсь, тогда он не будет выровнен по вертикали, но все равно будет выровнен по горизонтали.

Ответ 4

Похоже, что использование одного и того же файла на другом компьютере не является вашей проблемой. Файл является лишь одним из многих факторов, влияющих на конечный результат печати документа.

  • Драйвер принтера Windows может быть разными версиями на каждом из компьютеров (то есть, был обновлен на одном, но не на другом)

  • Настройки принтера для Windows могут быть несколько разными между каждым из компьютеров.

Я знаю, что вы категоричны, что оба компьютера идентичны и эти параметры не могут быть изменены, но разница, подобная этой, на кажущихся идентичными рабочими станциями, происходит все время, вызванное любым количеством неожиданных переменных. (т.е. "Один раз, когда Windows Update был перенесен на две машины, один из них был отключен и неправильно загрузил или установил обновление".)

Есть тонна скрытых настроек принтера и другие переменные, которые могут стать потенциальной причиной вашей проблемы, скрытой на разных уровнях. (то есть системного уровня, уровня устройства, уровня приложения)


Ниже, как найти три набора свойств, которые, вероятно, являются нарушителями. Проверьте все три места на обоих компьютерах и сравните настройки.

Диспетчер устройств

  • Нажмите клавишу Windows Key Windows Key, введите ящик device manger и нажмите Enter

  • Дважды щелкните значок " Imaging Devices затем щелкните правой кнопкой мыши нужный принтер и выберите " Properties

  • Перейдите на вкладку " Driver " и обратите внимание на Driver Date и Driver Version

  • Повторите эти шаги на другом компьютере, чтобы сравнить дату и версию драйвера.

Если они не совпадают, сделайте их совпадающими. Если у вас нет доступа к какой-либо из этих областей или вы не знаете, какой вариант изменить, обратитесь в свой ИТ-отдел.

Настройки принтера

  • Нажмите кнопку Windows Key Windows Key, напечатайте printers и нажмите Enter

  • Щелкните правой кнопкой мыши нужный принтер и выберите " Printer Preferences

  • Расположение этого окна зависит от производителя вашего принтера. Проверьте все значения на всех вкладках, ищите различия между двумя настройками на двух машинах.

Свойства принтера

  • Перейти к Control PanelHardware and SoundDevices and Printers

  • Щелкните правой кнопкой мыши нужный принтер и выберите " Printer Properties

  • Проверьте все значения на всех вкладках, ищите различия между двумя настройками на двух машинах.

  • Наконец, распечатайте тестовую страницу на нужном принтере с обоих компьютеров и внимательно осмотрите их для любых различий (включая номера версий).

Ответ 5

Начну с проверки того, установлены ли все параметры печати (принтеры также имеют внутренние настройки печати по умолчанию, которые могут помешать желаемой печати). И если шрифт, который вы используете, установлен на рабочих компьютерах.

Затем я добавлю следующий код VBA, чтобы убедиться, что параметры печати Excel одинаковы на всех компьютерах (это только для того, чтобы дать вам подсказку и небольшая часть того, что можно установить)

With Sheets("Etikett").PageSetup
    .PaperSize = xlPaperA4
    .PrintQuality = 600
    .CenterHorizontally = False
    .CenterVertically = False
    .Orientation = xlPortrait
    .FitToPagesWide = 1
    .FitToPagesTall = 1
End With

И если выше не помогает... Читайте ниже.

Отпечатки MS Office немного сложны. Проблема в том, что Excel (и не только Excel) не способен генерировать предварительные просмотры для печати самостоятельно, и что он делает? Он отправляет все данные на принтер (так это принтер, который выполняет задание) и просто "пересылает" результаты обратно. Обычно это не проблема и остается незамеченным, пока кто-то не попытается создать превосходные отпечатки пикселей.

У меня была аналогичная проблема в моей компании, где мы использовали адресные ярлыки для почтовых наклеек. После того, как наш принтер сломался, и у нас появилась блестящая новая (совершенно другая модель, бренд и т.д.), Наши шаблоны были беспорядком и должны были быть выровнены.

Таким образом, все-в-одном это может сводиться к драйверам принтера...