- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2024-11-14
|
2#
發表於 2013-6-26 23:33
| 只看該作者
回復 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了)
即可.- Sub importtxt()
- Dim path, folder, fname
- Dim lRow As Long, lI As Long
-
- With Workbooks.Add '標題列
- .Sheets(1).Range("A1:H1") = Array("營業人統一編號", "負責人姓名", "營業人名稱", "營業(稅籍)登記地址", "資本額(元)", "組織種類", "設立日期", "登記營業項目")
- '新增暫存資料表
- With .Sheets.Add(after:=.Sheets(.Sheets.Count))
- '瀏覽選擇資料夾
- With Application.FileDialog(msoFileDialogFolderPicker)
- .AllowMultiSelect = False
- If .Show = -1 Then path = .SelectedItems(1) & "\"
- End With
- '對所有該資料夾下的txt處理
- folder = Dir(path & "*.txt")
- Do While folder <> ""
- .Cells.ClearContents
- .Columns(2).NumberFormat = "@"
-
- '匯入外部資料
- With .QueryTables.Add(Connection:="TEXT;" & path & folder, Destination:=.Range("A1"))
- .Name = "資料"
- .RefreshPeriod = 0
- .TextFileSpaceDelimiter = True '空白鍵為分割字元
- .Refresh BackgroundQuery:=False
- End With
- '刪除資料連線
- .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
- '新增資料到第一個工作表
- .Parent.Sheets(1).Cells(.Rows.Count, "A").End(xlUp).Offset(1).Resize(, 8).Value = Application.Transpose(.Range("B1:B8").Value)
- folder = Dir
- Loop
- '刪除暫存資料表,不顯示警告視窗
- Application.DisplayAlerts = False
- .Delete
- Application.DisplayAlerts = True
- End With
- .Sheets(1).Activate '使開啟該檔時直接到第一個工作表
- '存檔
- fname = Application.GetSaveAsFilename(InitialFileName:=path & "final.xls", FileFilter:="Excel Files (*.xls),*.xls", Title:="儲存檔案")
- '除非按取消, 否則存檔
- If TypeName(fname) = "String" Then .SaveAs Filename:=fname, FileFormat:=xlExcel8
- End With
- End Sub
複製代碼 |
|