2016-04-25 179 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

非常感謝:)我會檢查 –