首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VBA无法读取同一文件夹中的其他工作簿

是因为在VBA中,默认情况下,VBA只能访问当前工作簿所在的文件夹中的其他工作簿。如果要访问同一文件夹中的其他工作簿,可以使用完整的文件路径来引用这些工作簿。

在VBA中,可以使用FileSystemObject对象来处理文件和文件夹。以下是一个示例代码,演示如何使用VBA读取同一文件夹中的其他工作簿:

代码语言:txt
复制
Sub ReadOtherWorkbooks()
    Dim fso As Object
    Dim folderPath As String
    Dim fileName As String
    Dim wb As Workbook
    
    ' 设置文件夹路径
    folderPath = ThisWorkbook.Path
    
    ' 创建FileSystemObject对象
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 遍历文件夹中的所有文件
    For Each file In fso.GetFolder(folderPath).Files
        ' 检查文件类型是否为Excel文件
        If Right(file.Name, 4) = ".xls" Or Right(file.Name, 5) = ".xlsx" Then
            ' 打开工作簿
            Set wb = Workbooks.Open(file.Path)
            
            ' 在这里可以编写读取工作簿的代码
            
            ' 关闭工作簿
            wb.Close SaveChanges:=False
        End If
    Next file
    
    ' 释放对象
    Set fso = Nothing
End Sub

在上述示例代码中,首先获取当前工作簿所在的文件夹路径,然后使用FileSystemObject对象遍历文件夹中的所有文件。通过判断文件的扩展名是否为".xls"或".xlsx"来确定是否为Excel文件。然后使用Workbooks.Open方法打开工作簿,可以在打开的工作簿中编写读取数据的代码。最后关闭工作簿。

这是一个简单的示例,你可以根据实际需求进行修改和扩展。如果需要更多关于VBA的帮助,可以参考腾讯云的Excel VBA开发文档:Excel VBA开发

请注意,以上答案仅供参考,具体的解决方案可能因实际情况而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

VBA代码:拆分工作簿示例——将工作簿每个工作表保存为单独工作簿

标签:VBA 有时候,我们想将工作簿每个工作表都保存为一个单独工作簿。 你可以使用下面的操作逐个保存工作表: 1.在工作表标签单击右键。 2.选取“移动或复制…”命令。...3.选择“(新工作簿)”。 4.保存该工作簿。 图1 这样,有多少工作表,你就要操作上面的步骤多少次。 然而,如果存在很多个工作簿,这样重复工作使用VBA是最合适。...msoFileDialogFolderPicker) .InitialFileName =Application.DefaultFilePath & "\" .Title = "选择保存工作位置...Next wks Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub 只需在要拆分工作簿运行上述代码...,就可将该工作簿所有工作表全部保存为单独工作簿

3.9K11
  • VBA实用小程序62: 获取文件夹中最新保存工作簿

    在有些情形下,我们可能需要找到指定文件夹中最新保存工作簿,然后对其进行处理。...例如,每天上班前系统会自动生成一个工作簿并保存到某文件夹,而某位员工每天上班后需要从该文件夹打开这个新生成工作簿来提取数据,这样程序需要根据工作簿保存时间找到这个最新保存工作簿,然后再对其进行处理...下面的程序可以返回指定文件夹中最新保存工作簿名称: '获取指定文件夹除当前工作簿外 '最新保存工作簿文件名 Function GetLastWorkbook(sPath As String) As...("Scripting.FileSystemObject") SetobjFile = fs.GetFile(sPath & sFile) tm = 0 '遍历文件夹文件...'下一个文件 sFile = Dir Loop '返回值 GetLastWorkbook = sName End Function 假设当前工作簿存放在指定要获取最新保存工作簿文件夹

    1.5K10

    VBA: 将多个工作簿第一张工作表合并到一个工作簿

    文章背景: 在工作,有时需要将多个工作簿进行合并,比如将多份原始数据附在报告之后。...如果有很多工作簿,都需要进行移动的话,一个一个打开然后再操作比较费时费力。这时就可以使用VBA来批量进行操作。...在目标工作簿内,插入一个模块,然后导入如下代码: Option Explicit Sub MergeWorkbook() '将多个工作簿第一张工作表合并到目标工作簿...End Sub (1) 将目标工作簿和待转移工作簿放在同一文件夹内; (2)上述代码要实现功能是,将同一文件夹内所有工作簿(目标工作簿除外)第一张工作表拷贝到目标工作簿内,并将表名设置为拷贝前所属工作簿名称...转移前: 转移后: 参考资料: [1] 如何使用Excel VBA将多个工作簿全部工作表合并到一个工作簿(https://zhuanlan.zhihu.com/p/76786888)

    5.6K11

    VBA实用小程序61: 在文件夹内所有文件运行宏在工作簿所有工作运行宏

    学习Excel技术,关注微信公众号: excelperfect 在文件夹中所有文件上运行宏,或者在Excel工作簿中所有工作表上运行宏,这可能是一种非常好Excel自动化方案。...例如处理类似的数据工作簿文件并想要提取数据或转换该工作簿。下面给出了适用这种情况一些VBA程序,这些程序代码整理自analystcave.com,供有兴趣朋友参考。..." End Sub 这段代码完成下列操作: 1.在当前工作簿路径打开“选择文件”对话框,要求选择一个用于存储所有文件文件夹。...2.打开一个单独Excel进程(应用程序),然后逐个打开每个文件。 3.使用要在每个打开工作簿上运行代码替换“在这里放置你代码”部分。 4.每个打开工作簿在关闭时不会保存所作修改。...下面的内容与前述内容几乎相同,但是请注意声明了一个全局变量fileCollection,这将首先用于存储子文件夹中标识所有文件,并且仅用于在此VBA集合存储文件上运行所有宏之后。

    4.6K11

    VBA实用小程序49: 列出所有打开工作簿VBA模块和过程

    学习Excel技术,关注微信公众号: excelperfect 有时,我们可能需要知道工作簿中有哪些模块和相应过程。...Jon Peltier改编了VBA过程,可以列出当前所有已经打开工作簿中所含有的VBA模块和过程清单。在输出工作,前两行为模块所在工作簿名称和工程名称。...并且,代码会绕过受保护VBA工程,同时如果工作簿没有代码,也会在输出工作说明。...Dim wsOutput As Excel.Worksheet Dim sOutput() As String Dim sFileName As String '声明访问工作簿变量...图2 从图2可以看出,我当前打开了3个工作簿,其中两个没有保存也没有代码,另外工作簿就是GetVBAProcedures过程代码所在工作簿,有2个模块3个过程。

    4K20

    Python操控Excel:使用Python在主文件添加其他工作簿数据

    标签:Python与Excel,合并工作簿 本文介绍使用Python向Excel主文件添加新数据最佳方法。该方法可以保存主数据格式和文件所有内容。...图2 可以看出: 1.主文件包含两个工作表,都含有数据。 2.每个工作表都有其格式。 3.想要在每个工作最后一行下面的空行开始添加数据。如图2所示,在“湖北”工作,是在第5行开始添加新数据。...要获取工作表名称,只需调用.name属性。 图3 接下来,要解决如何将新数据放置在想要位置。 这里,要将新数据放置在紧邻工作表最后一行下一行,例如上图2第5行。...图4 打开并读取新数据文件 打开新数据文件,从中获取所有非空行和列数据。使用.expand()方法扩展单元格区域选择。注意,从单元格A2开始扩展,因为第1列为标题行。...图6 将数据转到主文件 下面的代码将新数据工作簿数据转移到主文件工作簿: 图7 上述代码运行后,主文件如下图8所示。 图8 可以看到,添加了新数据,但格式不一致。

    7.9K20

    yhd-VBA从一个工作簿工作查找符合条件数据插入到另一个工作簿工作

    今天把学习源文件共享了出来,供大家学习使用 上次想到要学习这个 结合网友也提出意见,做一个,如果有用,请下载或复制代码使用 【问题】我们在工作中有时要在某个文件(工作簿查找一些数据,提取出来...常用方法是打开文件,来查找,再复制保存起来。如果数据少还是手工可以,如果数据多了可能就。。。。 所以才有这个想法。...想要做好了以后同样工作就方便了 【想法】 在一个程序主控文件 设定:数据源文件(要在那里查找工作簿) 设定:目标文件(要保存起来那个文件) 输入你要查找数据:如:含有:杨过,郭靖数据。...要复制整行出来 主控文件设定如图 数据源文件有两个工作表 查找到"郭靖"数据保存到目标文件【射雕英雄传】工作表 查找到"杨过"数据保存到目标文件【第一个】工作表 【代码】 Sub...从一个工作簿工作查找符合条件数据插入到另一个工作簿工作() Dim outFile As String, inFile As String Dim outWb As

    5.2K22

    问与答93:如何将工作簿引用文件全部复制并汇总到指定文件夹

    Q:我在做一个非常巨大数据,一个主工作簿,还有非常多个被引用数据工作簿散布在计算机很多位置。...因为很多数据是临时来,时间一长,我已经搞不清到底引用了哪些工作簿,有没有办法自动把相关工作簿打包在一起? A:这只能使用VBA来解决了。...例如下图1所示,在工作簿工作表Sheet1有几个单元格分别引用了不同位置工作簿数据,我们要把引用这几个工作簿复制到该工作簿所在文件夹。 ?...strFind2 As String Dim iPos2 As Integer Dim strPath As String Dim strFile As String '设置工作表且将该工作公式单元格赋给变量...strFile = Mid(rng.Formula, iPos1 +2, iPos2 - iPos1 - 2) End If '如果找到且不在当前工作簿文件夹

    2.4K30

    VBA汇总文件夹多文件工作不同单元格区域到总表

    VBA汇总文件夹多文件工作不同单元格区域到总表 【问题】我们发了这样一个表格到各单位收集资料,各单位填写完后上交上来有许多个文件,我们现在想汇总成一年一个表,怎么办?...那就加班,再加班 【解决问题】我们口号是VBA使工作效率提高,不加班 ====【代码】==== Sub 提取多文件一工作不同区域汇总() Dim fileToOpen, x, total_file_path...用Application.GetOpenFilename打开一个选择文件对话框,可以多选,把选择文件存入到fileToOpen数据 2.循环数组, 3.打开一个文件,并复制全部区域,到指定2016...-2018表格,下一次复制,复制到最后一行A列, 4.因为在打开文件过程可能有些人在传输文件,文件损坏了,所以加上On Error Resume Next,不报错继续运行。...原因是:初值是.Range("a5:t11"),想要组合进行也是.Range("a5:t11"),所以程序是不可以

    2.3K21

    VBA: 获取单元格内超链接文件绝对路径

    文章背景:在工作,有时为了内容跳转方便,会在单元格内设置超链接,通过Hyperlinks(1).Address,得到是超链接文件相对路径。...如果当前工作目录设置为C:\bacon,这些文件夹和文件相对目录,就表示为下图所示样子。 相对路径开始处.\是可选。例如,.\spam.txt和spam.txt指的是同一个文件。...回到VBA,通过ThisWorkbook.Path,可以获取当前工作簿所在工作目录路径;通过Hyperlinks(1).Address,得到是基于ThisWorkbook.Path相对路径;通过ThisWorkbook.Path...2 函数编写 针对单元格内超链接,本文暂不考虑共享文件夹情况,链接文件可以分为以下三种情况: 在同一工作目录内; 在同一个公共盘,不在同一工作目录内; 不在同一公共盘。...If relativepath = "" Then getAbsolutePath = "本工作簿内" '链接其他

    3.3K40

    对象Workbook Worksheet Range使用

    1、需求: 有1个工作簿,包含3个工作表,每个工作A列有内容,现要求根据工作名称来创建文件夹,再根据每个工作A列内容创建Workbook,并保存在对应文件夹内。 ?...2、代码实现 我们先来分析一下程序大概流程: 使用循环读取每个Worksheet名称,创建文件夹 读取每个WorksheetA列内容,需要准确定位范围,再读取RangeValue 然后根据Range...创建文件夹MkDir 完整代码: Sub vba_main() Dim i As Long '循环每一个工作表 For i = 1 To Worksheets.Count...arr = sht.Range("A1").Resize(i_row, 1).Value '创建文件夹 VBA.MkDir ThisWorkbook.Path & "\" & sht.Name...Workbooks.Add '保存工作簿 wk.SaveAs ThisWorkbook.Path & "\" & sht.Name & "\" & VBA.CStr(arr

    1.7K40

    Excel VBA对象模型

    工作簿 Workbooks 国集合 所有打开工作簿 Worksheet 家 工作簿工作表 Worksheets 家集合 1个工作簿里所有的工作表 Range...天子觉得这样管理太累,自然就要分封了,他分封一个国,在VBA里我们可以这样新建1个Workbook,在立即窗口输入: Application.Workbooks.Add 这时候你能看到,出现了一个空白工作簿...然后EXCEL.EXE读取那个文件在硬盘上数据,并解析数据放到了内存 解析过程也就是去创建1个树形对象模型 解析过程会根据文件情况创建Workbook、Worksheet对象,其实所谓创建也只是在内存按一些规则来组织数据...,然后读取出来。...我们用那些Add等语句新添加对象,Excel VBA都会开辟新内存空间来存放。 所以假如你一直添加新Workbook、Worksheet对象,内存终将耗尽而无法继续添加。

    2.3K31

    Excel编程周末速成班第3课:Excel对象模型

    例如,你程序打开一个工作簿并需要使用其现有的一个工作表。在其他时候,该对象不存在,并且你程序必须创建该对象并获得引用(例如,当向工作簿添加新工作表时)。...如果你不希望工作簿保存在Excel默认数据文件夹,则名称还可以包括驱动器和/或路径信息。...然而,对ThisWorkbook需求可能并不明确,在许多情况下,正在执行VBA代码位于该代码所操纵同一工作簿,因此不需要ThisWorkbook。...要将工作表复制到另一个工作簿,省略After和Before参数。Excel创建一个新工作簿,然后将工作表复制到其中。 提示:无法工作表直接复制或移动到现有工作簿。...Excel工作簿由Workbooks集合Workbook对象表示。提供了用于创建新工作簿和打开现有工作簿,保存和关闭工作簿以及其他必需任务方法。 工作表由Sheets集合Sheet对象表示。

    5.1K30

    不用找VBA,多路径多文件夹数据汇总,原来还是这么简单!

    但是,实际工作,对数据汇总需求往往是千变万化,所以,我们关键是要学会其中方法以及Power Query一些相关基础知识,这样,就可以在各种变化,按需要进行相应处理了。...下面这个问题来自一个学员朋友实际工作需要,即:PQ可否实现多个不同存放路径下文件夹读取和堆叠(汇总)呢?原来找VBA又不能用了!...Step 01-添加自定义列,用Folder.Files读取文件夹文件列表 Step 02-展开列表得到所有文件夹下文件信息 Step 03-按需要对要汇总文件进行筛选 至此,...我们得到了所有需要合并Excel文件,后面的步骤就跟汇总一个文件夹数据是完全一样了(用Excel.Workbook解析,然后选择和展开数据即可),具体可参考视频《同一文件夹内多工作簿数据汇总建议方案...》: 在Power Query里,每一个步骤其实就是一个函数运用,输入输出非常明确,这使得很多内容比较复杂、处理比较繁琐数据整理过程非常清晰,你可以很容易地去增加、减少或修改一个步骤,去应对实际工作变化

    74030

    批量导入Excel文件,为什么我导入数据重复了?

    Step-01:新建查询-从文件夹 确定后,我们看到文件夹里有3个文件: 这里,显然是因为将合并工作表和数据源放在了同一文件夹下,所以Power Query将合并工作表也显示了出来,并且...Step-02:编辑,筛选去除合并工作簿 通过这样筛选,保证后续进入Power Query只有自己希望导入工作簿。...Step-03:添加自定义列,读取工作簿数据,公式=Excel.Workbook([Content]) Step-04:展开table数据 展开后我们又看到了3个表,可源数据里明明只有一个表...Step-05:选择Sheet类别的工作表 经过这样筛选后,我们最终导入数据就只有该工作簿中最原始工作表数据,后续操作就没有什么差别了,我们继续完成它。...大海:是的,即使看上去是同一份数据,实际上Excel为了适应你各种不同需要,系统内自动生成了多种对象,就像复制了好多份让你去用一样,这些内容在通过Power Query或者VBA或者做系统开发(如导入导出

    2.9K50
    领券