2016-04-25 177 views
0

这可能对您很容易,但我是VBA的新手。用excel vba添加/更新列表

我有许多列的Excel文件,其中一个是“id”,这是一个关键值。我写了一个代码来打开文件的选择;

Sub GetFile() 
Dim fNameAndPath As Variant 
fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLSM), *.XLSM", Title:="Select File To Be Opened") 
    If fNameAndPath = False Then 
    Exit Sub 
Workbooks.Open Filename:=fNameAndPath 
End Sub 

我想在这个列表中,它应该添加其他文件(具有不同的值和不定量的行相同的列名称)的宏。如果“id”列在添加的文件中具有相同的值,则旧的行应完全删除。

有没有人有任何建议?

+0

耶正是这个。我希望能够选择任何数量的文件,而我这样做。如果“ID”列值已经相同,它会删除列表中的旧值。 –

+0

我知道如何打开文件选择,但我不知道如何将其他文件值添加到列表,如果他们是变量(一些文件有10个值其中一些100等),如果他们不变我可以用记录宏来做到这一点。此外,我不知道算法检查两个值是否相同,并删除旧的。 –

+0

我已编辑它,我没有得到任何回应 –

回答

0

解决您的第一个问题,我建议是这样的:

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需要停止,那么集合将是空的再次(你需要手动关闭它们并通过子再次打开它们。


这应该包含所有你需要建立自己的代码,你需要它的方式。但是,如果你还有任何问题,只是问:)

+0

非常感谢,我现在就试试吧!我还有一个问题。我如何找到将其他文件的值添加到下一个空行的代码? –

+0

只需寻找“找到第一个空行”或“获取最后使用的行”或类似的东西......谷歌将显示数百万的可能性(好吧...只是链接到他们):P –

+0

非常感谢:)我会检查 –