2016-04-25 8 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 и т. Д.), Если они не являются переменными i может сделать это с помощью макроса записи. Кроме того, я не знаю алгоритма, который проверяет, являются ли два значения одинаковыми и удаляет старый. –

+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 

Это проверить столбец А первого листа в каждой книге, если он содержит идентификатор, и если да, то удалите строку.

Если вы закончили со всем, что вы можете закрыть/сохранить все Wb с помощью:

Sub ClsFile() 
    While myWorkbooks.Count 
    myWorkbooks(1).Close True 
    myWorkbooks.Remove 1 
    Wend 
End Sub 

Единственным недостатком является то, что если нужно VBA должен быть остановлен, то коллекция будет снова пуст (вы нужно будет закрывать их вручную, и открывать их снова через суб.


Это должно содержать все, что вам нужно создать свой собственный код так, как вам это нужно. Но если у вас возникли какие-либо вопросы, просто спросите :)

+0

большое спасибо, я попробую! У меня есть еще один вопрос. Как я могу найти код, который добавляет значения других файлов в следующую пустую строку? –

+0

Просто найдите «найти первую пустую строку» или «получите последнюю использованную строку» или что-то в этом роде ... google покажет миллионы возможностей (хорошо ... только ссылки на них): P –

+0

спасибо большое :) i будет проверено –