Board logo

標題: [發問] 請修正錯誤的程式碼 [打印本頁]

作者: ziv976688    時間: 2020-12-3 14:19     標題: 請修正錯誤的程式碼

本帖最後由 ziv976688 於 2020-12-3 14:34 編輯

測試檔 : [attach]32750[/attach]

'修改檔案類型---------------------------------   ‘列9
        oPath = ThisWorkbook.Path  '路徑
        A = Dir(oPath & "\*.CSV")
        Do While A <> ""
            Oldname = oPath & "\" & A
            A = Replace(A, "基準日:", "")
            A = "49_期距刪牌_" & A   '新增需求:再將檔案名稱前批改增加 "49_期距刪牌_"
            A = Replace(A, ".csv", ".xls")
            Newname = oPath & "\" & A
             With Workbooks.Open(Oldname)
                .Sheets(1).Name = Replace(A, ".xls", "")
                .SaveAs Filename:=Newname, FileFormat:=xlNormal   '改副檔案名  ‘列20

以上是我在論壇下載的將檔案名稱前批改增加 "49_期距刪牌_”,並更改副檔案名的程式碼;
可能是因為原下載測試的CSV檔案名稱格式與目前測試的CSV檔案名稱格式不盡相同,所以目前的VBA主檔無法順利執行^^"

需求︰
EX︰將附件中的6的CSV檔案,一次執即可將其更改為如(範例)的6個XLS檔案。

請問︰錯誤的程式碼要如何修正?
謝謝!
作者: luhpro    時間: 2020-12-3 21:37

測試檔 :

'修改檔案類型---------------------------------   ‘列9
        oPath = ThisWorkbook.Pa ...
ziv976688 發表於 2020-12-3 14:19

其實問題的癥結在於.csv檔案的格式與 .xls 檔案不符,
你只需要用 記事本 去開啟 .csv 檔案就會發現它其實是個(資料 與 , 及 換行字元 組合成的)文字檔而已, 表現形式像是 :

期距數,1,10,29,38,47,2,11,20,39,48,3,12,21

Excel 程式能夠正常開啟是因為他有針對 csv 檔案 做處理,
但你卻只是把副檔名改成.xls 它就沒辦法了.

想解決可以用Excel開啟 .csv 檔案再另存成 .xls 檔案即可.
  1.         oPath = ThisWorkbook.Path  '路徑
  2.         A = Dir(oPath & "\*.CSV")
  3.         Do While A <> ""
  4.             Oldname = oPath & "\" & A
  5.             A = Left(A, Len(A) - 4) ' 去掉 .csv
  6.             With Workbooks.Open(Oldname)
  7.               .Sheets(1).Name = "Data" ' 開啟 .csv 檔案時, Sheet Name預設是檔名, 會發生錯誤,開檔時會有訊息問是否要修正
  8.               A = Replace(A, "基準日:", "")
  9.               A = "49_期距刪牌_" & A '新增需求:再將檔案名稱前批改增加 "49_期距刪牌_"
  10.               .SaveAs Filename:=oPath & "\" & A, FileFormat:=xlWorkbookNormal
複製代碼
[attach]32752[/attach]
作者: ziv976688    時間: 2020-12-4 00:49

本帖最後由 ziv976688 於 2020-12-4 00:52 編輯

回復 2# luhpro
謝謝您的不吝賜正。
已經可以順利執行了~感恩::lol

不好意思,是否可以請您將工作表的名稱 "Data",改回如原範例的工作表名稱,
因為實際的檔案很多個,工作表名稱都是 "Data",有些不方便^^"
謝謝您!

還有列43~列56執行無效,請詳見49_期距刪牌_合數排序-空數總覽(0期)-(2020-11-27)(工作表名稱範例)&49_期距刪牌_合數排序-空數總覽(0期)-(2020-12-01)(工作表名稱範例)內之說明~
是否能勞駕您在幫忙看看。再次謝謝您 !

測試檔 :[attach]32756[/attach]

'-抓Data日期=檔案日期,將工作表的第1列號碼指定的字顏和底色------列42
    Set BK = ThisWorkbook
         Set xF = Nothing
    T = Format(Left(Right(A, 15), 10), "yyyy/m/d") & ChrW(160)    '搜尋檔案日期
    Set xF = BK.Sheets("DATA").Range("A:A").Find(T, Lookat:=xlPart)    '搜尋=A欄日期
    If Not xF Is Nothing Then
       For V = 4 To 10
        If xF(1, V) <> "" Then
           [B1:AX1].Find(xF(1, V), Lookat:=xlWhole).Font.ColorIndex = IIf(V = 10, 3, 7)         '將=A欄日期列的第1列的號碼標示字顏
        End If
        If xF(2, V) <> "" Then
           [B1:AX1].Find(xF(2, V), Lookat:=xlWhole).Interior.ColorIndex = IIf(V = 10, 8, 6)   '將=(A欄日期列+1列)的第1列的號碼標示底色
        End If
       Next V
    End If         '列56
作者: n7822123    時間: 2020-12-5 02:21

回復 1# ziv976688

其實你的原程式沒什麼太大問題

就是工作表名稱不能夠命名這麼長....

你把下面這行註解掉就可以跑了


A = "49_期距刪牌_" & A '新增需求:再將檔案名稱前批改增加 "49_期距刪牌_"


工作表名稱最多 "31" 個字元
作者: ziv976688    時間: 2020-12-5 02:54

回復 4# n7822123
原來問題是出在工作表名稱自原過多
將字元減至31個,就可以順利執行了
感謝您的賜正




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)