ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3474|回复: 11

[讨论] 帮助解决自动抓取其他表格数据问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-6 11:48 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
希望通过VBA实现,在汇总表里自动抓取数据表(多个)中固定区域的数据,附件已上传,望能帮助,谢谢

test.zip

6.8 KB, 下载次数: 45

TA的精华主题

TA的得分主题

发表于 2009-1-6 12:59 | 显示全部楼层
如你所愿,请见附件。。。

Roll_up.v3.rar

20.54 KB, 下载次数: 51

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-6 13:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有密码!

TA的精华主题

TA的得分主题

发表于 2009-1-6 13:33 | 显示全部楼层
在总表SHEET1加入一個CommandButton:

Private Sub CommandButton1_Click()
Dim n, i, EOFcol, EOFcolS As Integer
Dim File, GetFile As String
Application.ScreenUpdating = False          'Disable the screen updating
Application.DisplayAlerts = False           'Disable the Alerts Information

With Application.FileSearch                 '查找文件
    .NewSearch                              '建立新查找
    .LookIn = ThisWorkbook.Path             '查找的路径
'    .SearchSubFolders = True               '是否查找子目彔
    .Filename = "*.xls"                     '查找的档名*.xls
'    .MatchAllWordForms = True
    .FileType = msoFileTypeAllFiles
    If .Execute() > 0 Then                  '是否查找到文件
        A = .FoundFiles.Count               '查找到文件的个数
        n = 2                               '汇总.xls的工作表数=2
        For i = 1 To .FoundFiles.Count
            GetFile = .FoundFiles(i)        '查找文件完整路径
            File = Right(GetFile, Len(GetFile) - Len(ThisWorkbook.Path) - 1)   '查找文件名称
            If File <> "汇总.xls" Then      '如果找到的文件不是"汇总.xls"就執行下面程序
                Workbooks.Open (GetFile)
                Workbooks(File).ActiveSheet.Range("A2:E" & Workbooks(File).ActiveSheet.[A65536].End(xlUp).Row).Copy     '把开启文有资料的RANGE复制
                Workbooks("汇总.xls").Worksheets(1).Paste Destination:= _
                    Workbooks("汇总.xls").Worksheets(1).Cells(Workbooks("汇总.xls").Worksheets(1).[A65536].End(xlUp).Row + 1, 1)   '將复制的资料贴到("汇总.xls")当前工作表的第一栏列数+1
                ActiveWorkbook.Close
            End If
        Next i
    End If
End With
Workbooks("汇总.xls").Save
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

TA的精华主题

TA的得分主题

发表于 2009-1-6 13:52 | 显示全部楼层
哦,忘记还有密码了。不好意思。

Private Sub Roll_Up_Click()

Dim numFiles As Integer
Dim numRollup As Integer
Dim ctrlCursorRow As Long
Dim ctrlCursorCol As Long
Dim fileList(9999) As String
Dim filePath As String
Dim startCell As String
Dim rangeSelect As String
Dim sheetSelect As String
Dim emptyRow As Long

'change file path to designated folder
filePath = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C8").Value
ChDir (filePath)


'get all file names in the folder
Do
    If numFiles = 0 Then
    fileList(numFiles) = Dir("")
    ActiveWorkbook.Sheets("FileDir").Select
    ActiveSheet.Cells(numFiles + 5, "B").Value = fileList(numFiles)
    numFiles = numFiles + 1
    Else
    fileList(numFiles) = Dir
    Workbooks("Roll_up.v3.xls").Worksheets("FileDir").Cells(numFiles + 5, "B").Value = fileList(numFiles)
    numFiles = numFiles + 1
    End If
Loop Until ActiveSheet.Cells(numFiles + 4, "B").Value = ""

'initialize variables
numRollup = numFiles - 2
numFiles = 0
startCell = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C10").Value
ctrlCursorRow = Workbooks("Roll_up.v3.xls").Sheets("Rollup").Range(startCell).Row
ctrlCursorCol = Workbooks("Roll_up.v3.xls").Sheets("Rollup").Range(startCell).Column
sheetSelect = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C14").Value
rangeSelect = Workbooks("Roll_up.v3.xls").Sheets("Guide").Range("C12").Value

'open each spreadsheet, copy range and paste in current file
For numFiles = 0 To numRollup Step 1

Workbooks.Open (fileList(numFiles))
Workbooks(fileList(numFiles)).Worksheets(sheetSelect).Range(rangeSelect).Copy
Workbooks("Roll_up.v3.xls").Activate
Worksheets("Rollup").Select
ActiveSheet.Cells(ctrlCursorRow, ctrlCursorCol).Select
ActiveSheet.Paste
Call rangeCleanEmptyRows(emptyRow)
ctrlCursorRow = ctrlCursorRow + Workbooks(fileList(numFiles)).Worksheets(sheetSelect).Range(rangeSelect).Rows.Count - emptyRow
Workbooks(fileList(numFiles)).Close

Next

End Sub

Private Sub rangeCleanEmptyRows(ByRef emptyRow As Long)
Dim rangeValue(1 To 9999) As Variant
Dim rangeValueA(1 To 9999) As Variant
Dim T As Variant
Dim rangeRows As Long
Dim rangeCols As Long
Dim S As Variant
Dim Counter As Long
Dim rangeAddr As String
Dim lastRow As Long
Dim lastCol As Long

'Define range and determine last row of range
Workbooks("Roll_up.v3.xls").Sheets("Rollup").Select
rangeAddr = ActiveWindow.RangeSelection.Address(ReferenceStyle:=xlA1)
lastRow = ActiveSheet.Range(rangeAddr).Rows.Count

'Mark the row to last row of range
For lastCol = 1 To (Range(rangeAddr).Columns.Count)
ActiveSheet.Range(rangeAddr).Cells(lastRow + 1, lastCol).Value = "##END_OF_ROLLUP##"
Next


'Count all empty rows and remove any empty rows within range

emptyRow = 0

For rangeRows = 1 To (Range(rangeAddr).Rows.Count)

For rangeCols = 1 To (Range(rangeAddr).Columns.Count)

rangeValue(rangeCols) = IsEmpty(ActiveSheet.Range(rangeAddr).Cells(rangeRows, rangeCols))
rangeValueA(rangeCols) = ActiveSheet.Range(rangeAddr).Cells(rangeRows, rangeCols)

Next rangeCols

Counter = 0

For Each S In rangeValue()
    If S = True Then
    Counter = Counter + 1
    End If
Next S

For Each T In rangeValueA()
    If T = "##END_OF_ROLLUP##" Then
    Exit Sub
    End If
Next T

If Counter = Range(rangeAddr).Columns.Count Then

emptyRow = emptyRow + 1

ActiveSheet.Range(rangeAddr).Rows(rangeRows).Delete

rangeRows = rangeRows - 1


End If

Next rangeRows


End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-6 13:58 | 显示全部楼层
可否加段代码,就是将抓取过的表改名,例:将数据表1.xls抓完后改为od_数据表1.xls

TA的精华主题

TA的得分主题

发表于 2009-1-6 14:08 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-6 16:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-6 16:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢!再次请教您,如果加句将读取完的表格的后缀名(.xls)去除该怎么写,谢谢!

TA的精华主题

TA的得分主题

发表于 2009-1-6 16:59 | 显示全部楼层
不太明白,可以在改变名称时候不写".xls"....
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-29 09:48 , Processed in 0.046446 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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