Я пытался перенести старый рабочий код Excel VBA (возможно, написанный на VB 2003) в более новую версию, но поскольку у меня нет предыдущего опыта работы с VB (никогда не использовал его раньше или узнал). Мне не повезло заменить часть всего кода.
У меня есть рабочее знание других языков программирования, и говорит мне, что ошибка в следующем модуле кода:Замена Application.FileSeach (VB) из Excel 2003
Set fs = Application.FileSearch
With fs
.LookIn = dirname
.Filename = "*.*"
.SearchSubFolders = True
If .Execute > 0 Then
nrFiles = .FoundFiles.Count
For i = 1 To nrFiles
ffilename(i) = .FoundFiles(i)
Next i
Else
'MsgBox "There were no files found."
End If
End With
После некоторых выкапывать в интернете я обнаружил, что Application.FileSearch
устарела корпорацию Майкрософт.
У меня есть два обходных варианта для замены Application.FileSearch
Dir
и еще одно возможное решение, которое я забыл.
Поскольку я никогда не изучал VB, я не могу реализовать метод Dir
для реализации функциональности. Если у кого-то всего несколько минут, было бы неплохо, если бы они могли просто помочь мне переписать этот едва ли 10-строчный код.
Примечание: этот модуль принимает dirname
в качестве входных данных (определенного до этой части) и устанавливает значения двух глобальных переменных nrFiles
и ffilename()
, которые будут использованы в дальнейшем от остальной части коды.
я просто нужна замена, которая будет делать то же самое и не бросить исключение, как Application.FileSearch
Я уже пробовал некоторые примеры разбросаны в Интернете, но не вез реализующие их. Любая помощь могла бы быть полезна.
EDIT Я уже упоминал, что у меня практически есть 0 рабочих знаний о VB, поэтому все, что я пытаюсь, похоже на попытку выучить испанский язык за 1 день. @Ken White Вот что я сделал до сих пор и исключение, которое я получаю.
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(dirname)
If objFolder.Files.Count > 0 Then
nrFiles = objFolder.Files.Count
i = 1
For Each objFile In objFolder.Files
ffilename(i) = objFile.Name(i)
i = i + 1
Next objFile
Else
'MsgBox "There were no Files found."
End If
ОШИБКА
Ошибка выполнения '451': пусть
собственности процедура не определена и процедура свойства прибудет не возвращает объект
EDIT 2:
Изменение моего кода на
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(dirname)
If objFolder.Files.Count > 0 Then
nrFiles = objFolder.Files.Count
i = 1
For Each objFile In objFolder.Files
ffilename(i) = objFile ''<-Change is here''
i = i + 1
Next objFile
Else
'MsgBox "There were no Files found."
End If
Работает как очарование. Он работает сейчас.
Всем пытаясь указать двуличие поста и указывая на меня не работает на моей собственной
я писал в начале, что у меня есть 0 знание VB, так что я открыто просил пример, который будет делать то же самое работать как фрагмент кода, установить целочисленную переменную и переменную массива. Для этого не нужно было разбираться, о чем я уже говорил! Таким образом, вместо публикации строк предложения и попыток презирать создателя потока для того, чтобы не пытаться (чего-то у него никогда не было опыта или знаний!), В следующий раз попробуйте предоставить реальную помощь, если у вас есть время или перейдите, если нет.Я знаю, как использовать Google @Blackhawk Я сделал это перед публикацией здесь (или, по крайней мере, почти аналогичной строки поиска). Я предлагаю вам сделать это и прочитать первые 5 сообщений, каждый из которых показывает примерный код примера 40 ~ 50 строк на VB (язык, который я не знаю), и расскажите, сколько из них связано с моей проблемой. Я ЗНАЮ, ЧТО Я МОГУ НАЙТИ В ИНТЕРНЕТЕ! И я сделал это с моими основными знаниями, а не с помощью ЛЮБОГО! Мне просто грустно, как все начали воспринимать проблему. Если вы посещаете страну, язык которой неизвестен, и, к счастью, у вас есть друг, который из этой страны, вы подходите к нему и просите его научить вас говорить, как говорить воду, пищу, туалет, телефон и другие чрезвычайно важные миры, которые вы можете использовать в крайней необходимости! а вместо этого ваш друг попросил вас перевести в один класс на один семестр в один университет? Ну, я просто чувствовал то же самое, с кладами внушения, просящим меня копаться, чтобы понять, что у меня нет прежних знаний !!!! Как это полезно? Могу поспорить, если у вас было достаточно понимания VB, тогда вы могли бы написать то, что я написал (плагиат), через несколько минут !!! то зачем играть бога ???? Теперь для тех, кто может задаться вопросом Каково мое положение, чтобы написать так много, Ну, я и ЕЭК grad. Я знаю C, C++, C#, ASP, JavaScript, CUDA, HSpice, Verilog, Perl, Matlab и еще несколько языков программирования. Я не бросаю вызов кому-либо или не щеголяет. Я никогда не учил VB, поэтому смотреть на стиль VB было очень неудобно для меня, поэтому я решил спросить, чтобы мог быть точный и компактный обходной путь для замены Application.FileSearch (который я не нашел с достаточным объяснением, которое может просветить кого-то без предварительного знания VB)! Ну, я должен был помочь себе!
Модераторы Пожалуйста, закройте нить. ** В любом случае, спасибо всем.
это не связано с VB.NET; вы также можете добавить некоторые пробелы к этой стене текста – Plutonix
спасибо за редактирование, как я уже сказал, у меня нет знаний или опыта работы с макросами/vb, поэтому я добавил этот автоматический тег. но не уверен, что вы имели в виду, что я должен делать с пробелами. извините, n00b. – user2954612
FileSearch был удален из (я думаю) Excel 2007 и далее. Возможно, вы сможете делать то, что хотите, используя FileSystemObject. Некоторые примеры здесь: http://stackoverflow.com/questions/3233203/how-do-i-use-filesystemobject-in-vba – Dave