어떻게 두 개의 다른 컴퓨터에 있는 같은 파일이 다른 결과를 줄 수 있습니까?
한 장에서 값을 읽고 다른 한 장에 "라벨"을 만드는 VBA 스크립트를 만들었습니다.
이 라벨은 세 부분으로 나뉜 특수 종이에 인쇄되어야 합니다.
저는 스웨덴에 살고 있기 때문에 A4용지 사이즈(297x210mm)를 사용합니다.라벨은 99x210mm로 되어있습니다.
즉, 각 값을 용지의 정확한 위치에 인쇄해야 합니다.
저는 회사를 위해서 하는 일이기 때문에 모든 컴퓨터 사용자는 똑같습니다.
같은 모델, 같은 버전의 윈도우, 같은 버전의 엑셀
코드의 작은 부분입니다(텍스트 위치 지정과 관련된 것).
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
이것이 코드의 전부는 아니지만 텍스트와 바코드를 복사하여 시트에 배치하는 것입니다.
다른 컴퓨터에서는 마지막 문자가 약간 잘리고 세로 정렬이 올바르지 않습니다.
아까도 썼듯이 라벨 사이의 빈 공간이 위에서부터 99mm 정도가 되어야 하고 그 사이에 99mm가 있어야 합니다.
누군가 테스트하고 싶다면 여기에 전체 파일을 업로드했습니다. http://hoppvader.nu/docs/Streckkod.xlsm
사용되는 것은 모듈 3뿐이며, 모듈 2는 00-99 이외의 체크 번호 "Checksiffra"를 선택하는 경우입니다.
내 컴퓨터에서만 작동하는 이유에 대해 도움을 주시면 감사하겠습니다.
출력은 프린터의 해상도, 바탕 화면의 해상도, 글꼴 또는 셀 크기와 같은 여러 가지에 영향을 받을 수 있습니다.
예를 들어 새 시트에 가로 10cm, 세로 10cm 정사각형 모양을 그리면 페이지 설정 및 고급 옵션에서 스케일링이 비활성화되어 있어도 인쇄 결과가 10.5cm x 9.5cm 직사각형입니다.
정확한 출력을 얻기 위해서는 이 유형의 시트에 있는 도면이 센티미터 단위로 제공된 정확한 크기로 인쇄되므로 차트 시트에 내용을 그리는 것이 한 가지 해결책입니다.
차트 시트를 추가하고 레이블을 만드는 예는 다음과 같습니다.
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
열 너비를 확인하고 컴퓨터의 열 너비가 다른 경우 컴퓨터의 열 너비를 비교합니다. 이 문제는 글꼴 버전 문제일 수 있습니다.
- 용지에 사용하는 글꼴을 확인합니다.
- 컴퓨터에 있는 글꼴 버전과 다른 컴퓨터에 있는 글꼴을 확인합니다.
- 또한 두 컴퓨터 모두에서 Calibri와 Cambria 글꼴 버전을 확인합니다(이 버전들은 Microsoft의 기본값이기 때문입니다.
모든 컴퓨터에 동일한 글꼴 버전을 설치해야 합니다!
여기서 문제는 Excel이 열 너비를 문자 너비로 결정한다는 것입니다(Excel에서 열 너비 결정 방법 설명 참조).따라서 글꼴이 변경되면 열 너비가 변경됩니다.
얼마 전 마이크로소프트 업데이트에서 문자 너비가 다른 글꼴 파일을 잘못 전달했을 때 그런 문제가 있었습니다.이러한 잘못된 파일 중 하나가 사용자의 컴퓨터나 다른 컴퓨터에 있으면 열 너비가 잘못 계산됩니다.
참고 항목:엑셀 컬럼 픽셀 폭은 기계마다 다른데 OS, 해상도, 엑셀 버전 등이 다른 이유는 무엇입니까?
인쇄를 시작할 때는 "scale to fit"이라는 옵션이 있어야 합니다. 고급 옵션에 있을 수도 있습니다.Mac에서 "상세 정보 표시"를 클릭해야 했습니다.
전 sovba를 했었습니다.그리고 컴퓨터 프로그래머입니다.하지만 그 문제는 코드 문제가 아닌 것 같습니다.
ps- 매크로를 통해 "스케일 투 핏(scale to fit)"을 활성화하는 방법을 찾을 수 있을 것입니다.프로그래밍 솔루션에 대해 확인해야 할 몇 가지 리소스는 다음과 같습니다. 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에 대한 답변으로 코드 스니펫은 어떻습니까?
추가로 제거합니다.페이지에 맞춤 높이
With Worksheets("name").PageSetup
.Zoom = False
.FitToPagesWide = 1
End With
그러면 수직으로 정렬되지 않고 수평으로 정렬되기를 바랍니다.
다른 컴퓨터에서 같은 파일을 사용하는 것은 문제가 되지 않는 것 같습니다.파일은 문서의 인쇄된 최종 결과에 영향을 미치는 많은 요소 중 하나일 뿐입니다.
Windows 프린터 드라이버는 각각의 컴퓨터에서 다른 버전일 수 있습니다(즉, 한 컴퓨터에서는 업데이트되었지만 다른 컴퓨터에서는 업데이트되지 않았습니다).
각 컴퓨터마다 Windows 프린터 설정이 약간 다를 수 있습니다.
두 컴퓨터가 동일하고 설정을 변경할 수 없다고 단호히 말하지만, 동일한 워크스테이션에서 이와 같은 차이는 항상 예상치 못한 변수로 인해 발생합니다. (즉, 한 번은 Windows Update를 두 컴퓨터에 푸시했을 때, 그 중 하나가 실수로 전원이 꺼졌고 업데이트를 제대로 검색하거나 설치하지 않았습니다.")
다양한 수준에서 숨겨진 프린터 설정 및 문제의 잠재적 원인이 될 수 있는 기타 변수가 많이 있습니다(예: 시스템 수준, 장치 수준, 응용 프로그램 수준).
아래는 범인일 가능성이 높은 세 세트의 속성을 찾는 방법입니다.두 컴퓨터에서 세 곳을 모두 확인하고 설정을 비교합니다.
장치 관리자
Windows 키를 누르고 입력합니다.
device manger밀어서더블클릭
Imaging Devices그런 다음 원하는 프린터를 마우스 오른쪽 버튼으로 클릭하고 선택합니다.Properties클릭합니다.
Driver탭, 그리고 주의할 것.Driver Date그리고.Driver Version- 다른 컴퓨터에서 이 단계를 반복하여 드라이버 날짜와 버전을 비교합니다.
일치하지 않으면 일치시킵니다.이러한 영역에 액세스할 수 없거나 어떤 옵션을 변경해야 할지 잘 모르는 경우 IT 부서에 문의하십시오.
프린터 제조업체 설정
Windows 키를 누르고 입력합니다.
printers밀어서원하는 프린터를 마우스 오른쪽 버튼으로 클릭하고 선택합니다.
이 창의 레이아웃은 프린터 제조업체에 따라 달라집니다.모든 탭의 모든 값을 확인하고 두 기계의 두 설정 간의 차이를 찾습니다.
프린터 속성
에 가다
Control Panel→Hardware and Sound→Devices and Printers원하는 프린터를 마우스 오른쪽 버튼으로 클릭하고 선택합니다.
모든 탭의 모든 값을 확인하고 두 기계의 두 설정 간의 차이를 찾습니다.
마지막으로 두 컴퓨터에서 원하는 프린터의 테스트 페이지를 인쇄하고 차이점(버전 번호 포함)을 면밀히 검사합니다.
모든 인쇄 설정이 원하는 대로 설정되어 있는지 확인하는 것부터 시작하겠습니다(프린터에는 원하는 인쇄에 방해가 될 수 있는 내부 "기본" 인쇄 설정도 있습니다).그리고 사용 중인 글꼴이 회사 컴퓨터에 설치되어 있는 경우.
그러면 Excel 인쇄 설정이 모든 컴퓨터에서 동일한지 확인하기 위해 다음과 같은 VBA 코드를 추가합니다(이것은 힌트를 주기 위한 것일 뿐 설정할 수 있는 것의 작은 부분입니다).
With Sheets("Etikett").PageSetup
.PaperSize = xlPaperA4
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
만약 위의 내용이 도움이 되지 않는다면...아래를 읽어보세요.
MS 오피스 프린트는 좀 까다로운 부분입니다.문제는 엑셀(엑셀 뿐만 아니라) 자체적으로 인쇄 미리보기를 생성할 수 없다는 것인데, 어떻게 됩니까?모든 데이터를 프린터로 전송하고(따라서 작업을 수행하는 것은 프린터입니다) 결과를 "전달"합니다.이것은 보통 문제가 되지 않으며 누군가 픽셀에 완벽한 프린트를 디자인하려고 할 때까지 눈에 띄지 않습니다.
우리 회사에서도 비슷한 문제가 있었는데, 우편 스티커에 주소 라벨을 사용하고 있었습니다.프린터가 고장이 나서 새 프린터(전혀 다른 모델, 브랜드 등)를 구입한 후 템플릿이 엉망이 되어 다시 정렬해야 했습니다.
프린터 운전사들에게 모든 걸 바칠 수 있도록...
언급URL : https://stackoverflow.com/questions/49108068/how-can-the-same-file-on-two-different-computers-give-different-result
'programing' 카테고리의 다른 글
| 자바스크립트에서 빈 문자열은 항상 부울로 거짓입니까? (0) | 2023.09.25 |
|---|---|
| jquery에서 wait () 아니면 sleep () 기능? (0) | 2023.09.25 |
| JQuery / JavaScript와 연결할 메일 호출 / 클릭 (0) | 2023.09.25 |
| eslint는 devDependency가 아니라 프로젝트의 종속성에 나열되어야 합니다. (0) | 2023.09.25 |
| 서버 시스템 이름을 ASP로 가져옵니다.NET MVC? (0) | 2023.09.25 |

