Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4804|回复: 12

[已解决]提取数据并另存为新的文件VBA

[复制链接]
发表于 2014-5-13 08:57 | 显示全部楼层 |阅读模式
本帖最后由 chensir 于 2014-5-13 11:00 编辑

求助vba语句:比如我要提取管理城市为北京的所有数据另存为一个新的文件,文件名的规则是此文件名后面加"-北京",即"14年4月利润-北京"。这管理城市用输入框的形式,输入"北京"后,即另存为一个管理城市为北京的所有数据,并且透视表也要保留,即基础表和透视表都要保留。多谢各位帮忙。
最佳答案
2014-5-13 10:54
chensir 发表于 2014-5-13 10:49
我知道了,另外如何把透视表一同带到新的表格里,可以做到吗  我在文件里又加了一个透视表,谢谢

可以把数透表复制过去。


14年4月利润.zip

12.18 KB, 下载次数: 6

发表于 2014-5-13 09:11 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-5-13 09:19 | 显示全部楼层
hwc2ycy 发表于 2014-5-13 09:11
直接通过SQL查询生成新文件吧。

之所以要分表是因为不同的管理城市只能看自己的,一个文件按照管理城市的数量分成几个文件发给相关人员
回复

使用道具 举报

发表于 2014-5-13 09:32 | 显示全部楼层
  1. Sub demo()
  2.     Dim AdoConn As Object
  3.     Dim AdoRst As Object
  4.     Dim AdoRst1 As Object
  5.     Const adUseClient = 3
  6.     Const adModeRead = 1
  7.     Dim i As Integer
  8.     Dim strSql$, strConn$
  9.     Dim strCity$
  10.     On Error GoTo ErrorHandler
  11.     strCity = InputBox("请输入要查询的城市:", , "北京")
  12.    
  13.     If Len(strCity) = 0 Then MsgBox "查询输入不对": Exit Sub

  14.     strSql = "select  * from [sheet1$a1:f] where 管理城市='" & strCity & "'"

  15.     Set AdoConn = CreateObject("ADODB.Connection")
  16.     strConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  17.               "Data Source='" & ThisWorkbook.FullName & "';Extended Properties='Excel 8.0';"
  18.     With AdoConn
  19.         .CursorLocation = adUseClient
  20.         .Mode = adModeRead
  21.         .ConnectionString = strConn
  22.         .Open
  23.     End With
  24.     Set AdoRst = AdoConn.Execute(strSql)
  25.     With AdoRst
  26.         If .RecordCount > 0 Then
  27.             Workbooks.Add
  28.             For i = 0 To AdoRst.Fields.Count - 1
  29.                 Cells(1, i + 1).Value = .Fields(i).Name
  30.             Next
  31.             Range("a2").CopyFromRecordset AdoRst
  32.             Dim ldot&
  33.             ldot = InStrRev(ThisWorkbook.Name, ".")
  34.             strConn = ThisWorkbook.Path & "" & Replace(ThisWorkbook.Name, Mid(ThisWorkbook.Name, ldot), "-" & strCity & Mid(ThisWorkbook.Name, ldot))
  35.             Application.DisplayAlerts = False
  36.             ActiveWorkbook.SaveAs Filename:=strConn, FileFormat:=xlOpenXMLWorkbookMacroEnabled
  37.             MsgBox "数据导出完成" & vbCr & strConn
  38.         Else
  39.             MsgBox "无数据可提取"
  40.         End If
  41.     End With
  42.     Set AdoRst = Nothing
  43.     AdoConn.Close
  44.     Set AdoConn = Nothing
  45.     Application.DisplayAlerts = True
  46.     Exit Sub
  47. ErrorHandler:
  48.     Dim strErr$
  49.     strErr = strErr & "错误代码:" & Err.Number & vbCr
  50.     strErr = strErr & "错误描述:" & Err.Description & vbCr
  51.     strErr = strErr & "错误来源:" & Err.Source
  52.     MsgBox strErr, vbCritical + vbOKOnly
  53. End Sub
复制代码
回复

使用道具 举报

发表于 2014-5-13 09:38 | 显示全部楼层
  1. Sub demo()
  2.     Dim AdoConn As Object
  3.     Dim AdoRst As Object
  4.     Const adUseClient = 3
  5.     Const adModeRead = 1
  6.     Dim strSql$, strConn$, strCity$
  7.     Dim ldot&, i&
  8.     On Error GoTo ErrorHandler

  9.     '查询城市
  10.     strCity = InputBox("请输入要查询的城市:", , "北京")
  11.     If Len(strCity) = 0 Then MsgBox "查询输入不对": Exit Sub

  12.     'SQL语句和ADO连接字符串
  13.     strSql = "select  * from [sheet1$a1:f] where 管理城市='" & strCity & "'"
  14.     strConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  15.               "Data Source='" & ThisWorkbook.FullName & "';Extended Properties='Excel 8.0';"
  16.     '创建ADO连接对象
  17.     Set AdoConn = CreateObject("ADODB.Connection")
  18.     With AdoConn
  19.         .CursorLocation = adUseClient
  20.         .Mode = adModeRead
  21.         .ConnectionString = strConn
  22.         .Open
  23.     End With
  24.    
  25.     '返回查询记录
  26.     Set AdoRst = AdoConn.Execute(strSql)

  27.     With AdoRst
  28.         If .RecordCount > 0 Then
  29.             Workbooks.Add
  30.             '标题行
  31.             For i = 0 To AdoRst.Fields.Count - 1
  32.                 Cells(1, i + 1).Value = .Fields(i).Name
  33.             Next
  34.             '数据
  35.             Range("a2").CopyFromRecordset AdoRst
  36.             '原文件名中.号位置
  37.             ldot = InStrRev(ThisWorkbook.Name, ".")
  38.             '替换生成新文件名
  39.             strConn = ThisWorkbook.Path & "" & Replace(ThisWorkbook.Name, Mid(ThisWorkbook.Name, ldot), "-" & strCity & Mid(ThisWorkbook.Name, ldot))
  40.             Application.DisplayAlerts = False
  41.             '保存
  42.             ActiveWorkbook.SaveAs Filename:=strConn, FileFormat:=xlOpenXMLWorkbookMacroEnabled
  43.             Application.DisplayAlerts = True
  44.             MsgBox "数据导出完成" & vbCr & strConn
  45.         Else
  46.             MsgBox "无数据可提取"
  47.         End If
  48.     End With

  49.     Set AdoRst = Nothing
  50.     AdoConn.Close
  51.     Set AdoConn = Nothing
  52.     Exit Sub

  53. ErrorHandler:
  54.     Dim strErr$
  55.     strErr = strErr & "错误代码:" & Err.Number & vbCr
  56.     strErr = strErr & "错误描述:" & Err.Description & vbCr
  57.     strErr = strErr & "错误来源:" & Err.Source
  58.     MsgBox strErr, vbCritical + vbOKOnly
  59. End Sub
复制代码
回复

使用道具 举报

发表于 2014-5-13 09:45 | 显示全部楼层
  1. Sub test()
  2. Dim arr, brr(1 To 100000, 1 To 9), i&, j&, k&, st$
  3. arr = Range("a1").CurrentRegion
  4. st = InputBox("请输入要统计的管理城市", "输入")
  5. k = 1
  6. For i = 1 To UBound(arr)
  7.      If i = 1 Then
  8.            For j = 1 To UBound(arr, 2)
  9.                brr(i, j) = arr(i, j)
  10.            Next j
  11.      ElseIf arr(i, 3) = st Then
  12.            k = k + 1
  13.            For j = 1 To UBound(arr, 2)
  14.            brr(k, j) = arr(i, j)
  15.            Next j
  16.      End If
  17. Next i
  18.      If brr(2, 1) <> "" Then
  19.        With Workbooks.Add
  20.             .Sheets(1).[a1].Resize(k, UBound(arr, 2)) = brr
  21.             .SaveAs ThisWorkbook.Path & "" & ThisWorkbook.Name & "-" & st & ".xlsx"
  22.             .Close True
  23.        End With
  24.      End If
  25. End Sub
复制代码

评分

参与人数 1 +18 收起 理由
chensir + 18

查看全部评分

回复

使用道具 举报

发表于 2014-5-13 09:48 | 显示全部楼层
14年4月利润.rar (21.43 KB, 下载次数: 10)

评分

参与人数 1 +18 收起 理由
chensir + 18

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-5-13 10:25 | 显示全部楼层
810126769 发表于 2014-5-13 09:45

多谢,请问透视表如何也保留在新的表内
回复

使用道具 举报

 楼主| 发表于 2014-5-13 10:25 | 显示全部楼层
qh8600 发表于 2014-5-13 09:48

多谢,请问透视表如何也保留在新的表内
回复

使用道具 举报

 楼主| 发表于 2014-5-13 10:27 | 显示全部楼层
本帖最后由 chensir 于 2014-5-13 10:50 编辑
hwc2ycy 发表于 2014-5-13 09:38

知道原因了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 13:12 , Processed in 0.423644 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表