返回列表 上一主題 發帖

[發問] EXCEL VBA XLSX TO TXT 空白行

回復 10# dou10801

感謝 n7822123 提供另一種思路,重複存檔時,系統會詢問,[是否要取代],如按[否]會中斷,如何解決,感恩.

那就強制覆蓋,不詢問就好了,添加一行程式即可

Sub Test1130()
Dim Arr, R&, C&
Application.DisplayAlerts = False   '若已有檔案、直接覆蓋不詢問
myPath$ = ThisWorkbook.Path & "\"
xlsPath$ = myPath & "A001.xlsx"   'xls檔案來源路徑,請自行設定(預設本程式檔案路徑下)
txtPath$ = myPath & "A001.txt"     '輸出txt的路徑&檔名,請自行設定(預設本程式檔案路徑下)
With Workbooks.Open(xlsPath, , True).Sheets(1)
  Arr = .[A1].CurrentRegion
  For R = 1 To UBound(Arr)
    For C = 2 To UBound(Arr, 2)
      Arr(R, 1) = Arr(R, 1) & Arr(R, C)
    Next C
    Arr(R, 1) = Arr(R, 1) & String(21, " ")
  Next R
  .[A1].Resize(UBound(Arr), UBound(Arr, 2)) = Arr
  .Columns("B").Resize(, UBound(Arr, 2)).Delete
  .SaveAs txtPath, 42
  .Parent.Close True
End With
End Sub
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

再次請教前輩,附件中選a0063.xlsx,轉成.txt時,為何會多第一行[編號],謝謝.

選檔轉文字檔.rar (30.78 KB)

杜小平

TOP

本帖最後由 n7822123 於 2020-12-5 03:00 編輯

回復 12# dou10801


因為你的xlsx檔,本身就有標題列阿=.=

Arr 陣列一開始就會取到標題列,所以你的For迴圈,R改成從2開始也沒有用

最後把陣列的值貼回去儲存格還是有標題列~~

只要加1行程式刪掉第一列就好了



      MES = UBound(Arr) - 1
      .[A1].Resize(UBound(Arr), UBound(Arr, 2)) = Arr
      .Columns("B").Resize(, UBound(Arr, 2)).Delete
      .Rows(1).Delete
      .SaveAs txtPath, 42
      .Parent.Close True
    End With
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 13# n7822123

後來給的檔案和一開始的範本,根本不一樣:@
多了標題列,金額那欄字數不固定,那個要加21個空白的條件,是錯的吧?
空白字數是其實變動的才對?還是金額那欄要補字數?

TOP

本帖最後由 n7822123 於 2020-12-5 14:15 編輯

回復 14# quickfixer


後來給的檔案和一開始的範本,根本不一樣

沒錯!!!

多了標題列,金額那欄字數不固定,那個要加21個空白的條件,是錯的吧?
空白字數是其實變動的才對?還是金額那欄要補字數?   

這個我沒仔細看他後面的範本和他補的程式,看他需要什麼再去確認就好

我們可以靜觀其變
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 13# n7822123 感謝n7822123前輩指點,加 .Rows(1).Delete,已可以運作.感恩.
杜小平

TOP

回復 14# quickfixer quickfixer前輩,抱歉第二個範本是第一個範本的延伸功能,第二個範本是將最後不足空間補到81行.Arr = .[A1].CurrentRegion
      For R = 1 To UBound(Arr)
          p1 = Len(Cells(R, MDS4))  '備註欄長度.
          p2 = 29 - p1              '補空白長度
          mcs = mcs1 & Cells(R, MDS2) & Format(Cells(R, MDS3), "00000000000") & "00" & mcs2 & Cells(R, MDS4) & String(p2, " ")
          Arr(R, 1) = mcs
      Next R              金額是MSD3補0到11位,我沒說明清楚.
杜小平

TOP

        靜思自在 : 欣賞別人就是莊嚴自己。
返回列表 上一主題