Excel VBA和文件夾-1.7通過對話框靈活選定文件夾并打開對應(yīng)文件

前景提要

之前我們學(xué)習(xí)了如何通過VBA遍歷我們指定的文件夾,通過此方法,我們可以很方便將某個文件夾中相關(guān)格式的文件全部打開并操作,節(jié)省了不少的時間和效率,不過我們也說了,上面的方法只能打開我們指定的某個文件夾的方法,意思就是,我們寫好的VBA代碼,每次都只能打開指定的文件夾的文件,但是其他文件夾的就不定,如果不小心換了名字,或者命名的時候多了一個空格或者是標(biāo)點的話,程序就沒有辦法來執(zhí)行了,有沒有什么好的辦法,我們自己根據(jù)實際的需要來選擇我們想要的文件夾,然后系統(tǒng)自己執(zhí)行后面的打開合并的操作呢?

思路

自然是可以的,我們一定都非常熟悉window的對話框吧,在你通過excel打開新的文件的時候,都會彈出一個對話框,讓你選擇你想要打開的文件,這樣功能確實是非常不錯,


如果我們在寫腳本的時候,也利用這個功能,靈活的選擇自己需要的文件夾,不就可以實現(xiàn)這樣的效果了嗎?

那么VBA能否實現(xiàn)這樣的對話框功能呢?當(dāng)然是可以的,對話框其實我們已經(jīng)非常的熟悉了,今天帶著大家一起來使用下VBA中的對話框。

上代碼

這里我們不需要指定對應(yīng)的文件夾的位置了,通過對話框的窗口選擇我們想要打開的文件的位置,然后執(zhí)行后面的匯總操作,因為這次主要介紹的是對話框的操作,所以打開文件等操作我們這里就忽略了,保持代碼的簡短,方便大家閱讀,也利于大家獲得知識點。

Sub test()

With Application.FileDialog(msoFileDialogFilePicker)

    .AllowMultiSelect = True

    If .Show = -1 Then

        For x = 1 To .SelectedItems.Count

            Debug.Print .SelectedItems(x)

        Next x

        Else

            MsgBox "您未作出任何選擇,程序結(jié)束!"

            Exit Sub

    End If

End With

End Sub

代碼解析

With Application.FileDialog(msoFileDialogFilePicker)

********

End With

這一段代碼的作用就是打開我們前面所說的對話框,我們來進(jìn)行調(diào)試下,看看是不是這樣的效果。

2.jpg

這里我們可以看到我們已經(jīng)成功的打開了文件選擇的對話框,我們可以根據(jù)自己的文件所在位置,選擇自己想要的文件,并不需要制定對應(yīng)的文件所在的位置了,方便了很多。

If .Show = -1 Then

        *******

        Else

            MsgBox "您未作出任何選擇,程序結(jié)束!"

            Exit Sub

    End If

這一段判斷就是判斷我們是否作出了選擇,既然對話框中有一個打開和一個取消的按鈕,自然我們也需要做出對應(yīng)的判斷了,如果沒有做出選擇,我們還去執(zhí)行后面的操作的話,程序可能會報錯的,我們之前也說過了,這樣的體驗感非常的不好,如果你拿給其他的同事用的話,其他同事可能會質(zhì)疑你的能力和水平,這樣也會導(dǎo)致你的影響并不好,所以我們這里要做出一個判斷,判斷的方法很簡單,如果選擇了打開的話,.Show = -1就是成立的,如果沒有,那就是錯誤的,程序就是執(zhí)行彈窗提示,并直接強制結(jié)束程序,我們來試試。

3.jpg

當(dāng)我點擊取消之后,程序并未執(zhí)行后面的正常操作,而是執(zhí)行了彈窗提醒的操作,完美的達(dá)到了我們的目的。

然后我們再來說說如果選擇了打開的話,后面的代碼的意思。

For x = 1 To .SelectedItems.Count

            Debug.Print .SelectedItems(x)

        Next x

我們既然是要匯總好多個文件,那么我們選擇的時候,自然是需要選擇好多個文件了,這里的.SelectedItems.Count代表的就是我們已經(jīng)選擇的文件總數(shù),通過之前的學(xué)習(xí),我們知道,我們打開文件夾自然是需要完整的路徑了,那么這里完整的路徑要如何活動呢,也很簡單,.SelectedItems(x)就是每個文件的完整路徑,我們來一步步調(diào)試下,這樣更加清楚效果。

我們選擇了文件夾中的所有文件,也就是總數(shù)為3個,這里.SelectedItems.Count的結(jié)果就是3,后面我們講通過for循環(huán)遍歷3次。

4.jpg

我們在每次遍歷的時候,都將文件夾的完整路徑,也是就是.SelectedItems(x)完整的輸出,也就是這樣的效果

5.jpg

如果我們想要執(zhí)行打開的命名的話,就可以直接寫成

Workbooks.Open .SelectedItems(x)

完整代碼+注釋

Sub test()

With Application.FileDialog(msoFileDialogFilePicker) '打開對話框

    .AllowMultiSelect = True

    If .Show = -1 Then '判斷是否有選擇文件

        For x = 1 To .SelectedItems.Count '遍歷循環(huán)開始

            Debug.Print .SelectedItems(x) '輸出文件的完整路徑,實際操作中,可以轉(zhuǎn)換成為你想要的其他操作。

            'Workbooks.Open .SelectedItems(x)

        Next x

        Else

            MsgBox "您未作出任何選擇,程序結(jié)束!" '如果沒有做出選擇,彈窗提示,并且跳出程序。

            Exit Sub

    End If

End With

End Sub
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容