我想出来并在下面发布了问题陈述和解决方案:
我一直在尝试这样做,因此无论用户设置如何,我创建的电子表格中的边距和列宽都是相同的,因此它会为所有用户打印相同的内容。我能提出的唯一方法涉及两个宏。一个宏将测量行,列和边距,并将其存储在PC上的Excel文件中的单元格中,其中所有内容都在查找和打印。在用户打印之前,第二个宏取这些值并将边距等设置为正确的值。
我的问题是ColumnWidth函数测量与默认字体相关的单位行,可以在用户设置中更改。为了解决这个问题,我尝试使用.width(以pts为单位测量),但我刚刚了解到这个函数可以测量宽度但不能设置它。但我意识到我所要做的就是在第二个宏中选择要测量的列,并使用该测量和原始测量来得出转换因子。
这是第一个宏的列测量部分(我最初有一个循环,但我意识到我只需要测量一列):
'Collumn Width
.Cells(249, 84).Value = .Cells(1, 1).Width
For i = 1 To 65
.Cells(250 + i, 81).Value = .Cells(1, i).ColumnWidth
Next i
以下是具有适当转换因子的第二个宏的校正列宽设置部分:
'Set Column Widths
'[column width in current font]
'*[correct width of any collumn in pts]/[current width of same column in pts]
For j = 1 To 65
With ActiveWorkbook.ActiveSheet
.Columns(j).ColumnWidth = .Cells(250 + j, 81).Value * _
.Cells(249, 84).Value / .Cells(1, 1).Width
End With
Next j
答案 0 :(得分:3)
我相信RowHeight属性以点数设置高度。它是columnWidth属性,它根据默认字体大小设置宽度。
但是,列的Width属性以磅为单位读取宽度。您可能无法准确设置列宽,但这里有一种方法可以让您关闭,将高度和宽度设置为72点。
Option Explicit
Sub SetWidthHeightPoints()
Const dWidth As Double = 72
Const dHeight As Double = 72
Dim RW As Range, COL As Range
Set RW = ActiveSheet.Rows(1)
Set COL = ActiveSheet.Columns(1)
RW.RowHeight = dHeight
COL.ColumnWidth = dWidth / COL.Width * COL.ColumnWidth
COL.ColumnWidth = dWidth / COL.Width * COL.ColumnWidth
MsgBox "Row Height: " & RW.Height & vbLf & "Column Width: " & COL.Width
End Sub
修改强>
@AlexPeters提出了一个很好的建议,通过将列宽调整放入循环,可以得到与所需结果更接近的结果。我们循环直到没有变化,并且对循环次数设置限制为10:
Option Explicit
Sub SetWidthHeightPoints()
Const dWidth As Double = 72
Const dHeight As Double = 72
Dim RW As Range, COL As Range
Set RW = ActiveSheet.Rows(1)
Set COL = ActiveSheet.Columns(1)
Dim CNT As Long, lastWidth As Double
RW.RowHeight = dHeight
CNT = 0
Do Until CNT = 10 Or COL.Width = lastWidth
lastWidth = COL.Width
COL.ColumnWidth = dWidth / COL.Width * COL.ColumnWidth
CNT = CNT + 1
Loop
MsgBox "Row Height: " & RW.Height & vbLf & "Column Width: " & COL.Width _
& vbLf & "Required: " & CNT & " iterations"
End Sub
答案 1 :(得分:0)
' 以节省太多循环
'使用像'大动作后小动作
' WidthColumn WidInPts, CI, 5
' WidthColumn WidInPts,CI,0.5
' '
Sub WidthColumn(ColWid!, ColNum&, ChangeBy!)
'太大
While Columns(ColNum + 1).Left - Columns(ColNum).Left > ColWid
Columns(ColNum).ColumnWidth = Columns(ColNum).ColumnWidth - ChangeBy
温德
'太小
While Columns(ColNum + 1).Left - Columns(ColNum).Left < ColWid
Columns(ColNum).ColumnWidth = Columns(ColNum).ColumnWidth + ChangeBy
温德
' 靠近它 '看结果 ' 单元格(2, ColNum) = Columns(ColNum).ColumnWidth 'Cells(3, ColNum) = ColWid
结束子
答案 2 :(得分:-1)