簡體   English   中英

VBA ACCESS-Loop Excel工作簿

[英]VBA ACCESS - Loop Excel workbooks

下面的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

您需要一個循環來遍歷文件並為每個文件調用該函數。 如果文件名的模式類似於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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM