原始檔是csv
我的office是2019
弄好久,也用錄製巨集試過,程序碼大致如下:
ActiveWorkbook.SaveAs MySaveFilePath & ActiveWorkbook.Name, FileFormat:=xlOpenXMLWorkbook
上頭引數的fileformat是採錄製時將原始檔 .csv 另存成 .xlsx 出來後給予的
可是當我下回點開其它.csv檔後,執行該程序,結果還是會給我存成.csv
於是上網查老久,也到官網看引數的使用看老久..
結果還是搞不懂...只好來求救了...望達人指點一二..感恩不盡
另我想多請教3個是..
其一:
假設我的存檔路徑是D:\file\aa\bb\cc\dd
但我想利用程式來自動回到上兩層=>讓新的.xlsx的檔能夠自動存到 D:\file\aa\bb\ 下
有沒有什麼方法可以讓路徑自動往上兩層呢?
其二:
若利用Activeworkbook.name的方式時,會取得檔名加副檔名,我有沒有別的函數或其它方法,只要取取得主檔名就好?
其三:
VBA裡有沒有方法可以直接判別檔案的副檔名?
以上再次感謝再感謝
關閉廣告
這個語法會取得檔案連檔案格式,然後後面的xlFileFormat就無效了
1. "../" 是回上一資料夾的語法,和上古DOS/CLI的語法是一樣的
2. VBscript的File System Object物件的GetBaseName函式,不過VBA最簡單的做法是用left()和instr()函式寫…
3.WorkBooks.FileFormat會回傳副檔名
語法可改成
Dim Filename As String
Filename = ActiveWorkbook.Name
If InStr(Filename, ".") > 0 Then
Filename = Left(Filename, InStr(Filename, ".") - 1)
End If
ChDir ActiveWorkbook.Path
ActiveWorkbook.SaveAs "../../" & Filename, FileFormat:=xlOpenXMLWorkbook
srwe wrote:
Dim Filename As String
Filename = ActiveWorkbook.Name
If InStr(Filename, ".") > 0 Then
Filename = Left(Filename, InStr(Filename, ".") - 1)
End If
ChDir ActiveWorkbook.Path
ActiveWorkbook.SaveAs "../../" & Filename, FileFormat:=xlOpenXMLWorkbook
==========
我試了你這段巨集,但跑到最後會出現如圖的視窗
因太晚了,我沒再細查原因
另再測此碼前,我自己用instrrev加mid來跳回上一層,是可行
但有個大問題,若我一再重按執行,它會一直往上一層存,直到存到C:下時他會出現程式有錯..
恩...這程式真是很難溝通耶..
我只想他固定到某一層就好,它就每層都給我上去...= =
MaverickRay wrote:
(恕刪)
另存新檔指定路徑的時候貌似不能使用FileFormat功能,因為已經指定路徑,必須給完整檔名(包含附檔名),試著修改成這樣:
Dim Filename As String
Filename = ActiveWorkbook.Name
If InStr(Filename, ".") > 0 Then
Filename = Left(Filename, InStr(Filename, ".") - 1)
End If
ChDir ActiveWorkbook.Path
ActiveWorkbook.SaveAs "../../" & Filename & ".xlsx"
小笨賢 wrote:
個人 對於 OFFICE...(恕刪)
哈,您講的那個東東太深奧了...我搞一個VBA搞了好多年,一本書放了十年多前幾年才去翻它= =
現在研究這個就令我頭疼了..怪以前不用功..
結果不想碰最後還是得去碰...
-----------------------------
我昨晚一直在想一個問題,就是要如何處理不同工作表的資料..
其資料內容欄位都是差不多,唯數據不同,每隔一陣子就會有不同報表..
我在想要怎麼處理這些表,才會比較方便做數據比較,
例如有五個文件工作簿,內容都只有一個工作表,但我可能要比較其中的某欄位數據..
以前我的做法是一半用VBA,一半用excel的函數=>手動 vlookup 去抓..
但這樣的做法,最近覺得很擾人..因為可能情況如
工作簿名:01月、02月、03月、04月、、、、、
然後
01月的我放在D:\files\月產能\1月份
02月的放在 D:\files\月產能\2月份
、、、、
因為不知道要怎麼去用VBA來讓它自動或半手動來去抓上個月的工作表內之欄位.
所以我只好將兩個工作表都打開,然後利用試算表內的vlookup去抓上個月的某欄內之值
再放到這個月的某插入之欄位,接下來再做兩欄比較..
但這個樣久了實在太囉唆,且當資料月份越來多時容易不小心人工失誤抓到別的月份的工作表
還有這種做法也有一個大問題,就是被參照的工作表其路徑跟內容根本不能亂動,否則新月份的工作表內容就全亂了
所以我想了很久,要不然就乾脆把舊月份的工作表內的sheet複製到新月份來..
然後再去一一比..
想半天,也不知道還有沒有更好的解決之道,
若大大有另外見解或更省時省力之法,也請大方指教...在下感激不盡。^^
關閉廣告