【问题标题】:VBA ACCESS - Loop Excel workbooksVBA ACCESS - 循环 Excel 工作簿
【发布时间】:2015-08-06 01:58:54
【问题描述】:

下面的 vba 打开一个 Excel 工作簿,检查它是否处于只读模式,如果是,则等待读/写处于活动状态,然后运行代码。简单

我的问题是我有很多 excel 文件,例如 C:\TEST\TEST.xlsb, C:\TEST\TEST2.xlsb ,C:\TEST\TEST3.xlsb ,C:\TEST\TEST4.xlsb等等

如何让 VBA 通过每个工作簿名称运行代码

为每个工作簿名称节省我多次复制/粘贴代码的时间。

Function test()

Dim xl As Object

Set xl = CreateObject("Excel.Application")

xl.Workbooks.Open ("C:\TEST\Test.xlsb")

Do Until xl.ActiveWorkbook.ReadOnly = False

MsgBox ("Workbook in use, waiting till read/write is active")
Call Pause(5)
xl.Quit
xl.Workbooks.Open ("C:\TEST\Test.xlsb")
If xl.ActiveWorkbook.ReadOnly = False Then Exit Do
Loop


If xl.ActiveWorkbook.ReadOnly = False Then

MsgBox ("read/write active")

'Run code
xl.Sheets("Sheet1").Range("G2").Value = 2222
xl.ActiveWorkbook.Save
xl.Quit

End If

xl.Quit
Set xl = Nothing

End Function

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    您需要一个循环来遍历您的文件并为每个文件调用该函数。 如果你的文件名的模式是这样的 C:\TEST\TEST.xlsb, C:\TEST\TEST2.xlsb ,C:\TEST\TEST3.xlsb ,C:\TEST\TEST4.xlsb 那么您可以例如实现另一个函数来将文件名构建为字符串并将其设置为函数“test”的参数

     Function goThroughFiles()
     Dim front as String
     Dim ending as String
     Dim i as Integer
     Dim strPath as String
    
     front = C:\TEST\TEST
     ending = .xlsb 
     i = 1
    
     // start with filename that has no number in it
     strPath = front & ending
    
     // check if file exists
     Do Until Len(Dir(strPath)) = 0 
        call test(strPath)
        i = i+1
        strPath = front & i & ending
     Loop
    

    你需要改变你原来的函数,所以它接受一个参数:

      Function test(strPath as String)
    

    并将使用该路径的每一行替换为您的输入变量

      xl.Workbooks.Open ("C:\TEST\Test.xlsb")
    

    变成

      xl.Workbooks.Open (strPath)
    

    【讨论】:

    • 您需要在可以通过代码生成的名称中找到一种模式。或者如果名称发生变化,那么您可以将所有工作簿放在一个文件夹中并循环浏览该文件夹的文件。如果名称正在更改并且文件夹不同并且没有任何常量,那么代码将无济于事,您需要手动完成
    • 一个文件夹中的所有文件,唯一改变的是文件名。非常感谢
    • 然后使用这个线程重写函数“goThroughFiles”,你就明白了:stackoverflow.com/questions/10380312/…
    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多