Chinaunix首页 | 论坛 | 博客
  • 博客访问: 66273
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-15 14:23
个人简介

-计算机-每天学习一点专业知识

文章分类

全部博文(21)

文章存档

2019年(1)

2018年(15)

2015年(5)

我的朋友

分类: WINDOWS

2018-09-21 16:55:03

 

'''''''''''''''''''''''''''

' 通用数据校验宏

'''''''''''''''''''''''''''

Dim gTestVal(100) As String


Sub TblCheckBased(TblNum As Integer)

    Dim CurTable As Table

    '行列号

    Dim rowNum_start As Integer

    Dim rowNum_end As Integer

   

    Dim colNum_testVal As Integer   'testVal 所在列号

    Dim colNum_isOK As Integer  '是否合格 所在列号

   

    Dim colNum_testValMin As Integer    'testVal有效最小值 所在列号

    Dim colNum_testValMax As Integer    'testVal有效最大值 所在列号

   

    '浮点数

    Dim testVal As Double

    Dim testValMin As Double

    Dim testValMax As Double

   

    Dim strTmp As String

 

    Dim lProt As Long: Const Pwd As String = "123"

   

    '待校验表格

    Set CurTable = ThisDocument.Tables(TblNum)

    With CurTable

   

        '赋值起始、终止行号

        rowNum_start = 2

        rowNum_end = .Rows.Count

       

        '赋值使用的列号

        colNum_isOK = .Columns.Count        '是否合格:倒数第一列

        colNum_testVal = .Columns.Count - 1  'testVal:倒数第二列

        colNum_testValMax = .Columns.Count - 2  'testVal有效最大值:倒数第三列

        colNum_testValMin = .Columns.Count - 3  'testVal有效最小值:倒数第四列

 

       

        For i = rowNum_start To rowNum_end

            gTestVal(i) = Replace(.Cell(i, colNum_testVal).Range.Text, Chr(13) & Chr(7), "")

            If gTestVal(i) = "" Then

                MsgBox "测试值为空" '.Cell(i, 1).Range.Text & "测试值为空"

            ElseIf IsNumeric(gTestVal(i)) Then

                testVal = Val(gTestVal(i))

                testValMin = Val(Replace(.Cell(i, colNum_testValMin).Range.Text, Chr(13) & Chr(7), ""))

                testValMax = Val(Replace(.Cell(i, colNum_testValMax).Range.Text, Chr(13) & Chr(7), ""))

               

                If ThisDocument.ProtectionType <> wdNoProtection Then

                    lProt = ThisDocument.ProtectionType

                    ThisDocument.Unprotect Password:=Pwd

                End If

                'insert your code for content control additions here

                If testValMin <= testVal And testVal <= testValMax Then

                    .Cell(i, colNum_isOK).Range.Text = "合格"

                Else

                    .Cell(i, colNum_isOK).Range.Text = "不合格"

                End If

               

               

                If lProt <> wdNoProtection Then

                    ThisDocument.Protect Type:=lProt, NoReset:=True, Password:=Pwd

                End If

               

              

            Else

                MsgBox "测试值非数值"   '.Cell(i, 1).Range.Text & "测试值非数值"

            End If

        Next

   

   

    End With

End Sub

 

 

Sub TblSaveToNewBased(TblNum As Integer)

    Dim doc As Document

    Dim tbl As Table

   

    Dim rowNum_start As Integer

    Dim rowNum_end As Integer

   

    Dim colNum_testVal As Integer   'testVal 所在列号

    Dim colNum_isOK As Integer  '是否合格 所在列号

   

    Dim strCurTime As String

    Dim newFilePath As String

    Dim refFilePath As String

   

    refFilePath = ThisDocument.Path & Application.PathSeparator & "测试报告模板.docx"

   

    strCurTime = Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now)    '获取当前时间,命名新建Word文档

    newFilePath = ThisDocument.Path & Application.PathSeparator & "测试报告" & strCurTime & ".docx"

   

    '打开doc

    Set doc = Documents.Open(FileName:=refFilePath, Visible:=False, ReadOnly:=True)

    'Set doc = Application.Documents.Add("D:\word\测试报告" & strCurTime & ".docx")

    Set tbl = doc.Tables(TblNum)

   

''''保存整个表格

'    ThisDocument.Tables(TblNum).Range.Copy    '此时拷贝的是真个ActiveDocument为当前窗口文档

''    doc.Tables(TblNum).Range.Paste 'ActiveDocument切换到doc,即模板文档

'     doc.Words(1).Select

'     Selection.Paste

 

 

   

''''只保存测试数据列和是否合格列

    With tbl

        rowNum_start = 2

        rowNum_end = .Rows.Count

 

        colNum_isOK = .Columns.Count    '是否合格:倒数第一列

        colNum_testVal = .Columns.Count - 1 '测试值:倒数第二列

 

        For i = rowNum_start To rowNum_end

 

            .Cell(i, colNum_testVal).Range.Text = Replace(ThisDocument.Tables(TblNum).Cell(i, colNum_testVal).Range.Text, Chr(13) & Chr(7), "")

            .Cell(i, colNum_isOK).Range.Text = Replace(ThisDocument.Tables(TblNum).Cell(i, colNum_isOK).Range.Text, Chr(13) & Chr(7), "")

        Next

 

    End With

'

   '另存doc

    doc.SaveAs2 FileName:=newFilePath  '调用saveas命令保存文档,根据实际,指定文档的保存路径和名称

    doc.Close False   '关闭文件保存

    Set doc = Nothing '释放对象

    Set tbl = Nothing   '释放对象

 

   MsgBox "新生成的文档保存在目录:" & newFilePath

End Sub

 

Private Sub TblSaveToExistedBased(TblNum As Integer)

    Dim doc As Document

    Dim tbl As Table

   

    Dim rowNum_start As Integer

    Dim rowNum_end As Integer

   

    Dim colNum_testVal As Integer   'testVal 所在列号

    Dim colNum_isOK As Integer  '是否合格 所在列号

   

    Dim myDialog As FileDialog

    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)

   

    myDialog.Filters.Clear    '清除所有文件筛选器中的项目

    myDialog.Filters.Add "所有 WORD 文件", "*.doc,*.docx", 1    '增加筛选器的项目为所有WORD文件

    myDialog.AllowMultiSelect = False    '不允许多项选择

    If myDialog.Show = -1 Then    '确定

        Application.ScreenUpdating = False

       

        Set doc = Application.Documents.Open(FileName:=myDialog.SelectedItems(1), Visible:=False)  '.SelectedItems (1):选取的word文档

        Set tbl = doc.Tables(TblNum)

           

            ''''只保存测试数据列和是否合格列

        With tbl

            rowNum_start = 2

            rowNum_end = .Rows.Count

   

            colNum_isOK = .Columns.Count    '是否合格:倒数第一列

            colNum_testVal = .Columns.Count - 1 '测试值:倒数第二列

   

            For i = rowNum_start To rowNum_end

   

                .Cell(i, colNum_testVal).Range.Text = Replace(ThisDocument.Tables(TblNum).Cell(i, colNum_testVal).Range.Text, Chr(13) & Chr(7), "")

                .Cell(i, colNum_isOK).Range.Text = Replace(ThisDocument.Tables(TblNum).Cell(i, colNum_isOK).Range.Text, Chr(13) & Chr(7), "")

            Next

   

        End With

   

        doc.Close True   '关闭文件保存

        Set doc = Nothing '释放对象

        Set tbl = Nothing   '释放对象

   

       MsgBox "已保存到文档:" & myDialog.SelectedItems(1)

    End If

 

 

End Sub

'''''''''''''''''''''''''''

'表格1

'''''''''''''''''''''''''''

Private Sub Tbl1Check_Click()

 

    Call TblCheckBased(1)

   

End Sub

 

Private Sub Tbl1SaveToNew_Click()

    Call TblSaveToNewBased(1)

 

End Sub

 

 

Private Sub Tbl1SaveToExisted_Click()

    TblSaveToExistedBased (1)

End Sub

 

 

'''''''''''''''''''''''''''

'表格2

'''''''''''''''''''''''''''

Private Sub Tbl2Check_Click()

 

End Sub

 

 

 

Private Sub Tbl2SaveToNew_Click()

 

End Sub

 

 

Private Sub Tbl2SaveToExisted_Click()

 

End Sub

 

Private Sub ToggleButton1_Click()

 

End Sub

 

 

 

Sub CellDataCheck()

'

' CellDataCheck

'

'

    Dim rowIdx, colIdx As Integer

    Dim colNum_testVal As Integer   'testVal 所在列号

    Dim colNum_isOK As Integer  '是否合格 所在列号

   

    Dim colNum_testValMin As Integer    'testVal有效最小值 所在列号

    Dim colNum_testValMax As Integer    'testVal有效最大值 所在列号

   

    Dim testStr As String

    Dim testVal As Double

    Dim testValMin As Double

    Dim testValMax As Double

   

    Dim curTbl As Table

    Dim lProt As Long: Const Pwd As String = "123"

   

    If ThisDocument.ProtectionType <> wdNoProtection Then

        lProt = ThisDocument.ProtectionType

        ThisDocument.Unprotect Password:=Pwd

    End If

   

    If Selection.Information(wdWithInTable) = True Then

        rowIdx = Selection.Cells(1).RowIndex

        colIdx = Selection.Cells(1).ColumnIndex

       

        Set curTbl = Selection.Tables(1)  '选中当前表格

       

        '开始校验

        With curTbl

           

            '赋值使用的列号

            colNum_isOK = colIdx + 1 '是否合格:倒数第一列

            colNum_testVal = colIdx  'testVal:倒数第二列

            colNum_testValMax = colIdx - 1  'testVal有效最大值:倒数第三列

            colNum_testValMin = colIdx - 2  'testVal有效最小值:倒数第四列

   

            testStr = Replace(.Cell(rowIdx, colNum_testVal).Range.Text, Chr(13) & Chr(7), "")

           

            If testStr = "" Then

                MsgBox "测试值为空" '.Cell(i, 1).Range.Text & "测试值为空"

            ElseIf IsNumeric(testStr) Then

                testVal = Val(testStr)

                testValMin = Val(Replace(.Cell(rowIdx, colNum_testValMin).Range.Text, Chr(13) & Chr(7), ""))

                testValMax = Val(Replace(.Cell(rowIdx, colNum_testValMax).Range.Text, Chr(13) & Chr(7), ""))

               

                If testValMin <= testVal And testVal <= testValMax Then

                    .Cell(rowIdx, colNum_isOK).Range.Text = "合格"

                Else

                    .Cell(rowIdx, colNum_isOK).Range.Text = "不合格"

                End If

                  

            Else

                MsgBox "测试值非数值"   '.Cell(i, 1).Range.Text & "测试值非数值"

            End If

 

        End With

           

    Else

        MsgBox "The insertion point is not in a table."

    End If

 

    If lProt <> wdNoProtection Then

        ThisDocument.Protect Type:=lProt, NoReset:=True, Password:=Pwd

    End If

End Sub



阅读(2997) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~