如何使用VBA

时间:2018-03-27 17:39:24

标签: excel vba ms-word

我目前有一个excel文件,使用以下代码生成一个包含左右页脚的pdf页面。

Set wsSig_Page = Worksheets("Signature Page")
wsSig_Page.PageSetup.LeftFooter = sLeft_Footer
wsSig_Page.PageSetup.RightFooter = sRight_Footer

sLeft_Footer和sRight_Footer都是字符串。

我的问题是我现在需要使用word文档生成pdf。我已经获得了大部分需要的格式,但我一直试图找到PageSetup.LeftFooter和PageSetup.RightFooter的替代品。

word文档由excel宏创建并填充。

编辑: 我生成新单词doc的代码如下

Set wdApp = CreateObject("Word.Application")    
Set wd = wdApp.Documents.Add

我目前没有任何与在word文档中添加页脚相关的代码,因为我不知道如何让两个多行部分显示为内联(一个在左边,一个在右边) word文档的页脚。

使用excel工作表非常简单,因为它将LeftFooter和RightFooter作为PageSetup属性的一部分。事实并非如此。

编辑2:页脚的旧代码。

 Sub Insert_Footer(Optional Hide_Macro As Boolean) Dim wsSig_Page As
 Worksheet Dim wsAgreement As Worksheet Dim wsAgreement_Data As
 Worksheet Dim Signature_Page_Count As Integer Dim Agreement_Page_Count
 As Integer Dim Total_Page_Count As Integer Dim Replace_Tag_Array() As
 String Dim Replace_Text_Array() As String Dim sLeft_Footer As String
    Dim sRight_Footer As String Dim i As Integer

    'MsgBox (wd.Range.Information(wdNumberOfPagesInDocument))
    Set wsSig_Page = Worksheets("Signature Page")
    Set wsAgreement = Worksheets("Agreement")
    Set wsAgreement_Data = GetAgreementDataWorksheet()

    iRow_End = wsSig_Page.Range("A2000").End(xlUp).row
    Call Worksheet_Methods.Scroll_To_Location(wsSig_Page.Range("A" & iRow_End))
    Signature_Page_Count = ExecuteExcel4Macro("Get.document(50,""Signature Page"")")

    'iRow_End = wsAgreement.Range("A2000").End(xlUp).row
    'Call Worksheet_Methods.Scroll_To_Location(wsAgreement.Range("A" & iRow_End))
    'Agreement_Page_Count = ExecuteExcel4Macro("Get.document(50,""Agreement"")")

    Agreement_Page_Count = wd.Range.Information(wdNumberOfPagesInDocument)

    Total_Page_Count = Signature_Page_Count + Agreement_Page_Count + Worksheets("Form").Range("Field_Schedule_Page_Numbers").value

    sLeft_Footer = wsAgreement_Data.Range("A2").value

    Replace_Tag_Array() = Split(wsAgreement_Data.Range("D2").value, "|")
    Replace_Text_Array() = Split(wsAgreement_Data.Range("E2").value, "|")

    For i = 0 To UBound(Replace_Tag_Array)
        sLeft_Footer = Replace(sLeft_Footer, Replace_Tag_Array(i), Replace_Text_Array(i))
    Next

    sRight_Footer = Replace(wsAgreement_Data.Range("A3").value, "<TOTAL_PAGE_NUMBER>", Total_Page_Count)

    If Len(sLeft_Footer) + Len(sRight_Footer) > 254 Then
        Set rRange = Worksheets("Form Data").Range("Table_Abr")
        sString = Replace_Text_Array(1)
        Replace_Text_Array(1) = Range("Abr_Text").value
        sLeft_Footer = wsAgreement_Data.Range("A2").value
        For i = 0 To UBound(Replace_Tag_Array)
            sLeft_Footer = Replace(sLeft_Footer, Replace_Tag_Array(i), Replace_Text_Array(i))
        Next
    End If

    wsSig_Page.PageSetup.LeftFooter = sLeft_Footer


    wsSig_Page.PageSetup.RightFooter = Replace("&09Page &P+" & Agreement_Page_Count & " of <TOTAL_PAGE_NUMBER>", "<TOTAL_PAGE_NUMBER>", Total_Page_Count)


End Sub

1 个答案:

答案 0 :(得分:1)

与Excel不同,Word没有左,中,右标题和&amp;页脚 - 根据页面设置,Word有第一页,偶数页和主页眉&amp;每个部分中的页脚(用于控制第一页上显示的内容,甚至是页面和所有其他页面)。对于给定的页眉或页脚,如果您想在一行上有三个单独的条目,您可以使用适当的对齐格式(例如居中/对齐)和制表符(可能是3个居中,或者左,中和右),然后将标签字符插入到您要插入的文本中。或者,特别是对于多行输入,您可以插入具有适当单元格格式的3列表格,并将输出发送到相关单元格。

您可以使用以下代码将文件表添加到文档第一部分的主页脚中:

With wd
  .Tables.Add Range:=.Sections.First.Footers(wdHeaderFooterPrimary).Range, NumRows:=1, NumColumns:=3, AutoFitBehavior:=wdAutoFitFixed
  With .Sections.First.Footers(wdHeaderFooterPrimary).Range.Tables(1).Range
    .Cells(1).Range.Text = "Text for cell 1"
    .Cells(2).Range.Text = "Text for cell 2"
    .Cells(3).Range.Text = "Text for cell 3"
  End With
End With

如果您正在使用后期绑定,那么您需要使用相应的值(分别为1和0)替换指定的常量(wdHeaderFooterPrimary,wdAutoFitFixed)。然后,您可以告诉Word要在每个单元格中放置什么,如上所示。您也可以单独格式化每个单元格。