20190321xlVBA_明细信息表汇总成数据表

刚开始能把代码敲得行云流水的时候,写代码是种乐趣。有了功利目的之后,重复的工作写多几次,厌烦的情绪四处弥漫。

去年八月份正好写了一回,还能支持控件,在此备忘。

Public Sub InformationToTable()
    ‘关联表为
    ‘A列是信息登记表的单元格地址
    ‘如果有Chcek控件 则为_CheckBox1/_CheckBox2
    ‘B列为汇总表输出的列名
    Application.DisplayAlerts = False

    Dim Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary")

    Dim wb As Workbook
    Dim sht As Worksheet
    Dim OpenWb As Workbook
    Dim OpenSht As Worksheet
    Dim Rng As Range
    Dim index As Long
    Dim myShop, myDate, myHeader
    Set wb = Application.ThisWorkbook
    Set sht = wb.Worksheets("信息汇总")
    Set rsht = wb.Worksheets("关联表")
    With rsht
        endrow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
        For i = 2 To endrow
            Key = .Cells(i, 1).Value
            Dic(Key) = .Cells(i, 2).Value
        Next i
    End With
    sht.UsedRange.Offset(1).Clear

    Dim FolderPath As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ThisWorkbook.Path
        .AllowMultiSelect = False
        .Title = "请选取Excel工作簿所在文件夹"
        If .Show = -1 Then
            FolderPath = .SelectedItems(1)
        Else
            MsgBox "您没有选中任何文件夹,本次汇总中断!"
            Exit Sub
        End If
    End With

    If Right(FolderPath, 1) <> Application.PathSeparator Then FolderPath = FolderPath & Application.PathSeparator

    frr = FsoGetFiles(FolderPath, "*.xls*")
    index = 1
    For f = LBound(frr) To UBound(frr)
        If frr(f) <> wb.Path Then
            index = index + 1
            filepath = frr(f)

            Set OpenWb = Application.Workbooks.Open(filepath)
            Set OpenSht = OpenWb.Worksheets(1)
            With OpenSht
                For Each k In Dic.keys
                    If Left(k, 1) = "_" Then
                        cts = Split(k, "/")
                        For Each ct In cts
                            If .OLEObjects(Replace(ct, "_", "")).Object.Value = True Then
                                sht.Cells(index, Dic(k)).Value = .OLEObjects(Replace(ct, "_", "")).Object.Caption
                            End If
                        Next ct
                    Else
                        sht.Cells(index, Dic(k)).Value = .Range(k).Value
                    End If
                Next k
            End With
            OpenWb.Close False
        End If
    Next f

    Set Dic = Nothing
    Set wb = Nothing
    Set sht = Nothing
    Set rsht = Nothing
    Set OpenWb = Nothing
    Set OpenSht = Nothing

    Application.DisplayAlerts = True

    ‘MsgBox "汇总完成!"
End Sub
Function FsoGetFiles(ByVal FolderPath As String, ByVal Pattern As String, Optional ComplementPattern As String = "") As String()
    Dim Arr() As String
    Dim FSO As Object
    Dim ThisFolder As Object
    Dim OneFile As Object
    ReDim Arr(1 To 1)
    Arr(1) = "None"
    Dim index As Long
    index = 0
    Set FSO = CreateObject("Scripting.FileSystemObject")
    On Error GoTo ErrorExit
    Set ThisFolder = FSO.getfolder(FolderPath)
    If Err.Number <> 0 Then Exit Function
    For Each OneFile In ThisFolder.Files
        If OneFile.Name Like Pattern Then
            If Len(ComplementPattern) > 0 Then
                If Not OneFile.Name Like ComplementPattern Then
                    index = index + 1
                    ReDim Preserve Arr(1 To index)
                    Arr(index) = OneFile.Path
                End If
            Else
                index = index + 1
                ReDim Preserve Arr(1 To index)
                Arr(index) = OneFile.Path
            End If
        End If
    Next OneFile
ErrorExit:
    FsoGetFiles = Arr
    Erase Arr
    Set FSO = Nothing
    Set ThisFolder = Nothing
    Set OneFile = Nothing
End Function

  

原文地址:https://www.cnblogs.com/nextseven/p/10575370.html

时间: 2024-10-17 03:30:49

20190321xlVBA_明细信息表汇总成数据表的相关文章

使用kettle把XML文档转换成数据表结构

 在kettle中Get data from xml 步骤和 XML Input Stream (StAX)步骤读取并解析xml文件.Get data from xml 步骤使用dom方式解析,比较消耗内存,当文件很大时,就不可取.XML Input Stream (StAX)步骤使用完全不同的方式解析大而复杂的文件,且能快速载入数据,所以建议使用该步骤. 下面通过示例来展示如何使用该步骤,源xml文件内容如下: <?xml version="1.0"?> <ti

将Excel的数据表转成数据库表

如果你有很多数据要导进数据库的表,敲代码恐怕效率不高,而对于数据操作,Excel在这方面就有优势,但如何将之有机结合呢?将Excel的数据表转成数据库表,这就是本篇博客的目的. 首先去下载MySQL皮肤(对MySQL数据进行图形化界面操作的便捷工具),点击打开皮肤下载链接. 然后连接数据库,进行操作 继续下一步结束之后会发现世界很美好.

【Paddy】如何将物理表分割成动态数据表与静态数据表

前言 一般来说,物理表的增.删.改.查都受到数据量的制约,进而影响了性能. 很多情况下,你所负责的业务关键表中,每日变动的数据库与不变动的数据量比较,相差非常大. 这里我们将变动的数据称为动态数据,不变动的数据称为静态数据. 举个例子,1张1000W的表,每日动态数据只有1W条,999W条的数据都为静态.往往select或者重复改变的数据都在动态数据中.比如订单表. 所以,如果将动态数据库从表中剥离出来,分割两张表,一张动态数据表,一张静态数据表,从数据量的角度来看,性能是不是就会自然提高了?

ebay商品基本属性组合成数据表格式,可用上传到系统递交数据

该刊登表设计是利用VB写的,当时因为两个系统的数据不能直接对接,又copy并且组合SKU,一个表格一个表格填写,比较麻烦,还好刊登系统可以允许用excel表格上传数据 所以就下好模板,学了VB语言,在业余的时候做了这个数据自动组合功能用刊登数据广告. 另外也使用VB写了一个excel表格几千行数据的处理(这个另做解释) *****************************************************************************************

Mysql 表转换成 Sqlite表

目前的转换仅仅支持对没有外键的Mysql数据表 准备: 下载安装 Sqlite Expert 软件 一 获取Mysql中的.sql文件,获取过程省略可以直接导出sql文件 二 在Sqlite Expert 中新建数据库 三 在数据库中选中sql Tab,导入之前准备sql文件 四 关键步骤 将创建表的最后关于编码的sql语句一句primary key的语句删除 并在主键的创建是修改创建方法 将自动增长删除,这样说有点抽象,如下实例 这是mysql建表方式 CREATE TABLE `admin`

MYSQL数据库之如何在已经建立好表之后重构数据表

表一:mysql> select * from employee;+----+--------+---------+| id | name | manager |+----+--------+---------+| 1 | 张三 | 李红 || 2 | 张三 | 李红 || 3 | 王五 | 刘倩 || 4 | 马六 | 马芳 || 5 | 孙杨 | 明德 || 6 | 郭德纲 | 华北 |+----+--------+---------+ 表二:表二的数据填充有所不同,如下:sql:inser

sql纵表转换成横表

数据库中 将一张纵表转换为一张横表 数据库纵表数据 sql语句如下 select cardid, max(case t.projectcode when 'IA-002' then t.result end) as ht, max(case t.projectcode when 'IA-003' then t.result end) as wt, max(case t.projectcode when 'IA-005' then t.result end) as bmi, max(case t.

数据库语句之建表、拷贝数据表

1.数据库建表语句 create table tb_People(id integer primary key, Name varchar(255), Sex varchar(255)) 2.同数据库拷贝数据表 sql: insert into table1 select*from table2(完全拷贝) insert into table1 select distinct*from table2(不重复拷贝); insert into table1 select top 10*from ta

删除数据表和清空数据表的内容(保存表结构)的SHELL脚本

A,删除指定数据库的所有数据表 #!/bin/bash # 删除mysql中所有表 # 示例: # Usage: ./script user password dbnane # Usage: ./script user password dbnane server-ip # Usage: ./script user password dbnane mysql.nixcraft.in # --------------------------------------------------- MUS