Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环以打开列中的所有excel文件路径_Excel_Vba - Fatal编程技术网

循环以打开列中的所有excel文件路径

循环以打开列中的所有excel文件路径,excel,vba,Excel,Vba,我已将A列中的目录和B列中的文件名拆分。正在尝试循环宏以打开列中的所有文件 使用下面的代码,它只打开第一个文件。我不知道哪里出了错。代码如下: Sub openfiles() Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer Dim wb As Workbook Dim path As Worksheet Dim row As String Set wb =

我已将A列中的目录和B列中的文件名拆分。正在尝试循环宏以打开列中的所有文件

使用下面的代码,它只打开第一个文件。我不知道哪里出了错。代码如下:

Sub openfiles()
Dim directory As String, fileName As String, sheet As Worksheet, i As    Integer, j As Integer
Dim wb As Workbook
Dim path As Worksheet
Dim row As String
Set wb = ThisWorkbook
Set path = wb.Sheets("sheet1")
row = 2

Application.ScreenUpdating = False
Application.DisplayAlerts = False

directory = path.Range("A" & CStr(row))
fileName = Dir(directory & path.Range("B" & CStr(row)))
Do While fileName <> ""
Workbooks.Open (directory & Dir(directory & path.Range("B" & CStr(row))))
row = row + 1
fileName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
子openfiles()
Dim目录为字符串,文件名为字符串,工作表为工作表,i为整数,j为整数
将wb设置为工作簿
将路径设置为工作表
将行变暗为字符串
设置wb=ThisWorkbook
设置路径=工作表(“工作表1”)
行=2
Application.ScreenUpdating=False
Application.DisplayAlerts=False
directory=path.Range(“A”和CStr(行))
fileName=Dir(目录和路径.Range(“B”和CStr(行)))
文件名“”时执行此操作
Workbooks.Open(directory&Dir(directory&path.Range(“B”)和CStr(row)))
行=行+1
fileName=Dir()
环
Application.ScreenUpdating=True
Application.DisplayAlerts=True
端接头
运行后,我会删除所有要打开的文件,以便继续执行其他宏

更新:

这是要求的屏幕截图,我可以在一列中处理目录和文件名。

试试这个:

我更喜欢使用这种简单的方法,以防我已经拥有Excel中的所有文件列表

Option Explicit
Sub openfiles()

    Dim i As Long
    Dim wb As Workbook
    Dim path As Worksheet
    Set wb = ThisWorkbook
    Set path = wb.Sheets("sheet1")


    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For i = 2 To path.Range("A2").End(xlDown).row

        If Len(Dir(path.Range("A" & i) & path.Range("B" & i))) > 0 Then
              Workbooks.Open (path.Range("A" & i) & path.Range("B" & i))
        End If
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

继续您的代码:

当我必须打开特定文件夹中的所有文件或我没有文件名时,我通常采用这种方法。因为这样你可以传递一个通配符。因此,如果要打开文件夹
O:\Common\
的所有工作簿,请使用以下命令:

Sub openfiles()
Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer
Dim wb As Workbook
Dim path As Worksheet
Dim row As String
Set wb = ThisWorkbook
Set path = wb.Sheets("sheet1")
row = 2

Application.ScreenUpdating = False
Application.DisplayAlerts = False

directory = path.Range("A" & CStr(row))
fileName = Dir(directory & "*.*")
Do While fileName <> ""
Workbooks.Open (directory & fileName)
row = row + 1
fileName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

如果您的Excel工作表中有文件名,为什么要使用
Dir
?此外,您是否可以将Excel工作表的屏幕截图与数据一起粘贴?目录的末尾是否有``因为您没有使用它来创建文件名我已经在线程中添加了屏幕截图
Sub openfiles()

Dim directory As String
Dim fileName As String
Dim row As String

Set path = ThisWorkbook.Sheets("sheet1")
row = 2

Application.ScreenUpdating = False
Application.DisplayAlerts = False

directory = path.Range("A" & CStr(row))
fileName = path.Range("B" & CStr(row))

    Do While fileName <> vbNullString

        Workbooks.Open (directory & "\" & fileName)

        row = row + 1
        directory = path.Range("A" & CStr(row))
        fileName = path.Range("B" & CStr(row))

    Loop

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub