2016-06-20 5 views
1

Есть ли способ «выделить» файл в vba? Мой код переходит в ряд папок и импортирует данные из каждого файла (excel), присутствующего в основной базе данных. Самая трудоемкая часть операции - открытие файлов - в настоящее время я добавляю префикс к имени файла после импорта. Код ищет этот префикс и пропускает файл в следующем цикле импорта.Earmarking Excel файл через VBA

Есть ли более элегантный и менее видимый интерфейс для маркировки файлов, чтобы VBA мог распознать завершенный файл, не открывая его первым?

EDIT: Чтобы уточнить, имена файлов считываются, и файл не обрабатывается, если у него есть префикс (I_). Я ищу способ отметить файл без изменения его соответствующего местоположения или имени файла - свойство, которое не сразу видно для других пользователей базы данных. Эта маркировка должна сохраняться после завершения кода, так как те же файлы проверяются позже и, возможно, с нескольких компьютеров, на которых выполняется код обновления.

Я не могу хранить базу данных обработанных файлов - их несколько тысяч и растут. По сравнению с этим списком потребуется больше времени, чем открытие файла и его обработка независимо от того, был ли он запущен раньше.

Массив обработанных файлов не будет сохраняться. У меня нет проблемы с обработкой одного и того же файла несколько раз за одно исполнение, а скорее из [обработки файла каждый раз, когда код выполняется вместо однократного выполнения] или [переименовать файл]. Последнее не является хорошим решением - я не хочу переименовывать тысячи файлов, используемых для ссылок другими людьми и программами.

+1

Не могли бы вы сохранить журнал файлов в уже импортированной базе данных? Или переместите файлы в папку «Completed Imports» или что-то вроде этого? Почему вы открываете файл для проверки имени файла? Не могли бы вы проверить имя файла, прежде чем открывать файл, а не открывать его, если он имеет префикс? – OpiesDad

+0

Переместить файлы в «обработанную» папку? – bated

+1

Зачем открывать файл, чтобы получить имя файла? Исправьте свой код, чтобы он проверял имя файла ** перед тем, как открыть его. Это было бы довольно быстро. – JNevill

ответ

0

Для небольшого количества файлов я добавляю каждое имя файла в массив по мере их обработки после того, как имя каждого файла уже проверено на наличие в массиве.

If IsInArray(FileName, ProcessedFilesArray) Then 

    'You processing code here 

    'Add item to array when processed 
    ReDim Preserve ProcessedFilesArray(1 To UBound(ProcessedFilesArray) + 1) As Variant 
    ProcessedFilesArray (UBound(ProcessedFilesArray)) = FileName 

End If 

Function IsInArray(FileToBeFound As String, arr As Variant) As Boolean 
    IsInArray = (UBound(Filter(arr, FileToBeFound)) > -1) 
End Function 

Для большого количества файлов, я бы создать папку в текущей папке для обрабатываемых файлов, перемещение каждого из них есть и перемещать их обратно, когда все будет сделано.

Смежные вопросы