關閉廣告

請問VBA要如何讓程式自動另存新檔成其它格式?

原始檔是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裡有沒有方法可以直接判別檔案的副檔名?
 
以上再次感謝再感謝
文章關鍵字
問題出自 ActiveWorkbook.Name

這個語法會取得檔案連檔案格式,然後後面的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:
問題出自 ActiveWorkbook...(恕刪)

謝謝您的回答,我研究一下再來請教...搞好久= ="頭昏腦花中..
本來想說這個問題很簡單,結果卻找不著答案..
剛剛有找到一個方法是利用excel內的函數.然後利用search或切割....(然後再配合你講的Left或Right)
只是這裡又卡關了..因為對這些函數不太熟...所以尚在研究.
不論如何,都先來感謝您幫忙..若成功或不成功再來請教..
謝謝^^
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:
另存新檔指定路徑的時(恕刪)
 
哇。你這個好簡短,我搞了一個下午,昨、前天不算,結果剛弄完,但只能自動返回上一層做另存新檔。
不過感覺還是不完美
另發現因為有些檔案,我可能會放在兩個子資料夾下,若要另存可能要返回上兩層,..
而下午搞出來的程序卻只能返回一層...
 
加上又遇到檔案格式的.csv要轉存.xlsx的問題...搞的有夠累的.
弄了一個下午,眼睛太花,晚些時我再來研究你放的..
先說聲感謝囉.^^.
MaverickRay wrote:
 哇。你這個好簡短,(恕刪)

因不確定你資料處理的過程是如何,但只是要做大量資料單純副檔名修改應該有更好的做法。
小小尉 wrote:
因不確定你資料處理的(恕刪)
個人 對於 OFFICE 操作
目前都使用 .Net C#
使用 OpenXml 寫程式直接讀取Word. Excel 內容, 來辨識字串, 轉檔, 操作欄位內容...

=================================
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
=================================
小笨賢 wrote:
個人 對於 OFFICE...(恕刪)

哈,您講的那個東東太深奧了...我搞一個VBA搞了好多年,一本書放了十年多前幾年才去翻它= =
現在研究這個就令我頭疼了..怪以前不用功..
結果不想碰最後還是得去碰...
-----------------------------
我昨晚一直在想一個問題,就是要如何處理不同工作表的資料..
其資料內容欄位都是差不多,唯數據不同,每隔一陣子就會有不同報表..
我在想要怎麼處理這些表,才會比較方便做數據比較,

例如有五個文件工作簿,內容都只有一個工作表,但我可能要比較其中的某欄位數據..
以前我的做法是一半用VBA,一半用excel的函數=>手動 vlookup 去抓..
但這樣的做法,最近覺得很擾人..因為可能情況如
工作簿名:01月、02月、03月、04月、、、、、

然後
01月的我放在D:\files\月產能\1月份
02月的放在 D:\files\月產能\2月份
、、、、
因為不知道要怎麼去用VBA來讓它自動或半手動來去抓上個月的工作表內之欄位.
所以我只好將兩個工作表都打開,然後利用試算表內的vlookup去抓上個月的某欄內之值
再放到這個月的某插入之欄位,接下來再做兩欄比較..

但這個樣久了實在太囉唆,且當資料月份越來多時容易不小心人工失誤抓到別的月份的工作表
還有這種做法也有一個大問題,就是被參照的工作表其路徑跟內容根本不能亂動,否則新月份的工作表內容就全亂了

所以我想了很久,要不然就乾脆把舊月份的工作表內的sheet複製到新月份來..
然後再去一一比..

想半天,也不知道還有沒有更好的解決之道,
若大大有另外見解或更省時省力之法,也請大方指教...在下感激不盡。^^
MaverickRay wrote:
哈,您講的那個東東太(恕刪)

如果D:\files\月產能\xx月 這個路徑是固定的,用迴圈抓每個月的檔案及欄位資料做比對就可以了,但有多少檔案和資料欄位,要怎麼比對跟顯示結果可能要說明一下比較有方向。
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!