簡體   English   中英

Excel VBA-創建用於打開文件的循環

[英]Excel VBA - Create loop for opening files

我有下面的代碼用於打開文件。 具體來說,它提示打開對應於一年中每個月的12個不​​同文件。

雖然代碼按原樣工作,但似乎太長了,我認為可以通過循環來縮短它。 但是,我不確定該如何寫。

任何幫助表示贊賞。

'Intialize workbooks
    Dim myFile As String, monthSumJan As Workbook, monthSumFeb As Workbook, monthSumMar As Workbook, monthSumApr As Workbook, monthSumMay As Workbook, monthSumJun As Workbook, monthSumJul As Workbook, monthSumAug As Workbook, monthSumSep As Workbook, monthSumOct As Workbook, monthSumNov As Workbook, monthSumDec As Workbook
    Dim Jan As Worksheet, Feb As Worksheet, Mar As Worksheet, Apr As Worksheet, May As Worksheet, Jun As Worksheet, Jul As Worksheet, Aug As Worksheet, Sep As Worksheet, Oct As Worksheet, Nov As Worksheet, Dec As Worksheet
    ChDir "C:\Users\stefan.bagnato\Desktop\Monthly Performance Summary"
    'January
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumJan = ThisWorkbook
    ActiveSheet.name = "Jan"
    Call ECHIBasicMonthlySummary
    'February
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumFeb = ThisWorkbook
    ActiveSheet.name = "Feb"
    Call ECHIBasicMonthlySummary
    'March
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumMar = ThisWorkbook
    ActiveSheet.name = "Mar"
    Call ECHIBasicMonthlySummary
    'April
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumApr = ThisWorkbook
    ActiveSheet.name = "Apr"
    Call ECHIBasicMonthlySummary
    'May
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumMay = ThisWorkbook
    ActiveSheet.name = "May"
    Call ECHIBasicMonthlySummary
    'June
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumJun = ThisWorkbook
    ActiveSheet.name = "Jun"
    Call ECHIBasicMonthlySummary
    'July
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumJul = ThisWorkbook
    ActiveSheet.name = "Jul"
    Call ECHIBasicMonthlySummary
    'August
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumAug = ThisWorkbook
    ActiveSheet.name = "Aug"
    Call ECHIBasicMonthlySummary
    'September
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumSep = ThisWorkbook
    ActiveSheet.name = "Sep"
    Call ECHIBasicMonthlySummary
    'October
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumOct = ThisWorkbook
    ActiveSheet.name = "Oct"
    Call ECHIBasicMonthlySummary
    'November
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumNov = ThisWorkbook
    ActiveSheet.name = "Nov"
    Call ECHIBasicMonthlySummary
    'December
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumDec = ThisWorkbook
    ActiveSheet.name = "Dec"
    Call ECHIBasicMonthlySummary

快速射擊是

Dim i As Long
For i = 1 To 12
    myFile = Application.GetOpenFilename
    Workbooks.Open Filename:=myFile
    Set monthSumJan = ThisWorkbook
    Call ECHIBasicMonthlySummary
Next i

循環在這里說明

您知道您不檢查用戶是否在對話框GetOpenFilename中按“取消”,不是嗎?

更新:

由於尚不知道完整的相關代碼,因此

Dim actWkb As Workbook
Dim i As Long
For i = 1 To 12
    myFile = Application.GetOpenFilename
    Set actWkb =  Workbooks.Open(myFile)
    Call ECHIBasicMonthlySummary(actWkb)
Next i

並調整

Sub ECHIBasicMonthlySummary(ByVal monthSh As Workbook)

' adjust it your code here
' you need to use monthSh

End Sub

如果以后需要引用它們,則可以將工作簿存儲在數組中。

' Array of Monthly Summary Workbook objects
Dim MonthSum(1 To 12) As Workbook

'Application.GetOpenFileName can return a path as a String, 
' or `False` if the user hits Cancel, so the variable should be a Variant
Dim File As Variant

' Set Current Directory
ChDir "C:\Users\stefan.bagnato\Desktop\Monthly Performance Summary"

' Loop through each month
Dim Month As Integer
For Month = 1 To 12

    ' Show Open File Dialog
    File = Application.GetOpenFilename

    ' Stop the loop if user hits cancel
    If File = False Then
        Exit For
    End If

    ' Open selected file, store Workbook object in the MonthSum array
    ' Workbooks.Open() returns the Worbook object of the opened file. 
    Set MonthSum(Month) = Workbooks.Open(File)

    ' Set Sheet Name, MonthName() returns the name of the month
    ' given its number. The true parameter indicates the name
    ' should be abbreviated to 3 letters
    ActiveSheet.Name = MonthName(Month,True)

    ' Call your custom macro
    Call ECHIBasicMonthlySummary

Next

' Do some other stuff

' Close the Workbooks
For Month = 1 To 12
    ' If User hit Cancel, MonthSum(Month) might not be a workbook object
    ' so check and make sure it's not Nothing before calling Close on it.
    If Not MonthSum(Month) Is Nothing Then 
        MonthSum(Month).Close SaveChanges:=True
    End If
Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM