使用VBScript代码更改Excel中的页边距
我有一个脚本,目前可以接收Excel文档并将其转换为报告(仍为Excel格式),分为两张表:上载和打印输出 上载表显示从原始Excel文档中获取的所有信息,并将其过滤到报告的正确列/行中。打印输出表接受上传表并对其进行进一步格式化,以便为实际打印输出做好准备 问题是,我试图应用方向和边距页面设置参数,但它只是忽略了它们。无论我做什么,页面格式都不会改变 主要是,我需要更改这些参数(边距以英寸为单位):使用VBScript代码更改Excel中的页边距,excel,vbscript,vba,Excel,Vbscript,Vba,我有一个脚本,目前可以接收Excel文档并将其转换为报告(仍为Excel格式),分为两张表:上载和打印输出 上载表显示从原始Excel文档中获取的所有信息,并将其过滤到报告的正确列/行中。打印输出表接受上传表并对其进行进一步格式化,以便为实际打印输出做好准备 问题是,我试图应用方向和边距页面设置参数,但它只是忽略了它们。无论我做什么,页面格式都不会改变 主要是,我需要更改这些参数(边距以英寸为单位): 景观定位 左边距(0.36) 右边距(0.25) 上下页边距(0.5) 页眉和页脚边距为(0
- 景观定位
- 左边距(0.36)
- 右边距(0.25)
- 上下页边距(0.5)
- 页眉和页脚边距为(0.25)
'Start printout sheet
Set objLastSheet = objWorkbook.Worksheets("Upload")
Set objWorksheet = objWorkbook.Worksheets("Upload")
objWorksheet.Copy, objLastSheet
Set objWorksheet2 = objWorkbook.Worksheets("Upload (2)")
objWorksheet2.Name = "Printout"
Set objRange = objWorksheet2.Pagesetup
Set objRange.PageSetup.Orientation= xlLandscape
Set objRange.PageSetup.LeftMargin = Application.InchesToPoints(0.36)
Set objRange.PageSetup.RightMargin = Application.InchesToPoints(0.25)
Set objRange.PageSetup.TopMargin = Application.InchesToPoints(0.5)
Set objRange.PageSetup.BottomMargin = Application.InchesToPoints(0.5)
Set objRange.PageSetup.HeaderMargin = Application.InchesToPoints(0.25)
Set objRange.PageSetup.FooterMargin = Application.InchesToPoints(0.25)
我没有为上传编写其余的代码,我只是被要求让边距工作,所以我一直在尝试向现有代码添加任何需要的内容。不确定是语法问题还是我遗漏了一些重要的东西。提前谢谢你
编辑:当前代码。方向是横向的,现在适合一页宽,但页边距参数仍然不适用(当我转到打印预览时,它仍然显示“正常页边距”)
最终编辑
出于某种原因,我的应用程序.InchesToPoints()函数无法工作。也许我没有包含一个库或其他什么,但尽管如此,当我手动转换这些值并输入它们的点值时,它仍然有效
最终解决方案:
Const xlLandscape = 2
With objWorksheet2.Pagesetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.LeftMargin = 26
.RightMargin = 18
.TopMargin = 36
.BottomMargin = 36
.HeaderMargin = 18
.FooterMargin = 18
End With
ObjRange=objWorksheet2.Pagesetup,因此您应该使用:
Set objRange.Orientation= xlLandscape
等等
或者更确切地说:
With objWorksheet2.Pagesetup
.Orientation= xlLandscape
.LeftMargin = Application.InchesToPoints(0.36)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.25)
.FooterMargin = Application.InchesToPoints(0.25)
End With
VBScript不知道xl contants的值。您可以用there值替换xl常量,也可以自己设置xl常量的值。 我更喜欢使用常量 常数xl=2 这使得研究更容易 .方向=xl 这应该对你有好处
Sub setWorksheetPageSetup(xlWS)
Const xlLandscape = 2
With xlWS.PageSetup
.Orientation = xlLandscape
.LeftMargin = Application.InchesToPoints(0.36)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.25)
.FooterMargin = Application.InchesToPoints(0.25)
End With
End Sub
用法:
设置工作表设置对象工作表2
您可能需要验证值的单位度量 如果已经在使用厘米或厘米,则不需要使用Application.InchesToPoints(…)函数,该函数接收以英寸为单位的值作为输入 下面使用以厘米为单位的值将活动工作表的页边距设置为“窄” 请注意,页面方向设置为“横向”
我希望这对你有帮助。非常感谢。和平。By
usage
您的意思是您提出的代码应该在Set-objRange=objWorksheet2
语句之后初始化吗?太好了,谢谢!一开始我确实需要添加常量xlscanner=2,但我错了。横向是所有的工作,但没有任何自定义边距设置已应用。对不起,有什么原因吗?
Sub setWorksheetPageSetup(xlWS)
Const xlLandscape = 2
With xlWS.PageSetup
.Orientation = xlLandscape
.LeftMargin = Application.InchesToPoints(0.36)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.25)
.FooterMargin = Application.InchesToPoints(0.25)
End With
End Sub
Set myOutput = Sheets(ActiveSheet.Name)
myOutput.PageSetup.Orientation = xlLandscape
myOutput.PageSetup.TopMargin = 1.91
myOutput.PageSetup.BottomMargin = 1.91
myOutput.PageSetup.LeftMargin = 0.64
myOutput.PageSetup.RightMargin = 0.64
myOutput.PageSetup.HeaderMargin = 0.76
myOutput.PageSetup.FooterMargin = 0.76