Excel 使用VBA缩放两列以适应页面
我在将Excel中的列放入工作表时遇到问题。 我有一个从a到CK列的工作表(每个项目可以不同)。 我不需要打印A列,但B列必须在所有页面上,B列旁边必须有3列。这将使第一页的“B,C:E”列,下一页的“B,F:H”列等等。。。列B被设置为标题,因此它将打印在每一页上 我的问题是设置刻度。我在做什么:Excel 使用VBA缩放两列以适应页面,excel,vba,Excel,Vba,我在将Excel中的列放入工作表时遇到问题。 我有一个从a到CK列的工作表(每个项目可以不同)。 我不需要打印A列,但B列必须在所有页面上,B列旁边必须有3列。这将使第一页的“B,C:E”列,下一页的“B,F:H”列等等。。。列B被设置为标题,因此它将打印在每一页上 我的问题是设置刻度。我在做什么: 取pagesize并转换为点,取左边距和右边距=我的可打印区域 获取范围宽度(“B:E”)=适合页面的我的范围 将我的可打印区域除以适合的范围,乘以100%,然后提取1%以确保适合 在我的情况下
- 取pagesize并转换为点,取左边距和右边距=我的可打印区域
- 获取范围宽度(“B:E”)=适合页面的我的范围
- 将我的可打印区域除以适合的范围,乘以100%,然后提取1%以确保适合
If ActiveSheet.Name = "Meterkastlijst" Then
Dim lngZoom As Long
Dim lngKolB As Long
Dim lngPagB As Long
lngKolB = ActiveSheet.Range("B:E").Width
If ActiveSheet.PageSetup.PaperSize = xlPaperA4 Then
lngPagB = CLng(Application.CentimetersToPoints(21)) - CLng((ActiveSheet.PageSetup.LeftMargin + ActiveSheet.PageSetup.RightMargin))
ElseIf ActiveSheet.PageSetup.PaperSize = xlPaperA3 Then
lngPagB = CLng(Application.CentimetersToPoints(29.7)) - CLng((ActiveSheet.PageSetup.LeftMargin + ActiveSheet.PageSetup.RightMargin))
End If
If lngPagB <> 0 And lngKolB <> 0 Then
lngZoom = ((lngPagB / lngKolB) * 100) - 1
With ActiveSheet.PageSetup
.Zoom = lngZoom
End With
End If
End If
如果ActiveSheet.Name=“Meterkastlijst”那么
昏暗的房间和长的一样
暗长的
变暗lngPagB为长
lngKolB=ActiveSheet.Range(“B:E”).Width
如果ActiveSheet.PageSetup.PaperSize=xlPaperA4,则
lngPagB=CLng(Application.cmystopoints(21))-CLng((ActiveSheet.PageSetup.LeftMargin+ActiveSheet.PageSetup.RightMargin))
ElseIf ActiveSheet.PageSetup.PaperSize=xlPaperA3然后
lngPagB=CLng(Application.cmmstopoints(29.7))-CLng((ActiveSheet.PageSetup.LeftMargin+ActiveSheet.PageSetup.RightMargin))
如果结束
如果lngPagB 0和lngKolB 0,则
lngZoom=((lngPagB/lngKolB)*100)-1
使用ActiveSheet.PageSetup
.Zoom=lngZoom
以
如果结束
如果结束
不同宽度:
- 列B:45(319像素)->在Excel中,使用VBA设置
- 列C:15(109像素)->在Excel中,使用VBA设置
- D列:30(214像素)->在Excel中,使用VBA设置
- 列E:20(144像素)->在Excel中,使用VBA设置
- B-E列:589点->带VBA
- 页码:21厘米(595分)
- 边距(左侧和右侧):1.8厘米(50.4点)
- 打印区域:595-101(100.8)=494点
- 以字符为单位的列宽
如果通过手动值输入或鼠标设置列宽,则会看到“标准字体数字字符的数量”。有关详细信息,请参阅。
可以用VBA读取和写入此值:.Range.ColumnWidth=10.78
最大值为255 - 以点为单位的列宽
这是在手动调整列大小期间GUI中未显示的内部值。
它对应于每英寸72点。
在VBA中,只能读取:.Range.Width
- 列宽(以像素为单位)
在普通视图中手动调整列宽时,Excel以像素(括号中)显示列宽。无法在VBA中直接读取或写入此值 - 列宽(厘米或英寸)
在页面布局视图中手动调整大小时,Excel以厘米(或英寸)而不是像素显示列宽。
仅此值取决于打印缩放级别
测量单位本身可以在VBA中读取:
Application.measurementIt'0=xlin,1=xlcm,2=xlmm
Dim ScreenResolution As Double
Dim ColumnWidthChars As Double
Dim ColumnWidthPoints As Double
Dim ColumnWidthPixels As Double
Dim ColumnWidthInches As Double
Dim ColumnWidthCentimeters As Double
ScreenResolution = 120 ' normal (96 dpi) or large (120 dpi)
ColumnWidthChars = ActiveSheet.Columns(1).ColumnWidth
ColumnWidthPoints = ActiveSheet.Columns(1).Width
ColumnWidthPixels = (ColumnWidthPoints / 72) * ScreenResolution
ColumnWidthInches = ColumnWidthPoints / 72 * ActiveSheet.PageSetup.Zoom / 100
ColumnWidthCentimeters = ColumnWidthInches * 2.54
Debug.Print ColumnWidthChars, ColumnWidthPoints, ColumnWidthInches, _
ColumnWidthCentimeters, ColumnWidthPixels
可以使用API函数GetDeviceCaps(hDC,88)
舍入效应
Excel存储基于字符的.Range.ColumnWidth
,并为工作簿文件中的每个相关列使用小数。如果将其设置为100,则存储为e。g、
重新打开此文件后,报告的.ColumnWidth
为100,不带小数
如果设置较大的列宽并在普通视图和页面布局视图之间切换,则可能会在度量值之间注册约2%的差异(.Range.width
和像素突然变化)-但根据上述公式,所有值仍然相互对应
显示缩放相关性
所有不同的列宽值都与Excel的视图缩放级别和/或Windows 10显示比例无关
打印缩放相关性
如果更改打印缩放级别,则只有英寸和厘米值会更改
但你或多或少会得到我的专栏。E论文上的分数。Excel以点为单位测量
.PageSetup.Leftmargin
(刻度为每英寸72点)。这对应于.Range.Width
,它也是以点为单位测量的
示例:如果我将两张纸的边距都设置为5.5厘米,那么得到的A4纸张宽度为10厘米的值将保持e。G两列,总宽度.Width
约。283点,相当于72点/英寸。
如果我将打印缩放设置为83%a.Width
。最大值为340点,在30%的打印缩放率下,几乎为943点
打印缩放
打印缩放因子的计算为WorkSheet.PageSetup.Zoom=(PageWidthInPoints/AllColumnsWidthInPoints)*100
您的计算似乎是正确的,但我会减去至少2%(请参见上文的舍入效果)。必须将缩放因子设置为8%左右,这肯定是有特殊原因的,我不认为这只是一个舍入问题。你的专栏里有什么?您是否在文件中插入了尺寸有点过大的形状、图片或特殊字体(导致圆角问题)