2016-06-21 50 views
1

下面的代碼通過打開的excel文件循環,如果文件名是命名約定接近的話,它將運行if語句中的代碼,以便文件可以稍後保存VBA Excel - .Window無法識別打開的Excel窗口

此代碼適用於Excel 2003,但不適用於Excel 2010,查看代碼的每個部分myWindow.Caption只顯示1個文件名,而不是5個文件名。我錯過了什麼來循環2010年的所有文件?

僅供參考 - 有For循環的多個實例,但因爲它都是相同的代碼,我沒有粘貼在這裏。讓我知道如果你想要它,但它是足夠接近相同

Sub File_Saver() 
    Dim iFileCount As Integer 
    Dim myWindow As Window 
    Dim r As Integer 

    With Application 
     .DisplayAlerts = False 
     .ScreenUpdating = False 
    End With 

    For Each myWindow In Application.Windows 
     If LCase(myWindow.Caption) Like LCase("CHL?ISS*") Then 

      iFileCount = 1 
      r = 21 

      myWindow.Activate 
      'Set Column 
      c = B 

      GoTo Continue 
      Exit For 
     End If 
    Next myWindow 
+1

要正常工作,您需要運行應用程序的多個實例...只需打開所有文件,通常會將它合併到1個窗口(帶有實際活動工作簿的標題)...您應該爲每個項目運行然後在工作簿中(獲取所有打開的工作簿名稱) –

回答

3

對於多個Excel實例來看看這個答案: Can VBA Reach Across Instances of Excel?

這適用於Excel的一個實例:

Dim workBooks as Workbooks  
Dim book As Workbook 
Set workBooks = Application.Workbooks 
For Each book In workbooks 
    If LCase(book.Name) Like LCase("CHL?ISS*") Then 
     iFileCount = 1 
     r = 21 
     book.Activate 
     c = B 
     ' Not sure where the Continue: statement is 
     GoTo Continue 
Exit For 
    End If 
Next 
+0

打敗我!這是我會做的。 – BGeorge

+0

@ ghg565認爲你已經擁有了它,但它與之前一樣,它只獲得一個文件名並移到循環的下一個迭代中。 'For'循環dosnt even循環它只是跑過海峽 –

+0

它執行If語句內的代碼嗎? – ghg565