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

  

posted @ 2017-07-06 23:48  wangway  阅读(158)  评论(0编辑  收藏  举报