20170612xlVBA含方框文档填表

Posted Excel VBA 小天地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20170612xlVBA含方框文档填表相关的知识,希望对你有一定的参考价值。

Sub mainProc()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = wdAlertsNone

    ‘Dim xlApp As Excel.Application
    ‘Dim Wb As Excel.Workbook
    ‘Dim Sht As Excel.Worksheet
    Dim xlApp As Object
    Dim Wb As Object
    Dim sht As Object
    Dim EndRow As Long
    Dim Arr As Variant
    Dim xlRng As Object ‘Excel.Range

    Dim TmpDoc As Document
    Dim NewName As String
    Dim NewPath As String

    ‘Set xlApp = New Excel.Application
    Set xlApp = CreateObject("Excel.Application")
    Set Wb = xlApp.Workbooks.Open(ActiveDocument.Path & "\附件4 党员基本信息汇总表.xls")
    Set sht = Wb.Worksheets(1)
    With sht
        For i = 21 To 5 Step -1
            If .Cells(i, 2).Value <> "" Then
                EndRow = i
                Exit For
            End If
        Next i
        Set xlRng = .Range("A5:T" & EndRow)
        Arr = xlRng.Value
    End With

    Wb.Close False
    xlApp.Quit

    Const TmpName As String = "采集表.doc"


    For i = LBound(Arr) To UBound(Arr)
        Set TmpDoc = Application.Documents.Open(ActiveDocument.Path & "\" & TmpName)
        TmpDoc.Activate

        ‘姓名
        FindReplace "Name", Arr(i, 2)
        ‘性别
        If Arr(i, 5) = "男" Then
            FindTrue = "nan"
            FindFalse = "nv"
            FindTrueAndFalse FindTrue, FindFalse
        Else
            FindTrue = "nv"
            FindFalse = "nan"
            FindTrueAndFalse FindTrue, FindFalse
        End If
        ‘民族
        FindReplace "mz", Split(Arr(i, 6), " ")(1)
        ‘身份证加框
        FindText = "id"
        InputText = Arr(i, 4)
        FindAndInput FindText, InputText

        ‘出生日期
        bir = Format(Arr(i, 7), "yyyy/mm/dd")
        FindReplace "yyy1", Split(bir, "/")(0)
        FindReplace "m1", Split(bir, "/")(1)
        FindReplace "d1", Split(bir, "/")(2)

        ‘学历代码加框
        FindText = "XL"
        InputText = Split(Arr(i, 8), " ")(0)
        FindAndInput FindText, InputText

        ‘正式预备
        If Arr(i, 9) = "正式党员" Then
            FindTrue = "zs"
            FindFalse = "yb"
            FindTrueAndFalse FindTrue, FindFalse
        Else
            FindTrue = "yb"
            FindFalse = "zs"
            FindTrueAndFalse FindTrue, FindFalse
        End If
        ‘党支部
        FindReplace "dzb", Arr(i, 3)

        ‘加入日期
        bir = Format(Arr(i, 10), "yyyy/mm/dd")
        FindReplace "yyy2", Split(bir, "/")(0)
        FindReplace "m2", Split(bir, "/")(1)
        FindReplace "d2", Split(bir, "/")(2)

        ‘转正日期
        bir = Format(Arr(i, 11), "yyyy/mm/dd")
        FindReplace "yyy3", Split(bir, "/")(0)
        FindReplace "m3", Split(bir, "/")(1)
        FindReplace "d3", Split(bir, "/")(2)

        ‘工作岗位代号加框
        FindText = "gzgw"
        InputText = Split(Arr(i, 12), " ")(0)
        FindAndInput FindText, InputText

        ‘手机号码加框
        FindText = "cell"
        InputText = Arr(i, 13)
        FindAndInput FindText, InputText

        ‘区号加框
        FindText = "zone"
        InputText = Split(Arr(i, 14), "-")(0)
        FindAndInput FindText, InputText

        ‘固话加框
        FindText = "phone"
        InputText = Split(Arr(i, 14), "-")(1)
        FindAndInput FindText, InputText

        ‘家庭地址
        FindReplace "adr", Arr(i, 15)


        ‘正常停止
        If Arr(i, 16) = "正常" Then
            FindTrue = "zc"
            FindFalse = "tz"
            FindTrueAndFalse FindTrue, FindFalse
        Else
            FindTrue = "tz"
            FindFalse = "zc"
            FindTrueAndFalse FindTrue, FindFalse
        End If

        ‘是否失联
        If Arr(i, 17) = "是" Then
            FindTrue = "yes1"
            FindFalse = "no1"
            FindTrueAndFalse FindTrue, FindFalse
        Else
            FindTrue = "no1"
            FindFalse = "yes1"
            FindTrueAndFalse FindTrue, FindFalse
        End If

        ‘失恋日期
        If Arr(i, 17) = "是" Then
            bir = Format(Arr(i, 18), "yyyy/mm")
            FindReplace "yyy4", Split(bir, "/")(0)
            FindReplace "m4", Split(bir, "/")(1)
        Else
            FindReplace "yyy4", ""
            FindReplace "m4", ""
        End If

        ‘是否流出
        If Arr(i, 19) = "是" Then
            FindTrue = "yes2"
            FindFalse = "no2"
            FindTrueAndFalse FindTrue, FindFalse
        Else
            FindTrue = "no2"
            FindFalse = "yes2"
            FindTrueAndFalse FindTrue, FindFalse
        End If

        ‘流出省市县
        If Arr(i, 19) = "是" Then

            FindReplace "sheng", Split(Arr(i, 20), "-")(0)
            FindReplace "shi", Split(Arr(i, 20), "-")(1)
            FindReplace "xian", Split(Arr(i, 20), "-")(2)
        Else
            FindReplace "sheng", ""
            FindReplace "shi", ""
            FindReplace "xian", ""
        End If
        NewName = Arr(i, 2) & "-" & TmpName
        NewPath = ActiveDocument.Path & "\批量生成文件\" & NewName

        On Error Resume Next
        Kill NewPath
        On Error GoTo 0

        TmpDoc.SaveAs2 NewPath
        TmpDoc.Close

    Next i

    MsgBox "Done!"
    Application.ScreenUpdating = True
    Application.DisplayAlerts = wdAlertsAll
End Sub

Sub FindTrueAndFalse(ByVal FindTrue As String, ByVal FindFalse As String)

    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = FindTrue
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Execute Replace:=wdReplaceOne
        Selection.InsertSymbol Font:="Wingdings 2", CharacterNumber:=-4014, Unicode:=True
    End With

    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = FindFalse
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Execute Replace:=wdReplaceOne
        Selection.InsertSymbol Font:="宋体", CharacterNumber:=9633, Unicode:=True
    End With

End Sub
Public Sub FindAndInput(ByVal FindText As String, ByVal InputText As String)
    Dim Rng As Range
    Dim RngStart As Long, RngEnd As Long
    Selection.HomeKey wdStory

    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = FindText
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Execute Replace:=wdReplaceOne
        RngStart = Selection.Start
        For i = 1 To Len(InputText)
            Selection.Collapse wdCollapseEnd
            Selection.Range.ModifyEnclosure Style:=wdEncloseStyleSmall, Symbol:= _
                                                                                wdEnclosureSquare, EnclosedText:=Mid(InputText, i, 1)
            Selection.MoveRight wdCharacter, 1
        Next i
        RngEnd = Selection.Start
        Set Rng = ActiveDocument.Range(RngStart, RngEnd)
        SetFont Rng
    End With
    Set Rng = Nothing
End Sub
Public Sub SetFont(ByVal Rng As Range)
    With Rng.Font
        .Name = "黑体"
        .Size = 14
    End With
End Sub
Public Sub FindReplace(ByVal FindText As String, ByVal RepText As String)
    Selection.HomeKey wdStory
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = FindText
        .Replacement.Text = RepText
        .Forward = True
        .Wrap = wdFindStop
        .Execute Replace:=wdReplaceOne
    End With
End Sub

  

以上是关于20170612xlVBA含方框文档填表的主要内容,如果未能解决你的问题,请参考以下文章

20170714xlVba多个工作簿转多个Word文档表格

java如何操作word实现自动填表

在代码片段中包含类型转换

perl学习笔记(20170612)

helper.js(20170612)

20170612