返回列表 上一主題 發帖

[發問] 問題二.從excel直接轉出到 C:\SP20101002.TXT 檔案中去?

舊檔案 SP20101002.TXT
1. 有了 3A        0012 3A訧埭 ,只考慮 3A 有了跳過往下一格
2. 有了 AM        5959 A&M華莉,只考慮 A&W 有了跳過往下一格
3. 只有 A50CHTK-C1        0703C1 A50笢弊價踢 沒有 A50CHT , 所以 SP20101002.TXT 要新這筆
metrostar 發表於 2010-10-6 17:06

你要的是 metrostar308.xls 要和 SP20101002.TXT 比對之後 有新的資料加到 SP20101002.TXT 對嗎?
這說明看不懂 不知要如何比對

TOP

回復 4# metrostar
只比對空格左前為基準, 和Sheet1的B欄比對嗎?
CreateTextFile 方法 建立一個指定的檔名並且傳回一個用於該檔案讀寫的 TextStream 物件。
OpenTextFile   方法 開啟一個指定的檔案並傳回一個 TextStream 物件,該物件可用於對檔案進行讀取或附加。
  1. Option Explicit
  2. Sub zhz3230()
  3.     Dim D As Object, Tx As Object, i%, TestFile$, MyChar$, ch$
  4.     TestFile = ThisWorkbook.Path & "\SP20101002.txt"   '請修改為正確檔案路徑
  5.     Set D = CreateObject("scripting.dictionary")
  6.     Open TestFile For Input As #1                      ' 開啟檔案。
  7.     Do While Not EOF(1)                                ' 執行迴圈直到檔尾為止。
  8.         Input #1, MyChar                               ' 將資料讀入變數中。
  9.         If InStr(MyChar, Chr(9)) Then ch = Chr(9) Else ch = Space(1)   '取得解析字元
  10.         D(Trim(Split(MyChar, ch)(0) & "")) = ""        '取的舊資料
  11.     Loop
  12.     Close #1                                           ' 關閉檔案。
  13.     Set Tx = CreateObject("scripting.FileSystemObject").OpenTextFile(TestFile, 8, -2)
  14.     With Sheets("Sheet1")
  15.      For i = 2 To .[a65536].End(3).Row
  16.       If D.exists(Trim(.Cells(i, 2))) = False Then      ' Sheet1的B欄 比對舊資料
  17.          Tx.WriteLine .Cells(i, 2) & " " & .Cells(i, 1) '寫入檔案
  18.       End If
  19.     Next
  20.     End With
  21.     Set Tx = Nothing
  22.     Set D = Nothing
  23. End Sub
複製代碼

TOP

回復 6# metrostar
   
  1. Sub zhz3230()
  2.     Dim D As Object, Tx As Object, i%, TestFile$, MyChar$, ch$
  3.     Dim Fs As Object, OldFile As String, SaveFile%
  4.     Set Fs = CreateObject("Scripting.FileSystemObject")
  5.     TestFile = ThisWorkbook.Path & "\SP20101002.txt"   '請修改為正確檔案路徑
  6.     OldFile = ThisWorkbook.Path & "\OldTxt.txt"
  7.     Fs.Copyfile TestFile, OldFile                      '複製來源檔暫存
  8.     Set D = CreateObject("scripting.dictionary")
  9.     Open TestFile For Input As #1                      ' 開啟檔案。
  10.     Do While Not EOF(1)                                ' 執行迴圈直到檔尾為止。
  11.         Input #1, MyChar                               ' 將資料讀入變數中。
  12.         If InStr(MyChar, Chr(9)) Then ch = Chr(9) Else ch = Space(1)   '取得解析字元
  13.         D(Trim(Split(MyChar, ch)(0) & "")) = ""        '取的舊資料
  14.     Loop
  15.     Close #1                                           ' 關閉檔案。
  16.     Set Tx = Fs.OpenTextFile(TestFile, 8, -2)
  17.     With Sheets("Sheet1")
  18.      For i = 2 To .[a65536].End(3).Row
  19.       If D.exists(Trim(.Cells(i, 2))) = False Then      ' Sheet1的B欄 比對舊資料
  20.          Tx.WriteLine .Cells(i, 2) & " " & .Cells(i, 1) '寫入檔案
  21.       End If
  22.     Next
  23.     End With
  24.     Tx.Close                                              ' 關閉檔案。
  25.     Set Tx = Nothing
  26.     Set D = Nothing
  27.     '覆蓋原舊檔名-> 原來檔案存檔  ->不動它
  28.     '建新檔名    -> 原來檔案不存檔
  29.     If MsgBox("確定 建新檔名??", vbQuestion + vbYesNo, "另存新檔") = vbYes Then
  30.             With Application.FileDialog(msoFileDialogOpen)
  31.                 .AllowMultiSelect = False
  32.                 .FilterIndex = 6
  33.                 If .Show = True Then
  34.                     Fs.Copyfile TestFile, .SelectedItems(1)                       '複製來源檔
  35.                     Fs.Copyfile OldFile, TestFile                                 '還原來源檔  -> 原來檔案不存檔
  36.                 End If
  37.             End With
  38.     End If
  39.     Kill OldFile                '清除來源暫存檔
  40. End Sub
複製代碼

TOP

        靜思自在 : 真正的愛心,是照顧好自己的這顆心。
返回列表 上一主題