解决您的第一个问题,我建议是这样的:
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等),如果他们不变我可以用记录宏来做到这一点。此外,我不知道算法检查两个值是否相同,并删除旧的。 –
我已编辑它,我没有得到任何回应 –