標題:
[發問]
存檔時,自動加入存檔時的日期
[打印本頁]
作者:
downling
時間:
2011-11-3 14:17
標題:
存檔時,自動加入存檔時的日期
請教各位高手
之前小弟在舊論壇找到一篇資料
http://gb.twbts.com/index.php?topic=660.msg2935#msg2935
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
Me.Save
Me.SaveCopyAs Me.Path & "\" Replace(Me.Name,".xls",Format(Date,"emmdd") & ".xls")
End Sub
複製代碼
但是現在不能用了
出現必須是陳述結尾的錯誤
請問是replace的用法有改嗎?
小弟是用2007版
作者:
Hsieh
時間:
2011-11-3 14:56
本帖最後由 Hsieh 於 2011-11-3 14:59 編輯
回復
1#
downling
少了一個&
Me.SaveCopyAs Me.Path & "\" & Replace(Me.Name, ".xls", Format(Date, "emmdd") & ".xls")
用FULLNAME會清楚點
Me.SaveCopyAs Replace(Me.FullName, ".xls", Format(Date, "emmdd") & ".xls")
作者:
downling
時間:
2011-11-4 11:06
感謝Hsieh版大
可以用了
作者:
downling
時間:
2011-11-9 17:49
回復
2#
Hsieh
我想再問一下
之前的vba必需為一帶巨集的xlsm檔才能使用
若是用一般的xls檔的vba要如何寫呢?
作者:
Hsieh
時間:
2011-11-9 18:01
回復
4#
downling
那只是版本問題
這語法2003版適用
作者:
downling
時間:
2011-11-10 08:51
回復
5#
Hsieh
Hsieh 版大您誤會了
上面的程式2007是可以使用的
但是檔案必需為一個帶巨集的檔案也就是副檔名為xlsm
現在小弟因工作的需要,必需常常更新不同的檔案,由於是不同人所給的,
所以想要做成一通用的巨集或VBA
讓無巨集的檔案(也就是一般的XLS檔)也能方便的加上日期
小弟有在網路上找到類似的
但是路徑是設好的
想說要怎麼修改成原來的檔案所在的資料夾
Sub TD()
mypath = "C:\Documents and Settings\Administrator\桌面\"
myfile = "NN" & Format(Date, "emmdd") & ".xls"
Sheets(Array("Sheet2", "Sheet3")).Copy
ActiveWorkbook.SaveAs mypath & myfile
Workbooks(myfile).Close
End Sub
複製代碼
作者:
Hsieh
時間:
2011-11-10 10:01
回復
6#
downling
mypath = ThisWorkbook.Path & "\"
作者:
downling
時間:
2011-11-10 11:19
剛又修改了一下
現在vba會把"你的檔名.xlsx"另存新檔為"你的檔名_yyyymmdd.xlsx"
請指教
Sub TD()
myname = Application.ActiveWorkbook.FullName
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs Replace(myname, ".xls", "_" & Format(Date, "yyyymmdd") & ".xls")
Application.DisplayAlerts = True
End Sub
複製代碼
作者:
Hsieh
時間:
2011-11-10 15:35
回復
8#
downling
那你要的需求必須說明清楚阿
這只不過是字串替換問題
你的最終檔名字串要得到怎樣呢?
作者:
downling
時間:
2011-11-10 16:54
回復
9#
Hsieh
不好意思
讓您誤會了
小弟需要的是拿到檔案後
使用vba去修改檔名(加上或修改成今天日期)後另存新檔
ex:aaa.xlsx ---> aaa_20111110.xlsx or bbb_20111005.xlsx ---> bbb_20111110.xlsx
上面的程式應該只適用於沒有日期的檔名.....
至於上上面那個程式則是拿來參用一下他的思法而已囧
作者:
oobird
時間:
2011-11-10 17:18
Sub 改名()
Name "c:\aaa.xlsx" As "c:\aaa" & "_" & Format(Date, "yyyymmdd") & ".xlsx"
End Sub
作者:
downling
時間:
2011-11-11 08:34
本帖最後由 downling 於 2011-11-11 08:39 編輯
回復
11#
oobird
謝謝您的回復
不過oobird 版大您這程式是只有把日期加上去而已喔
小弟拿到的檔名並沒有固定,所以還有檔案名稱跟路徑的要擷取,這部份上面小弟已經有寫出來了
加上小弟有時拿到的並非原始檔而是修改過已經加上日期的檔案
所以想問一下是不是有判斷副檔名前有沒有日期的寫法
如果沒有就加上今天日期
若有則修改成今天日期
作者:
luhpro
時間:
2011-11-12 09:10
本帖最後由 luhpro 於 2011-11-12 09:12 編輯
回復
12#
downling
這最好能有你實際產生出來的檔案名稱作基準才好寫程式,
在此假設你的檔案名稱不管有沒有日期檔名中都不會出現 201 這個數字(9 年後請再自己改成 202),
那麼就可以用 201 作為判斷是否檔名已有日期的依據,
有 201 就用今天日期取代 2 開始的 8 個數字,
沒有就加上日期.
當然, 如果檔名中有可能出現 201 ,
那麼寫法又會有所不同了,
這就是需要有你實際產生出來的檔案名稱作基準的原因.
作者:
mike.lee
時間:
2011-11-12 22:25
回復
8#
downling
剛剛改了一下, 是這樣嗎?
Sub TD()
Myname = Application.ActiveWorkbook.FullName
Mypos = InStr(1, Myname, "_", 1)
Application.DisplayAlerts = False
If Mypos = 0 Then
ActiveWorkbook.SaveCopyAs Replace(Myname, ".xls", "_" & Format(Date, "yyyymmdd") & ".xls")
Else
Newname = Mid(Myname, 1, Mypos - 1)
ActiveWorkbook.SaveCopyAs Newname & "_" & Format(Date, "yyyymmdd") & ".xls"
End If
Application.DisplayAlerts = True
End Sub
複製代碼
作者:
downling
時間:
2011-11-14 09:26
回復
13#
luhpro
基本上檔名除了日期外是不會有其他的一連串數字
請問一下要用那種含數做201數字的判斷?
回復
14#
mike.lee
請問mike.lee
InStr能從後面往前找嗎?
因為有些人喜觀用"_"做為空格
作者:
GBKEE
時間:
2011-11-14 10:46
本帖最後由 GBKEE 於 2011-11-14 11:06 編輯
回復
15#
downling
Sub Ex() 'StrReverse函數 -> 傳回指定字串的字元順序是反向的。
Dim A, X
A = "A_120_78_9"
X = A Like "*120*" '找到傳回 True 反之傳回 False
MsgBox X
X = InStrRev(A, "_") '由左右向左搜尋的字串運算式
MsgBox X
A = StrReverse(A)
X = InStr( A, "_") '由左向右搜尋的字串運算式
MsgBox X
End Sub
複製代碼
Sub Ex() ''InStr , InStrRev 用法不同
Dim A, X, C
A = "A120_78_9"
'InStr([start, ]string1, string2[, compare])
' start= C string1= A 'string2="_"
C = 1 '設定從第幾個字母開始尋找
'X = InStr(A, "_") '沒指定C 預設為1
X = InStr(C, A, "_") '由左向右搜尋的字串運算式
MsgBox X
'InstrRev(stringcheck, stringmatch[, start[, compare]])
' stringcheck= A 'stringmatch="_" Start= C
C = Len(A) '設定從第幾個字母開始尋找
'X = InStrRev(A, "_") '沒指定C 預設為字串的長度 Len(A)
X = InStrRev(A, "_", C) '由右向左搜尋的字串運算式
MsgBox X
End Sub
複製代碼
作者:
luhpro
時間:
2011-11-14 19:40
回復 luhpro
基本上檔名除了日期外是不會有其他的一連串數字
請問一下要用那種含數做201數字的判斷?
...
downling 發表於 2011-11-14 09:26
把檔名放進字串變數裡,
然後參照上面的方式使用 Instr 找檔名(不含目錄)字串內有沒有 "201" 就可以了.
作者:
mike.lee
時間:
2011-11-14 20:01
回復
15#
downling
感謝GBKEE 大大詳細的說明,
如果"_"非檔名內唯一字元,上面程式就無法使用,就必須如luhpro 大大所說的,
利用"201"字串,判斷是否存在?再做檔名的取捨.
作者:
tsuneng
時間:
2012-8-9 11:39
謝謝各位大大的討論,是初學者的福音。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)