2016-11-20 23 views
0

我想編寫一個代碼,可以根據條件打開多個.xlsx文件。我寫了這個:如何在VBA中使用IF打開文件

Sub Macro() 
    Dim ColumnNumb As Integer 
    Dim FileName(14 To 16) As String 
    Dim i As Integer 
    ColumnNumb = 2 

    For i = 14 To 16 
     FileName(i) = Cells(i, 1).Value 
     If Workbooks("Book1.xlsm").Worksheets("Input").Cells(14, ColumnNumb) = "Yes" Then 
      Workbooks.Open FileName:="C:\Excel\" & FileName(i), UpdateLinks:=3 
      'MsgBox FileName(i) 
     End If 
    Next i 
End Sub 

「Workbooks.Open ...」這一行不起作用。但是,我只使用下一行(MsgBox)而不是「Workbooks.Open ...」,然後它完美地工作。

在此先感謝

+1

什麼不起作用?你有錯誤嗎? –

+0

它正在運行,但沒有結果(打開的文件或錯誤信息)。以前循環打開第一個文件,然後我得到一個錯誤消息:運行時錯誤:1004路徑&「無法找到」... –

+0

'單元格(i,1)'使用當前活動工作表,如果您沒有指定如if語句中的表格,所以這可能是問題之一。 – Slai

回答

0

請嘗試下面的代碼。

一旦你打開文件,你會失去你的ActiveSheet,所以行FileName(i) = Cells(i, 1).Value將不會在第二次工作。

Sub Macro() 

Dim ColumnNumb As Integer 
Dim FileName(14 To 16) As String 
Dim i As Integer 
Dim ThisWB As Workbook 
Dim Sht As Worksheet 

ColumnNumb = 2 

Set ThisWB = ThisWorkbook 
' I assume from your post your data is in "Input" sheet >> modify to your needs 
Set Sht = ThisWB.Sheets("Input") 

For i = 14 To 16 
    FileName(i) = Sht.Cells(i, 1).Value 

    If Sht.Cells(14, ColumnNumb) = "Yes" Then 
     Workbooks.Open FileName:="C:\Excel\" & FileName(i), UpdateLinks:=3 
     'MsgBox FileName(i) 
    End If 
Next i 

End Sub 
+0

非常感謝您的工作。我完全忘了更改活動工作表。再次感謝!喬鮑 –