iT邦幫忙

0

VBA 轉 .exe

Zaku 2017-06-19 16:20:3116600 瀏覽
  • 分享至 

  • xImage

各位好想請問一下,VBA程式碼有辦法轉成執行檔或其他方式可以用cmd去運作的方式嗎?

小魚 iT邦大師 1 級 ‧ 2017-06-19 19:06:13 檢舉
VBA是指在Excel之類的運行的程式碼嗎?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
小魚
iT邦大師 1 級 ‧ 2017-06-19 19:07:41

VBA是指在Excel之類的運行的程式碼嗎?
你說cmd是什麼意思?是按個按鈕就會執行的嗎?
如果是這樣的話是可以的。

Zaku iT邦新手 3 級 ‧ 2017-06-21 09:16:14 檢舉

對!EXCEL內建的,他叫巨集,就是我可能可以透過cmd去執行,不限定執行方式,主要是要透過其他程式去串接他,因有些功能只有內建的VBA才能超做

Zaku iT邦新手 3 級 ‧ 2017-06-21 09:25:32 檢舉

補充一下cmd是命令提示字元,要能夠外部呼叫他

0
丹尼
iT邦研究生 4 級 ‧ 2017-06-21 14:13:10

visual studio 可以轉成exe檔案阿
但是vba excel 跟 visual studio 不一樣
每個介面開發工具 轉出來的檔案就是不一樣

0
Andy Chiu
iT邦研究生 2 級 ‧ 2017-06-22 06:02:58

請問您的需求是否為 定時/排程 執行?
如果是的話,有幾種方式:

  1. 用VBS去操作Excel VBA
  2. 用AutoHotKey模擬開啟Excel VBA後選擇執行VBA
  3. 關閉安全性

可以在Excel中的ThisWorkbook位置寫開啟後會檢查的項目,例如晚上定時執行時,檢查時間是否一致,一致就執行指定的作業,沒有一致就跳過自動執行

以上幾種方向給您參考,有問題再詢問

Zaku iT邦新手 3 級 ‧ 2017-06-22 09:13:30 檢舉

請問可以帶參數給VBA去執行嗎,只要可以呼叫都可以

Andy Chiu iT邦研究生 2 級 ‧ 2017-06-22 22:20:20 檢舉
  1. VBS本身就可以帶參數,然後再轉帶到VBA中執行,但VBS我就不是很熟了,您可以上網找些範例試試。

  2. 3透過命令列模式的方式開啟Excel,於Excel 2000可以透過程式取得參數,但2003與之後的版本,似乎就取消這個方法,只能從命令列字串看出是由命令列開啟Excel,或者GUI點開Excel,可以試著開新的Excel檔案,添加以下的程式到特定的位置:

ThisWorkbook:

Private Sub Workbook_Open()
    MsgBox CommandLine
        
End Sub

Function CommandLine() As String
    Dim length As Long, pstr As Long
    pstr = GetCommandLine()
    length = lstrlen(pstr)
    CommandLine = String(length + 1, 0)
    lstrcpy CommandLine, pstr
End Function

Module1:

Public Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long

然後試著開啟該Excel,由GUI點開,與由命令列方式開啟,查看MsgBox帶出的字串差異。

由於2003開始無法用此方式處理,所以會建議先把參數字串寫入到某個文字檔中,再由以上程式判斷是透過GUI開啟,還是命令列開啟,命令列開啟,則讀取該文字檔,並解析出參數使用,如果是GUI開啟,則跳過這作業,因為不是透過排程執行。

以上方向給您參考。

我要發表回答

立即登入回答