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

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

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

  

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

  1. SSIS 系列 - 在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表,备份数据表,以及写入Audit 信息

    转自http://www.cnblogs.com/biwork/p/3328838.html 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge ...

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

    前言 一般来说,物理表的增.删.改.查都受到数据量的制约,进而影响了性能. 很多情况下,你所负责的业务关键表中,每日变动的数据库与不变动的数据量比较,相差非常大. 这里我们将变动的数据称为动态数据,不 ...

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

    该刊登表设计是利用VB写的,当时因为两个系统的数据不能直接对接,又copy并且组合SKU,一个表格一个表格填写,比较麻烦,还好刊登系统可以允许用excel表格上传数据 所以就下好模板,学了VB语言,在 ...

  4. CSS表单与数据表(上)

    表单在现代Web应用中占据着重要地位. 表单可以很简单,也可以非常复杂,要横跨几个页面. 除了从用户哪里获得数据,Web应用还需要以容易看懂的方式展示数据.表格是展示复杂数据的最佳方式. 1.设计数据 ...

  5. mysql在线修改表结构大数据表的风险与解决办法归纳

    整理这篇文章的缘由: 互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需 ...

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

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

  7. Mysql学习(慕课学习笔记4)创建数据表、查看数据表、插入记录

    创建数据表 Create table [if not exists] table_name(column_name data_type,…….) UNSIGNED 无符号SIGNED 有符号 查看创建 ...

  8. Mysql 表转换成 Sqlite表

    目前的转换仅仅支持对没有外键的Mysql数据表 准备: 下载安装 Sqlite Expert 软件 一 获取Mysql中的.sql文件,获取过程省略可以直接导出sql文件 二 在Sqlite Expe ...

  9. 数据库遇到的问题——mysql在线修改表结构大数据表的风险与解决办法归纳

    互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需要我来考虑,虽然我们没 ...

随机推荐

  1. 安卓微信端打开H5页面背景图被键盘挤压移动位置解决

    问题:在微信端(安卓浏览器也如此)打开的H5登录页面中,点击输入信息,弹出软键盘会挤压背景图片. 本来的body宽高设置body{width:100%,height:100%},不起作用,这样写就会导 ...

  2. MYSQL.版本查看-LINUX

    MYSQL.版本查看-LINUX 方式1: 不需登录mysql,登录Linux服务后,执行如下指令: # mysql -V 注意: 那个是大写的V,如果使用小写的v,在root没有设置密码的情况下,就 ...

  3. AD域详解

    很详细,赞!

  4. Windows中的原语与原子

    目前对原语与原子的理解为: 原语: 由内核提供的核外调用的一段具有特定功能的方法或者函数称之为---原语 原语操作不允许发生中断. 原子:         在多进程多线程的操作系统中不允许其他进程或者 ...

  5. kaggle learn python

    def has_lucky_number(nums): return any([num % 7 == 0 for num in nums]) def menu_is_boring(meals): &q ...

  6. Django的admin管理系统写入中文出错的解决方法/1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘locate’

    Django的admin管理系统写入中文出错的解决方法 解决错误: 1267  Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and ( ...

  7. Typora/VSCode/Sublime 更改Markdown默认宽度样式等

    Typora 所见即所得Markdown编辑器更改 最大宽度 C:\Users\Desk\AppData\Roaming\Typora\themes\github.css CSS第46行改为 max- ...

  8. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  9. 用 webpack 创建 vue 项目

    1.安装支持webpack 包 npm i -D  webpack webpack-cli  aspnet-webpack webpack-dev-middleware  webpack-hot-mi ...

  10. Linux系统下为普通用户加sudo权限

    Linux下为普通账号加sudo权限 1. 错误提示:当我们使用sudo命令切换用户的时候可能会遇到提示以下错误:xxx is not in the sudoers file. This incide ...