使用VBScript代码更改Excel中的边距

时间:2016-06-09 13:14:42

标签: excel excel-vba vbscript vba

我有一个脚本,当前接收Excel文档并将其转换为报告(仍然是Excel格式),分为两个页面:UPLOAD和PRINTOUT。

“上载”工作表显示从原始Excel文档中获取的所有信息,并将其过滤到报告的右侧列/行中。打印输出表单采用上载表格并进一步格式化,以便为实际打印输出做好准备。

问题是,我试图应用Orientation和Margin PageSetup参数,但它只是忽略它们。无论我做什么,页面格式都不会改变。

主要是,我需要更改这些参数(边距以英寸为单位):

  • 景观定位
  • 左边距(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) 

我没有编写剩余的代码用于上传,我只是被要求使边距有效,所以我一直在尝试添加现有代码所需的内容。不确定它的语法是否还是我错过了一些至关重要的东西。提前谢谢!

编辑:当前代码。方向是横向,现在适合一页宽,但保证金参数仍未采用(当我去打印预览时,它仍然显示"正常边距")。

Const xlLandscape = 2

With objWorksheet2.Pagesetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.LeftMargin = Application.InchesToPoints(0.5) 
.RightMargin = Application.InchesToPoints(0.5) 
.TopMargin = Application.InchesToPoints(0.5) 
.BottomMargin = Application.InchesToPoints(0.5) 
.HeaderMargin = Application.InchesToPoints(0.5) 
.FooterMargin = Application.InchesToPoints(0.5)
End With

最终编辑

出于某种原因,我的Application.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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

VBScript不知道xl的含义。你可以用那个值替换xl常量,也可以自己设置xl常量的值。 我更喜欢使用const

  

Const xlLandscape = 2

这使得研究更容易

  

.Orientation = xlLandscape

这应该是你的伎俩

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

用法:

  

setWorksheetPageSetup objWorksheet2

答案 2 :(得分:0)

您可能需要验证值的单位度量。

如果您已经在使用厘米或厘米,则不需要使用Application.InchesToPoints(...)函数,该函数接收以英寸为单位的值。

以下内容以厘米为单位将活动工作表的页边距设置为“窄”。

请注意,页面方向设置为“横向”。

2019-03-06T00:52:11.4389621Z ##[command]"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "d:\a\_temp\ed34e1a6-ccc4-4168-a15b-3bd5e273d9e7.cmd""
2019-03-06T00:52:11.4490377Z $TF_VAR_ARM_SUBSCRIPTION_ID
2019-03-06T00:52:11.4491943Z $TF_VAR_ARM_TENANT_ID
2019-03-06T00:52:11.4493642Z $TF_VAR_ARM_CLIENT_SECRET
2019-03-06T00:52:11.4495118Z $TF_VAR_ARM_CLIENT_ID

希望这对您有所帮助。谢谢。和平。