VBA-Excel从数组结构获取文件路径

时间:2014-09-11 15:48:11

标签: arrays excel vba loops excel-vba

好的家伙很抱歉,如果代码标签不能正常工作,我有时候还没有使用Stack Overflow。无论如何,这是我遇到的问题,而且我很确定我知道发生了什么,但我可以使用一些帮助。下面的代码我基本上打开了一个excel工作簿,它将把文件路径存储到我的计算机上的不同工作簿上,我将它们放入一个数组中。数组正在通过调试消息框正确地存储数据,但是当它到达线路时,设置tempBook = filePathArray(i,1)"我得到了错误" 424 Object Required"。现在我知道一个事实,我在Set tempBook行中查看的数组中的项目正在查看文件路径。我的理论是存储在数组中的信息可能具有特殊的格式,这不允许Set tempBook将字符串识别为文件路径。很抱歉,如果这很简单,这是我第一次使用VBA和宏,我更喜欢Java和C#。无论如何,男人和女孩任何帮助都会受到极大的赞赏。另外,为了安全起见,我在发布之前更改了filePathBook的文件路径信息。

回顾一下:

我从桌面上的工作簿中检索文件路径信息并将其存储到数组中,该工作簿中的每个单元格都保存了一个完整的工作簿文件路径

然后我运行一个循环,它将遍历数组,循环期间一次一个项目,并尝试单独拉出每个文件路径,获取一些数据,然后再次使用下一个数组中的文件路径。

我得到的错误是当它试图从数组中拉出第一个文件路径并将其放入一个设置为工作簿的变量时我得到错误&# 34; 424对象必需"。

我有一个调试消息框,所以我知道正在查看的位置是否包含正确的文件路径信息,但我相信数组格式化可能会导致问题。

非常感谢任何帮助缓解此问题。

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 个答案:

答案 0 :(得分:1)

Set tempBook = filePathArray(i, 1)

在这里,您尝试将Variant / String分配给Workbook对象

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

很可能是你需要的