我无法在工作表上的Excel中调整列。 我的工作表的列从A到CK(每个项目可能不同)。 我不需要打印A列,但是B列必须在所有页面上,并且B列旁边必须是3列。这样一来,第一页将成为“ B,C:E”列,下一页将成为“ B,F:H”列,依此类推... B列被设置为标题,因此将在每页上打印。 >
我的问题是设置刻度。我在做什么:
在我的情况下,结果为83,但要适合该页面,结果必须为77。我必须找到我认为的其他数字,但我不知道如何以及该...。
我的代码:
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
不同的宽度:
使用上面的数字可以计算出83%,但随后却不适合,当我手动将其设置为77%时,它确实适合,但是如何使用VBA获得该数字?我不了解列宽,在Excel中看到的以及在VBA中如何设置(45 + 15 + 30 + 20)与VBA告诉我应该是(589)...
答案 0 :(得分:0)
列宽以字符,点,厘米/英寸,像素,...为单位
以字符为单位的列宽
如果通过手动值输入或鼠标设置列宽,则会看到“标准字体编号字符的数量”。有关详细信息,请参阅Microsoft support。
可以在VBA .Range.ColumnWidth = 10.78
中读取和写入此值。
最大值为255。
以点为单位的列宽
这是在手动调整列大小时未在GUI中显示的内部值。
相当于每英寸72点。
在VBA中,只能读取:.Range.Width
列宽(以像素为单位)
Excel在常规视图中手动调整列宽的大小时会显示列宽(以像素为单位)(在括号中)。无法在VBA中直接读取或写入此值。
以厘米或英寸为单位的列宽
在页面布局视图中进行手动调整大小时,Excel以厘米(或英寸)为单位显示列宽,而不是以像素为单位。
仅此值取决于打印缩放级别!
可以在VBA中读取测量单位本身:
Application.MeasurementUnit ' 0 = xlInches, 1 = xlCentimeters, 2 = xlMillimeters
这样,您可以检查或验证环境中的所有值:
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
ScreenResolution可以使用API函数GetDeviceCaps(hDC, 88)
Excel将工作簿文件中每个相关列的基于字符的.Range.ColumnWidth
用小数存储。如果将其设置为100,则将其存储为e。 g。
<cols><col min="1" max="1" width="100.77734375" customWidth="1"/></cols>
重新打开此文件后,报告的.ColumnWidth
为100,不含小数。
如果您设置了较大的列宽并在普通视图和页面布局视图之间切换,那么您可能会发现小节之间的差异大约为2%(.Range.Width
和像素突然改变)-但所有值仍对应彼此根据上面的公式。
所有不同的列宽值均独立于Excel的视图缩放级别和/或Windows 10显示比例。
如果更改打印缩放级别,则仅英寸和厘米值会更改。
但是您获得的列或多或少。 e。纸上的点数。
Excel以磅为单位测量.PageSetup.Leftmargin
(每英寸72个磅)。这对应于.Range.Width
,它也以点为单位。
示例:如果我将两个纸页边距都设置为5.5厘米,则生成的10厘米A4纸宽度为e。 G。两列,总计.Width
为appr。 283点,对应于72点/英寸。
如果将打印缩放比例设置为约.Width
的83%。最高为340点,而打印缩放比例为30%时,则接近943点。
打印缩放系数的计算方式是
WorkSheet.PageSetup.Zoom = (PageWidthInPoints / AllColumnsWidthInPoints) * 100
您的计算似乎是正确的,但我至少会减去2%(请参见上面的舍入效果)。