|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
jimikings 发表于 2012-3-7 13:02
我把每一个表的第一列设为ID列,加入相应的编号。到时候所有的子表都是和总表放在同一个文件夹的。请帮忙 ...
你附件里的数据清单还不标准,不要表头,不要合并单元格,如我附件所示。
另外,要解决你的问题,建议所有子表遵循如下规范:
1、子表的文件名无所谓,但要跟“总管理表”放在同一目录下,并且此目录下不要放其他文件,以免程序出错;
2、子表中存放数据清单的工作表名称应该一致,如附件所示,全部改成“Sheet1”,方便程序调用;
3、子表中必须有的三个字段:“ID”、“项目”、“到期日期”,位置不限,如附件中高亮显示部分;
附件中因示例数据不多,因此设定查询天数为330天以内的记录,你可以自己去修改这个数值,如下面代码注释部分——
- Private Sub CommandButton1_Click()
- On Error Resume Next
- Dim fso As Object, fld As Object, fls As Object, fle As Object
- Dim cn As Object, intDays%
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set fld = fso.GetFolder(ThisWorkbook.Path)
- Set fls = fld.Files
- Set cn = CreateObject("ADODB.CONNECTION")
- intDays = 330 '设置需要提醒的天数,可根据需要修改
- With ActiveSheet
- .Cells.Clear
- .[A1:D1] = Array("ID", "项目", "到期日", "到期天数") '书写表头
- For Each fle In fls '循环处理目录下各个子表
- If fle.Name <> ThisWorkbook.Name Then '搜索子表时,排除“总管理表”本身
- cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=yes;IMEX=2';Data Source=" & fle.Path
- .[A65536].End(xlUp).Offset(1, 0).CopyFromRecordset cn.Execute("SELECT * FROM (SELECT ID,项目,到期日期,DateDiff('d',date(),到期日期) as 到期天数 FROM [Sheet1$]) WHERE 到期天数<=" & intDays)
- cn.Close
- End If
- Next
- MsgBox "查询完成!"
- End With
- '以下代码打扫战场
- Set cn = Nothing
- Set fls = Nothing
- Set fld = Nothing
- Set fso = Nothing
- End Sub
复制代码 |
|