返回列表 上一主題 發帖

Excel 2007 VBA讀TXT檔並轉置 part 2

回復 1# alexsas38
只要在 .Cells.ClearContents 下方加上 :
.Columns(2).NumberFormat = "@" <- 解決 0 消失的問題(將儲存格格式設為 "文字")

然後在程式開頭加上 :
Dim lRow As Long, lI As Long

接著在 .Cells.QueryTable.Delete 下方加上 :
lRow = .Cells(Rows.Count, 1).End(xlUp).Row
For lI = 1 To lRow
If Right(.Cells(lI, 1), 1) = "(" Then .Cells(lI, 2) = .Cells(lI, 1) & " " & .Cells(lI, 2) & " " & .Cells(lI, 3): .Cells(lI, 1) = "": .Cells(lI, 3) = ""
If .Cells(lI, 3) <> "" Then .Cells(lI, 2) = .Cells(lI, 2) & " " & .Cells(lI, 3) & " " & .Cells(lI, 4): .Cells(lI, 3) = "": .Cells(lI, 4) = ""
Next lI <- 既然程式會拆開原先的文字 那麼再依照其規則把該合併的合併起來就OK了)
即可.
  1. Sub importtxt()
  2.     Dim path, folder, fname
  3.     Dim lRow As Long, lI As Long
  4.    
  5.     With Workbooks.Add '標題列

  6.         .Sheets(1).Range("A1:H1") = Array("營業人統一編號", "負責人姓名", "營業人名稱", "營業(稅籍)登記地址", "資本額(元)", "組織種類", "設立日期", "登記營業項目")

  7.         '新增暫存資料表

  8.         With .Sheets.Add(after:=.Sheets(.Sheets.Count))

  9.             '瀏覽選擇資料夾

  10.             With Application.FileDialog(msoFileDialogFolderPicker)

  11.                 .AllowMultiSelect = False

  12.                 If .Show = -1 Then path = .SelectedItems(1) & "\"

  13.             End With

  14.             '對所有該資料夾下的txt處理

  15.             folder = Dir(path & "*.txt")

  16.             Do While folder <> ""

  17.                 .Cells.ClearContents
  18.                 .Columns(2).NumberFormat = "@"
  19.                
  20.                 '匯入外部資料

  21.                 With .QueryTables.Add(Connection:="TEXT;" & path & folder, Destination:=.Range("A1"))

  22.                     .Name = "資料"
  23.                     .RefreshPeriod = 0

  24.                     .TextFileSpaceDelimiter = True  '空白鍵為分割字元

  25.                     .Refresh BackgroundQuery:=False

  26.                 End With

  27.                 '刪除資料連線

  28.                 .Cells.QueryTable.Delete
  29.                
  30.                 lRow = .Cells(Rows.Count, 1).End(xlUp).Row
  31.                 For lI = 1 To lRow
  32.                   If Right(.Cells(lI, 1), 1) = "(" Then .Cells(lI, 2) = .Cells(lI, 1) & " " & .Cells(lI, 2) & " " & .Cells(lI, 3): .Cells(lI, 1) = "": .Cells(lI, 3) = ""
  33.                   If .Cells(lI, 3) <> "" Then .Cells(lI, 2) = .Cells(lI, 2) & " " & .Cells(lI, 3) & " " & .Cells(lI, 4): .Cells(lI, 3) = "": .Cells(lI, 4) = ""
  34.                 Next lI

  35.                 '新增資料到第一個工作表

  36.                 .Parent.Sheets(1).Cells(.Rows.Count, "A").End(xlUp).Offset(1).Resize(, 8).Value = Application.Transpose(.Range("B1:B8").Value)

  37.                 folder = Dir

  38.             Loop

  39.             '刪除暫存資料表,不顯示警告視窗

  40.             Application.DisplayAlerts = False

  41.             .Delete

  42.             Application.DisplayAlerts = True

  43.         End With

  44.         .Sheets(1).Activate '使開啟該檔時直接到第一個工作表

  45.         '存檔

  46.         fname = Application.GetSaveAsFilename(InitialFileName:=path & "final.xls", FileFilter:="Excel Files (*.xls),*.xls", Title:="儲存檔案")

  47.         '除非按取消, 否則存檔

  48.         If TypeName(fname) = "String" Then .SaveAs Filename:=fname, FileFormat:=xlExcel8

  49.     End With

  50. End Sub
複製代碼

TOP

        靜思自在 : 【是否發揮了良能?】人間壽命因為短暫,才更顯得珍貴。難得來一趟人間,應問是否為人間發揮了自己的良能,而不要一味求長壽。
返回列表 上一主題