VBA实例-从Excel整理数据到Word

功能需求

1、将原始数据中不要的数据剔除
2、原始数据中增加序号、日期和时间三列数据,并且按报名类别进行分类。
3、形成时间表
4、将名称和类别复制到评分表中,一个名称一个word文档
5、将数据中的参数5和参数9复制到评分表中

数据结构

在这里插入图片描述

复制数据到新sheet并分类数据

If CheckIsExistsSheetName("时间表") Then
        ThisWorkbook.Sheets("时间表").Delete
    End If
    Application.DisplayAlerts = True
   For i = 2 To SumRows
        refValue = SourceSheet.Cells(i, 5) * 1
        If refValue > finalValue Then
            finalValue = refValue
        End If
   Next i
   For TargetDeviceSerialNumber = 1 To finalValue
        Set Gradeword = wdapp.Documents.Open(ThisWorkbook.Path & "\评分表.docx")
        Debug.Print Gradeword.Tables(1).Cell(3, 1).Range.Text
        Gradeword.Sentences(2).Characters(27) = EquipSectionsheet.Cells(TargetDeviceSerialNumber + 1, 3).Text 
        Gradeword.Sentences(2).Characters(8) = EquipSectionsheet.Cells(TargetDeviceSerialNumber + 1, 2).Text 
        jj = 3
        For j = 2 To SumRows
             refValue = SourceSheet.Cells(j, 5) * 1
             If refValue = TargetDeviceSerialNumber Then
                UseRows = UseRows + 1
                SourceSheet.Rows(j).Copy DestSheet.Cells(UseRows, 1)
                If IsEmpty(SourceSheet.Cells(j, 10)) Then
                    Gradeword.Tables(1).Cell(jj, 2).Range = SourceSheet.Cells(j, 14).Text
                Else
                    Gradeword.Tables(1).Cell(jj, 2).Range = SourceSheet.Cells(j, 10).Text
                End If
                jj = jj + 1
             End If
         Next j
        arr(TargetDeviceSerialNumber) = UseRows
        'Debug.Print'
        
        Gradeword.SaveAs2 (ThisWorkbook.Path + "\" + EquipSectionsheet.Cells(TargetDeviceSerialNumber + 1, 2).Text + "评分表" + "(" + EquipSectionsheet.Cells(TargetDeviceSerialNumber + 1, 3).Text + ")" + ".docx")
        Gradeword.Close
        Set Gradeword = Nothing
    Next TargetDeviceSerialNumber
    finalRows = UseRows
    DestSheet.Columns("A:D").Delete
    DestSheet.Range("C1").EntireColumn.Insert '序号
    DestSheet.Range("C1").EntireColumn.Insert '日期
    DestSheet.Range("C1").EntireColumn.Insert '时间
    DestSheet.Range("C1") = "序号"
    DestSheet.Range("D1") = "日期"
    DestSheet.Range("E1") = "时间"
    DestSheet.Cells(2, 5) = "9:00"
    
    For k = 2 To SumRows
        DestSheet.Cells(k, 3) = "=COUNT($C$1:C" & (k - 1) & ")+1"
    Next k
    
    For kk = 2 To SumRows - 1
        Day_mod = kk Mod (AM_ContrlRow + PM_ContrlRow)
        If Day_mod < AM_ContrlRow + 1 Then
            DestSheet.Cells(Day_mod + 1, 5) = "=TEXT(E" & kk & "+" & Chr(34) & "0:10" & Chr(34) & "," & Chr(34) & "h:mm" & Chr(34) & ")"
        ElseIf Day_mod = AM_ContrlRow + 1 Then
            DestSheet.Cells(Day_mod + 1, 5) = "14:00"
        Else
            DestSheet.Cells(Day_mod + 1, 5) = "=TEXT(E" & kk & "+" & Chr(34) & "0:10" & Chr(34) & "," & Chr(34) & "h:mm" & Chr(34) & ")"
        End If
    Next kk

添加序号、日期、时间三列数据

添加序号列

往单元格中添加公式”=COUNT($C$1:C(k-1))+1“即可生成序号。

For k = 2 To SumRows
        DestSheet.Cells(k, 3) = "=COUNT($C$1:C" & (k - 1) & ")+1"
    Next k
添加时间列

往单元格中添加类似于”=TEXT(E2+“0:10”,“h:mm”)“的公式,即可生成每隔10分钟的序列。

**For kk = 2 To SumRows - 1
        Day_mod = kk Mod (AM_ContrlRow + PM_ContrlRow)
        If Day_mod < AM_ContrlRow + 1 Then
            DestSheet.Cells(Day_mod + 1, 5) = "=TEXT(E" & kk & "+" & Chr(34) & "0:10" & Chr(34) & "," & Chr(34) & "h:mm" & Chr(34) & ")"
        ElseIf Day_mod = AM_ContrlRow + 1 Then
            DestSheet.Cells(Day_mod + 1, 5) = "14:00"
        Else
            DestSheet.Cells(Day_mod + 1, 5) = "=TEXT(E" & kk & "+" & Chr(34) & "0:10" & Chr(34) & "," & Chr(34) & "h:mm" & Chr(34) & ")"
        End If
    Next kk**

将名称和类别复制到word文件中

Gradeword.Sentences(2).Characters(27) = EquipSectionsheet.Cells(TargetDeviceSerialNumber + 1, 3).Text Gradeword.Sentences(2).Characters(8) = EquipSectionsheet.Cells(TargetDeviceSerialNumber + 1, 2).Text 这两句语句是将
在这里插入图片描述
中的名称和类别分别填写到对应的word文件档-----"评分表.docx"中名称和类别处
在这里插入图片描述
即:
在这里插入图片描述

将参数5和参数9中的一个复制到word文件中

将参数5和参数9中的一个复现到 "评分表.docx"中参数5/参数9这列中

If IsEmpty(SourceSheet.Cells(j, 10)) Then
                    Gradeword.Tables(1).Cell(jj, 2).Range = SourceSheet.Cells(j, 14).Text
                Else
                    Gradeword.Tables(1).Cell(jj, 2).Range = SourceSheet.Cells(j, 10).Text
                End If
                jj = jj + 1

在这里插入图片描述

实例

实例

相关推荐

  1. VBA实战(Excel)(4):实用功能整理

    2024-07-22 04:46:04       22 阅读
  2. CAD VBA 导出cass扩展数据excel

    2024-07-22 04:46:04       68 阅读
  3. Excel VBA ——MySQL数据库中导出一个报表-笔记

    2024-07-22 04:46:04       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 04:46:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 04:46:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 04:46:04       45 阅读
  4. Python语言-面向对象

    2024-07-22 04:46:04       55 阅读

热门阅读

  1. conda:导出与创建环境快照

    2024-07-22 04:46:04       20 阅读
  2. linux搭建redis cluster集群

    2024-07-22 04:46:04       14 阅读
  3. centos/rocky容器中安装xfce、xrdp记录

    2024-07-22 04:46:04       16 阅读
  4. 【Python】 深入理解 Python 的 repr 方法

    2024-07-22 04:46:04       17 阅读
  5. 【2024德国签证】留学面签问题汇总

    2024-07-22 04:46:04       25 阅读
  6. 为了zoom

    2024-07-22 04:46:04       24 阅读
  7. vue中hash和history的区别 ?

    2024-07-22 04:46:04       16 阅读
  8. 使用 KerasNLP 从头开始生成 GPT 文本

    2024-07-22 04:46:04       15 阅读
  9. 2024-7-20 IT领域最新资讯概览

    2024-07-22 04:46:04       14 阅读
  10. 墨烯的C语言技术栈-C语言基础-017

    2024-07-22 04:46:04       17 阅读
  11. 对Spring、SpringMVC、MyBatis框架的介绍与解释

    2024-07-22 04:46:04       9 阅读