返回列表 上一主題 發帖

[發問] EXCEL設定某日期到檔案無法開啟

謝謝樓上大大,可是我用了之後,開啟檔案出現:
我點 "是"跟"否"檔案可以關閉沒錯,但是我點"取消",就不會自動 ...
hueywen_jia 發表於 2015-4-9 20:46

底下這個方式即使檔案設成唯讀, 也照樣能關閉檔案:
  1. Private Sub Workbook_Open()
  2.     Dim MyDate As Date
  3.    
  4.     MyDate = #4/4/2015#
  5.     If Date >= MyDate Then
  6.       With Application
  7.         .DisplayAlerts = False
  8.         .Quit
  9.       End With
  10.     End If
  11. End Sub
複製代碼

TOP

本帖最後由 luhpro 於 2015-4-13 00:18 編輯
感謝luhpro,雖然你的設定是可成功,但是像我這麼小聰明的還是有法破解,我相信應該還是有人可以破解,只要把電 ...
hueywen_jia 發表於 2015-4-12 22:42

其實不論是怎樣的保護都有可能被破解.

最簡單的方法是取得檔案後,
先製作其備份,
接著就是矛與盾的問題囉.

我也曾想過日期到了時直接刪除自身檔案,
不過只要依上述先執行過,
遇到不能用時先改日期後再Copy回去照樣能繼續使用,
除非檔案內資料與目前日期有正相關,
日期不對結果就不具參考價值,
當然那又是另一種破解方式了.

或者寫參考值到登錄檔執行時立即作比對,
寫參考值到另一個加密檔案裡...等等,
當然...還是本篇開頭那句話...

後續再補充:
或者若確認電腦開啟檔案時一定會上網,
那麼日期直接跟國家時間與頻率標準實驗室抓,
這樣改電腦本身日期的破解方式就沒有用了.

TOP

那麼請問luhpro大大~~
您可會寫日期一到就直接刪除該檔呢? 這個不錯!! 因為不會有人想到,就算改回日期,檔案 ...
hueywen_jia 發表於 2015-4-15 23:42

網路上找到的:
刪除巨集所在的活頁簿

TOP

本帖最後由 luhpro 於 2015-4-29 21:52 編輯

回復 30# hueywen_jia
晤...這陣子比較忙...

以下程式碼放在 ThisWorkBook 內:
  1. Public Sub 刪除自己()
  2.     ThisWorkbook.Saved = True
  3.     ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
  4.     Kill ThisWorkbook.FullName
  5.     ThisWorkbook.Close SaveChanges:=False
  6. End Sub

  7. Private Sub Workbook_Open()
  8.   If Date > #5/28/2115# Then 刪除自己 ' 今天為此日期時, 刪除本檔案, 注意 : 檔案刪除後無法復原, 測試時請務必先備份本檔案.
  9. End Sub
複製代碼

TOP

本帖最後由 luhpro 於 2015-5-7 05:36 編輯
感謝luhpro大大,可是我照您給的1-10項的字串放進去不能用! 一樣是放ThisWorkBook裡的OPEN嗎?
hueywen_jia 發表於 2015-5-7 00:25



其實裡面有 刪除自己 跟 ThisWorkBook 的 Open(開啟程式時就會執行,而它在設定的時間到時會呼叫 刪除自己 這個程序) 兩個程序.
底下這一段就是 ThisWorkBook裡的OPEN 程序喔.
  1. Private Sub Workbook_Open()

  2.   If Date > #5/28/2115# Then 刪除自己 ' 今天為此日期時, 刪除本檔案, 注意 : 檔案刪除後無法復原, 測試時請務必先備份本檔案.

  3. End Sub
複製代碼

TOP

本帖最後由 luhpro 於 2015-5-11 23:38 編輯
回復  luhpro
我照您的方式,但卻出現此對話框
hueywen_jia 發表於 2015-5-10 20:59

你的 Then 後面沒指令.

If...Then... 指令的其中兩種語法:
1.
If  條件式 Then 要執行的指令

(此法為當條件成立時,
程式會執行 Then 後面的指令,
否則不執行該指令,
且不論結果如何執行完畢後會繼續執行下一行的指令,
意即 If 的判斷與執行是在該行跑完後就已經結束)

2.
If  條件式 Then
   要執行的指令
End If

(此法為當條件成立時,
程式會執行 Then 的下一行直到 End If 前的每一行指令,
意即 If 的判斷與執行是在該行開始起,
一直到 End If 指令才結束)

需留意兩種語法的差別,
Then 後面沒指令時就一定要有 End If
反之亦同.

是的,當你條件成立後只需要執行一行指令時,用第 1 種語法就可以了,
若為多行則應用第 2 種語法.

另外,你在套用的時候,
應該要先都全部 Copy 過去,
再依據你的需求做調整.

例如你本來就有 Private Sub Workbook_Open() 時,
Copy 過去會變成有兩個 Open 程序,
這時就要試著把它們整合在同一個 Open 程序內,
看是要前後放,
還是將其中一個程序插在另一個程序的內部.
再刪掉多的那兩行 Sub Workbook_Open 與 End Sub.

除非你確實已經了解了那些指令式在做甚麼,
不然不建議隨意刪減.

完整的該行是:
If Date > #5/28/2115# Then 刪除自己
刪除自己 在 ' 前不是在其後,
所以它是一個指令.
且你也要把 Sub 刪除自己 到 End Sub 部分 Copy 過去,
不然一樣會發生找不到 刪除自己 程序的錯誤.

TOP

回復  luhpro
我照那些字串COPY進去了,可是它還是出現"編譯錯誤:沒有定義這個Sub或Sunciton 然 ...
hueywen_jia 發表於 2015-5-12 21:13

是啊,
38# 最末尾有說了:
且你也要把 Sub 刪除自己 到 End Sub 部分 Copy 過去,
不然一樣會發生找不到 刪除自己 程序的錯誤.

TOP

本帖最後由 luhpro 於 2015-5-15 01:31 編輯
回復  luhpro
我把以下字串都放進去了,這樣不對嗎?請看我的圖片,都有進去呀~  
Private Sub Work ...
hueywen_jia 發表於 2015-5-14 21:07

底下桃紅色這一塊  (刪除自己)程序實體 也要放進去,
Workbook_Open 中 Then 後面的 刪除自己 指令才呼叫的到 該程序 喔:

Public Sub 刪除自己()

    ThisWorkbook.Saved = True

    ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly

    Kill ThisWorkbook.FullName

    ThisWorkbook.Close SaveChanges:=False

End Sub


Private Sub Workbook_Open()

  If Date > #5/28/2115# Then
刪除自己  ' 今天為此日期時, 刪除本檔案, 注意 : 檔案刪除後無法復原, 測試時請務必先備份本檔案.
End Sub

TOP

回復  hueywen_jia
    另外可否請有權限的大大幫我刪除我附件的壓縮檔呢(在第二頁下方WENWENWENWENW ...
hueywen_jia 發表於 2015-5-16 00:39


下次上傳的範例檔案,
可以酌情將討論串中用不到的部分工作表刪除,
討論會用到的資料可以酌情取用代表性的文字,
若是人名等可能觸犯到個資法的資料則酌予Mark(例如 : 王xx、李一一...等)或是用張三、李四、王美女等替代,
善用 編輯->取代 功能就可以很方便達成此目的,
不過要留意適當安排好先後順序,
例如若先用 5 取代 3,
之後就不適宜用 7 取代 5.(可能會破壞資料的唯一性)

總之要提供怎麼樣內容的範例檔案要看討論的目的與需求.

TOP

        靜思自在 : 【時間如鑽石】時間對一個有智慧的人而言,就如鑽石般珍貴;但對愚人來說,卻像是一把泥土,一點價值也沒有。
返回列表 上一主題