2014-09-11 3 views
0

Хорошо, ребята, извините, если тег кода не работает, я не был в переполнении стека в какой-то момент. В любом случае, это проблема, с которой я столкнулся, и я уверен, что знаю, что происходит, но я мог бы воспользоваться некоторой помощью. Код ниже. Я в основном открываю книгу excel, которая будет хранить пути к файлам на разных книгах на моем компьютере, и я помещаю их в массив. Массив правильно хранит данные в окне сообщения отладки, которое я использую, но когда он попадает в строку «Установить tempBook = filePathArray (i, 1)« Я получаю ошибку «424 Object Required». Теперь я знаю, что элемент в массиве, который я просматриваю в строке Set tempBook, просматривает путь к файлу. Моя теория заключается в том, что информация, хранящаяся в массиве, может иметь специальное форматирование, которое не позволяет Set tempBook распознавать строку как путь к файлу. Извините, если это действительно просто, это мой первый опыт работы с VBA и макросами. Я предпочитаю Java и C#. Во всяком случае, ребята и девочки могут быть очень благодарны. Также для безопасности я изменяю информацию о пути файла для файлаPathBook перед публикацией.VBA-Excel Получение пути к файлу из структуры массива

Резюмируя:

Я извлечение информации о пути к файлу из книги на моем рабочем столе и хранить его в массив, каждая ячейка в этой книге проводит полный путь файла в книгу

I» m, затем запускает цикл, который будет проходить через массив, по одному элементу за раз в течение цикла и пытается вытащить каждый путь файла отдельно, получить некоторые данные, а затем сделать это снова со следующим путём файла в массиве.

Ошибка, которую я получаю, заключается в том, что при попытке вытащить первый путь к файлу из массива и поместить его в переменную, которая настроена как рабочая книга, я получаю ошибку «424 Object Required» ,

У меня есть поле для сообщения отладки, поэтому я знаю, что место, на которое вы смотрите, содержит правильную информацию о пути к файлу, но я считаю, что форматирование массива может вызвать проблемы.

Любая помощь для облегчения этой проблемы была бы весьма признательна.

Sub get_data_from_file() 

Dim actBook As Workbook   'active workbook 
Dim filePathBook As Workbook 'filepath workbook 

Dim pasteCounter As Integer  'paste counting variable in loop 
Dim counter As Integer   'loop counter 


'This sets the workbook the macro is in to be the active workbook to paste too 
Set actBook = ActiveWorkbook 

'Turn off screen update to speed up macro and make it not seem like the screen flashes 
Application.ScreenUpdating = False 

'set the filePathBook to point to the workbook storing the file paths for other books 
Set filePathBook = Workbooks.Open("C:directory info\filePathBook") 



Dim filePathArray As Variant 'declare array 

'retrieve data from range cells and store in array, these are the file paths for other books 
filePathArray = filePathBook.Sheets("Sheet1").Range("a1:a2").Value 

'Save and close filePathBook 
filePathBook.Save 
filePathBook.Close 

pasteCounter = 1 'initialize paste counter variable, it's used to move cell paste locations 

'declare another workbook to use as the temporary variable in the loop to open and retrieve info from each workbook in the array 
Dim tempBook As Workbook 

'Looping structure to look at array and perform functions. 
For i = 1 To UBound(filePathArray) 


    MsgBox filePathArray(i, 1)      'Debugging purposes: files are being stored properly 


    Set tempBook = filePathArray(i, 1)    'get first workbook filepath and store in tempBook 
    tempBook.Sheets("Sheet1").Range("a1:a4").Copy 'Copy cells a1:a4 from workbook 

    actBook.Sheets("Sheet1").Activate    'Activate current book, this ensures it is always active in each run of the loop 
    ActiveSheet.Cell(a, pasteCounter).Select  'Select proper cell to paste values down from 

    Selection.PasteSpecial Paste:=xlPasteValues  'Paste Values 

    pasteCounter = pasteCounter + 4  'increment paste counter to select cells below pasted cells each iteration 

    'save and close tempBook 
    tempBook.Save 
    tempBook.Close 
Next i 

'Turn screen updating back on 
Application.ScreenUpdating = True 

End Sub 

ответ

1
Set tempBook = filePathArray(i, 1) 

здесь вы пытаетесь присвоить Variant/String для объекта Workbook

Set tempBook = Workbooks.Open(filePathArray(i, 1)) 

, вероятно, что вам нужно

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