iT邦幫忙

0

Excel VBA Application.GetOpenFilename如何放入Sub

  • 分享至 

  • xImage

小弟想將NFrom 放入CheckWIS 的子程序檢查
請問需要使用那一個datatype會比較好

NFrom是負責開檔案的

'This function should open the data files and save the data
'in the worksheet SourceData and the variable SourceData
Sub OpenDataFiles()
    ThisWorkbook.Worksheets("SourceData").Cells.Clear
    Call SetWorksheetsWithFormat("SourceData")

    'get filename from user
    NForm = Application _
        .GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Select File To Be Opened(Data File)", MultiSelect:=True)
    
    'Call function to check
    Call CheckWIS <-- 如果將此句comment則能正常運行 
    ...
    ...
Sub CheckWIS(NForm As ? ) <--這裡不知道用什麼較好,有嘗試使用String或留空就會被程式罵ByRef引數不符。

Debug.Print ("ComeIn CheckWIS")
If (NForm.Worksheets("Sheet1").Range("C4").Value <> "WIS FORMAT" Or "WIS Format") Then
...
...

還有是昨天謝謝海綿寶寶和froce的回應,因新手不能留言所以沒有回答,謝謝解答

froce iT邦大師 1 級 ‧ 2022-07-19 15:08:09 檢舉
應該是 Variant

https://docs.microsoft.com/zh-tw/office/vba/api/excel.application.getopenfilename

看傳回值的部分
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-07-19 14:38:12
最佳解答

根據這篇來看
可以用 Variant 試試看

但Variant不是不需要設定就已經擁有的嗎? (看影片說的)

froce iT邦大師 1 級 ‧ 2022-07-19 15:46:03 檢舉

但是VB是靜態語言,你輸入的參數一定要指定一個類型。
就算是 Variant 你還是要告訴函式你吃的參數類型是 Variant。

全部不寫可以(MacroA)
寫完整宣告也可以(MacroB)
就是不能寫一半(MacroC)
https://ithelp.ithome.com.tw/upload/images/20220719/20001787tQSwVQnLoo.png

Sub test()
    Call MacroA("Good Job.")
    Call MacroB(65535)
End Sub
Sub MacroA(ByVal uForm)
    Debug.Print uForm
End Sub
Sub MacroB(ByVal uForm As Variant)
    Debug.Print uForm
End Sub
Sub MacroC(ByVal uForm as)
    Debug.Print uForm
End Sub

我要發表回答

立即登入回答