解決您的第一個問題,我建議是這樣的:
Option Explicit
Dim myWorkbooks As New Collection
Sub GetFile()
Dim fNameAndPath As Variant, i As Long, x As Variant
fNameAndPath = Application.GetOpenFilename("All Files (*.*), *.*", , "Select Files To Be Opened", , True)
If Not IsArray(fNameAndPath) Then
If fNameAndPath = False Then Exit Sub Else fNameAndPath = Array(fNameAndPath)
End If
For i = LBound(fNameAndPath) To UBound(fNameAndPath)
Set x = Workbooks.Open(fNameAndPath(i))
myWorkbooks.Add x
Next
End Sub
這使您可以打開多個文件,並存儲它們(一個指向它們)。
以後,您可以訪問他們像這樣:
Sub ChkID(ID As String)
Dim x As Variant
For Each x In myWorkbooks
If IsNumeric(Application.Match(ID, x.Sheets(1).Columns(1), 0)) Then
x.Sheets(1).Rows(Application.Match(ID, x.Sheets(1).Columns(1), 0)).Delete xlUp
x.Save
End If
Next
End Sub
這將檢查每一個工作簿中的第一張的A列,如果它包含的ID,如果是,刪除線。
如果您正在使用一切完成後,你可以關閉/通過保存所有的世行:
Sub ClsFile()
While myWorkbooks.Count
myWorkbooks(1).Close True
myWorkbooks.Remove 1
Wend
End Sub
唯一的缺點是,如果VBA需要停止,那麼集合將是空的再次(你需要手動關閉它們並通過子再次打開它們。
這應該包含所有你需要建立自己的代碼,你需要它的方式。但是,如果你還有任何問題,只是問:)
耶正是這個。我希望能夠選擇任何數量的文件,而我這樣做。如果「ID」列值已經相同,它會刪除列表中的舊值。 –
我知道如何打開文件選擇,但我不知道如何將其他文件值添加到列表,如果他們是變量(一些文件有10個值其中一些100等),如果他們不變我可以用記錄宏來做到這一點。此外,我不知道算法檢查兩個值是否相同,並刪除舊的。 –
我已編輯它,我沒有得到任何迴應 –