彰化一整天的論壇

 找回密碼
 立即註冊
查看: 82|回復: 12

【ExcelVBA觀念】什麼時候程式碼要放在模組中

[複製鏈接]
發表於 2018-3-26 19:04:47 | 顯示全部樓層 |閱讀模式
這是網友在論壇問的,他要開啟excel檔案後,每1分鐘自動存檔,他程式碼是放在ThisWorkBook,因為他用到Application.OnTime這個多久時間就自動執行某個副程式,所以每次一執行時,就會出現
【無法執行巨集xxx。該巨集可能無法在此活頁簿中使用,或者已停用所有巨集。】,這時候只要新增一個模組,再把程式碼從ThisWorkBook移到模組,程式就可以正常執行。
網友問題連結:http://discuz.bestdaylong.com/thread-38138-1-1.html
範例檔案下載: http://download.bestdaylong.com/f556.htm
excel_onTime_01.jpg
1.原本程式放在ThisWorkBook底下
excel_onTime_02.jpg
2.執行會出現錯誤
excel_onTime_03.jpg
3.將部分程式移到Module1下
excel_onTime_04.jpg
4.workbook_open還是放在ThisWorkbook下,這樣執行就不會出錯。

回復

使用道具 舉報

發表於 2018-3-27 09:11:53 | 顯示全部樓層
老師,那我不要每1分鐘自動存檔,我希望可以每一天的下午3點跳出提示"是否要另存新檔",再由自己來選擇是OR否要另存檔案,這樣的VBA可以由上方每一分鐘自動存檔如何來修改Excel活頁簿的VBA程式?
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2018-3-27 16:47:19 | 顯示全部樓層
luckysan 發表於 2018-3-27 09:11
老師,那我不要每1分鐘自動存檔,我希望可以每一天的下午3點跳出提示"是否要另存新檔",再由自己來選擇是OR否 ...

修改如下.
  1. Sub Time1()

  2.     Application.OnTime Now + TimeValue("00:01:00"), "alert"

  3. End Sub

  4. Sub alert()
  5.     If Hour(Time()) = 15 And Minute(Time()) = 0 Then
  6.         MsgBox "提醒您要另存新檔案了"
  7.     End If
  8.     Debug.Print Time()
  9.     Call Time1
  10. End Sub
複製代碼

範例檔案下載: http://download.bestdaylong.com/f558.htm
回復 支持 反對

使用道具 舉報

發表於 2018-3-28 13:19:05 | 顯示全部樓層
老師,已測試但是沒有任何跳出的視窗動靜,我excel版本為2007
我從巨集那邊按執行沒有動靜
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2018-3-28 14:12:13 | 顯示全部樓層
luckysan 發表於 2018-3-28 13:19
老師,已測試但是沒有任何跳出的視窗動靜,我excel版本為2007
我從巨集那邊按執行沒有動靜 ...

您好,
      我在excel2007執行是沒有問題的.請看底下動畫.
excel_timer.gif

1.執行結果

回復 支持 反對

使用道具 舉報

發表於 2018-3-28 15:12:41 | 顯示全部樓層
本帖最後由 luckysan 於 2018-3-28 15:21 編輯
imingho 發表於 2018-3-28 14:12
您好,
      我在excel2007執行是沒有問題的.請看底下動畫.
1.執行結果

老師,我測試可以用,但是當時間一到,還是不會自動跳出視窗,要特地去執行巨集才會跳出視窗,請問這是甚麼原因導致,時間到卻無法自動彈出視窗呢?還是時間上是要等過了15:00,要到15:01才會在此時彈出視窗?好像有稍微lag幾秒的時間,但不曉得為甚麼會這樣(測試大約慢30秒左右)

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2018-3-29 08:56:50 | 顯示全部樓層
luckysan 發表於 2018-3-28 15:12
老師,我測試可以用,但是當時間一到,還是不會自動跳出視窗,要特地去執行巨集才會跳出視窗,請問這是甚麼原因 ...

因為是設定1分鐘才執行一次,是程式執完後等一分鐘再執行,所以會有時間上差異,若您上次執行的時間是14:59:59秒,下次執行的時間就會變成15:00:59秒,就會感覺時間有差,所以您可以將
  1. Application.OnTime Now + TimeValue("00:01:00"), "alert"
複製代碼
每分鐘檢查
改成
  1. Application.OnTime Now + TimeValue("00:00:30"), "alert"
複製代碼
每30秒檢查
回復 支持 反對

使用道具 舉報

發表於 2018-3-29 13:12:15 | 顯示全部樓層
imingho 發表於 2018-3-29 08:56
因為是設定1分鐘才執行一次,是程式執完後等一分鐘再執行,所以會有時間上差異,若您上次執行的時間是14:5 ...

謝謝老師,已ok,老師像這種方式,可以設定一打開excel活頁簿後過30秒就提醒存檔嗎, 因為我發現關掉活頁簿後,過了所設定的時間,就不會再跳出該提示視窗;這種時間設定上的提示要在活頁簿打開的狀態又剛好接近所設定跳出視窗的時間點時才適用
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2018-3-30 10:02:55 | 顯示全部樓層
本帖最後由 imingho 於 2018-3-30 11:46 編輯
luckysan 發表於 2018-3-29 13:12
謝謝老師,已ok,老師像這種方式,可以設定一打開excel活頁簿後過30秒就提醒存檔嗎, 因為我發現關掉活頁簿後 ...

修改如下就可以.
  1. Sub Time1()

  2.     Application.OnTime Now + TimeValue("00:00:30"), "alert"

  3. End Sub

  4. Sub alert()
  5.     MsgBox "提醒您要另存新檔案了"
  6. End Sub

複製代碼

開啟檔案30秒提醒.xlsm

15.1 KB, 下載次數: 1

售價: 1 金錢  [記錄]

回復 支持 反對

使用道具 舉報

發表於 2018-3-30 11:06:03 | 顯示全部樓層
imingho 發表於 2018-3-30 10:02
修改如下就可以.

謝謝老師這個提醒用的剛剛好
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  |网站地图

GMT+8, 2018-4-25 01:55 , Processed in 0.123534 second(s), 15 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表