Macro xuất thành file .txt

  • Thread starter Thread starter winxp83
  • Ngày gửi Ngày gửi
Liên hệ QC

winxp83

Thành viên mới
Tham gia
11/3/08
Bài viết
17
Được thích
1
Hiện tại mình đã làm xong một bản tính tuy nhiên để xuất một vùng ô có số thành file text thì mình đành potay (nếu làm theo cách tạo file txt rùi cắt dán thì hơi......bình dân wá). Các cao thủ giúp mình với, mình muốn tạo macro giống như in một vùng trên bản tính thành file .txt
Rất mong nhận sự giúp đỡ của mọi người %#^#$
 
Upvote 0
1.Nếu dùng Code thì: Exporting And Import Text With Excel
PHP:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ExportToTextFile
' This exports a sheet or range to a text file, using a 
' user-defined separator character.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub ExportToTextFile(FName As String, _
    Sep As String, SelectionOnly As Boolean, _
    AppendData As Boolean)

Dim WholeLine As String
Dim FNum As Integer
Dim RowNdx As Long
Dim ColNdx As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim StartCol As Integer
Dim EndCol As Integer
Dim CellValue As String


Application.ScreenUpdating = False
On Error GoTo EndMacro:
FNum = FreeFile

If SelectionOnly = True Then
    With Selection
        StartRow = .Cells(1).Row
        StartCol = .Cells(1).Column
        EndRow = .Cells(.Cells.Count).Row
        EndCol = .Cells(.Cells.Count).Column
    End With
Else
    With ActiveSheet.UsedRange
        StartRow = .Cells(1).Row
        StartCol = .Cells(1).Column
        EndRow = .Cells(.Cells.Count).Row
        EndCol = .Cells(.Cells.Count).Column
    End With
End If

If AppendData = True Then
    Open FName For Append Access Write As #FNum
Else
    Open FName For Output Access Write As #FNum
End If

For RowNdx = StartRow To EndRow
    WholeLine = ""
    For ColNdx = StartCol To EndCol
        If Cells(RowNdx, ColNdx).Value = "" Then
            CellValue = Chr(34) & Chr(34)
        Else
           CellValue = Cells(RowNdx, ColNdx).Text
        End If
        WholeLine = WholeLine & CellValue & Sep
    Next ColNdx
    WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
    Print #FNum, WholeLine
Next RowNdx

EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #FNum

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' END ExportTextFile
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Because the ExportToTextFile procedure  accepts input parameters, you must call it from other VBA code, such as the  following:  Sub DoTheExport() 
    ExportToTextFile FName:="C:\Test.txt", Sep:=";", _
       SelectionOnly:=False, AppendData:=True
End Sub
  In the example DoTheExport procedure above, the file name and the separator character are hard coded in to the code. If you want to prompt the user for the file name and the separator character, use code like the following: 
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DoTheExport
' This prompts the user for the FileName and the separtor
' character and then calls the ExportToTextFile procedure.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub DoTheExport()
    Dim FileName As Variant
    Dim Sep As String
    FileName = Application.GetSaveAsFilename(InitialFileName:=vbNullString, FileFilter:="Text Files (*.txt),*.txt")
    If FileName = False Then
        ''''''''''''''''''''''''''
        ' user cancelled, get out
        ''''''''''''''''''''''''''
        Exit Sub
    End If
    Sep = Application.InputBox("Enter a separator character.", Type:=2)
    If Sep = vbNullString Then
        ''''''''''''''''''''''''''
        ' user cancelled, get out
        ''''''''''''''''''''''''''
        Exit Sub
    End If
    Debug.Print "FileName: " & FileName, "Separator: " & Sep
    ExportToTextFile FName:=CStr(FileName), Sep:=CStr(Sep), _
       SelectionOnly:=False, AppendData:=True
End Sub

2.Nếu bạn muốn dùng công cụ thì
Dowload ở đây hoặc http://www.brothersoft.com/downloads/xls-to-txt.html or http://www.softinterface.com/Convert-XLS\Convert-XLS.htm
 
Upvote 0
Em cũng mạo muội góp một cách đơn giản dễ sử dụng, bảo đảm ai cũng làm được.
Copy đoạn code này vào Module.
Sau đó, chọn sheet cần export ra dạng text (nghĩa là activate sheet đó, đứng tại sheet đó), ấn Alt+F8 để gọi Sub này chạy, nhập vào tên file *.txt cần lưu (chỉ nhập tên file thôi, phần mở rộng excel tự điền vào), đường dẫn mặc định là D:\ và dĩ nhiên các bạn có thể sửa lại cho phù hợp.
PHP:
Sub ExcelToTxt()
Dim MyPath As String
MyPath = "D:\"
MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
ActiveSheet.Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs _
    Filename:=MyPath & MyFileName & ".txt", _
    FileFormat:=xlUnicodeText, CreateBackup:=False
ActiveWorkbook.Close True
End Sub

Mời các anh chị xem thêm file đính kèm nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em cũng mạo muội góp một cách đơn giản dễ sử dụng, bảo đảm ai cũng làm được.
Copy đoạn code này vào Module.
Sau đó, chọn sheet cần export ra dạng text (nghĩa là activate sheet đó, đứng tại sheet đó), ấn Alt+F8 để gọi Sub này chạy, nhập vào tên file *.txt cần lưu (chỉ nhập tên file thôi, phần mở rộng excel tự điền vào), đường dẫn mặc định là D:\ và dĩ nhiên các bạn có thể sửa lại cho phù hợp.
PHP:
Sub ExcelToTxt()
Dim MyPath As String
MyPath = "D:\"
MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
ActiveSheet.Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs _
    Filename:=MyPath & MyFileName & ".txt", _
    FileFormat:=xlUnicodeText, CreateBackup:=False
ActiveWorkbook.Close True
End Sub
Mời các anh chị xem thêm file đính kèm nhé!

Nhiều khi đơn giản nhưng lại không nghĩ đến.
Nên thêm bẫy lỗi để khi người dùng Cancel hoặc tên File = "" hoặc có ký tự đặc biệt.

Thân!
 
Upvote 0
Em cũng mạo muội góp một cách đơn giản dễ sử dụng, bảo đảm ai cũng làm được.
Copy đoạn code này vào Module.
Sau đó, chọn sheet cần export ra dạng text (nghĩa là activate sheet đó, đứng tại sheet đó), ấn Alt+F8 để gọi Sub này chạy, nhập vào tên file *.txt cần lưu (chỉ nhập tên file thôi, phần mở rộng excel tự điền vào), đường dẫn mặc định là D:\ và dĩ nhiên các bạn có thể sửa lại cho phù hợp.
PHP:
Sub ExcelToTxt()
Dim MyPath As String
MyPath = "D:\"
MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
ActiveSheet.Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs _
    Filename:=MyPath & MyFileName & ".txt", _
    FileFormat:=xlUnicodeText, CreateBackup:=False
ActiveWorkbook.Close True
End Sub
Mời các anh chị xem thêm file đính kèm nhé!

Tuyệt wá em đã làm thành công rồi. chỉ tiếc là xuất cả sheet thôi, em đã thử chuyển 1 vùng dữ liệu (range) để xuất nhưng không làm được. Nếu anh làm được thì tuyệt vời wá
 
Upvote 0
Bạn xem đoạn code này nhé
Mã:
Sub ExcelToTxt()
    Dim MyPath As String, MyFileName As String
    Dim newbook As Workbook
    MyPath = "D:\"
    MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
    Selection.Copy
    Set newbook = Workbooks.Add
    With newbook
        .Sheets("Sheet1").Range("A1").PasteSpecial xlPasteValues
        .SaveAs Filename:=MyPath & MyFileName & ".txt", _
                          FileFormat:=xlUnicodeText, CreateBackup:=False
        .Close True
    End With
End Sub
Cần xuất vùng nào thì bạn phải chọn trước (Đánh dấu vùng cần xuất).
 
Upvote 0
Mình muốn xuất vùng B1:C22 thành text và đã sửa lại của bạn như sau : (tuy nhiên vẫn không được bạn ơi, nó xuất ra 1 file text trắng &&&%$R)
Mã:
Sub ExcelToTxt()
    Dim MyPath As String, MyFileName As String
    Dim newbook As Workbook
    MyPath = "D:\"
    MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
    Selection.Copy
    Set newbook = Workbooks.Add
    With newbook
        .Sheets("Sheet1").Range("B1:C22").PasteSpecial xlPasteValues
        .SaveAs Filename:=MyPath & MyFileName & ".txt", _
                          FileFormat:=xlUnicodeText, CreateBackup:=False
        .Close True
    End With
End Sub
Bạn ktra giúp mình với , mình không rành VB lắm, cảm ơn bạn nhiều .
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mình muốn xuất vùng B1:C22 thành text và đã sửa lại của bạn như sau : (tuy nhiên vẫn không được bạn ơi, nó xuất ra 1 file text trắng &&&%$R)
PHP:
 Sub ExcelToTxt()
    Dim MyPath As String, MyFileName As String
    Dim newbook As Workbook
    MyPath = "D:\"
    MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
    Selection.Copy
    Set newbook = Workbooks.Add
    With newbook
        .Sheets("Sheet1").Range("B1:C22").PasteSpecial xlPasteValues
        .SaveAs Filename:=MyPath & MyFileName & ".txt", _
                          FileFormat:=xlUnicodeText, CreateBackup:=False
        .Close True
    End With
End Sub
Bạn ktra giúp mình với , mình không rành VB lắm, cảm ơn bạn nhiều .

Đối với đoạn code này, trước khi chạy bạn phải chiếu sáng vùng cần xuất ra file *.txt.
Hoặc nếu bạn đã cố định vùng cần xuất ra file txt luôn là vùng B1:C22 thì sửa lại một tí:

PHP:
Sub ExcelToTxt()
    Dim MyPath As String, MyFileName As String
    Dim NewBook As Workbook
    MyPath = "D:\"
    MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
    ActiveSheet.[B1:C22].Select     ''Thêm đoạn này vô là xong
    Selection.Copy
    Set NewBook = Workbooks.Add
    With NewBook
        .Sheets("Sheet1").[A1].PasteSpecial xlPasteValues  ''Sửa tí chỗ này nữa
        .SaveAs Filename:=MyPath & MyFileName & ".txt", _
                          FileFormat:=xlUnicodeText, CreateBackup:=False
        .Close True
    End With
End Sub

Lưu ý: khi Paste ra workbook mới thì Paste vào ô đầu tiên của sheet mới trong workbook vừa tạo ra.
 
Lần chỉnh sửa cuối:
Upvote 0
các bạn ơi cho mình hỏi luôn.
Có cách nào để khi save file mà có 1 file có sẵn rồi, nó sẽ tự động xóa file cũ và save file mới này không?
 
Upvote 0
các bạn ơi cho mình hỏi luôn.
Có cách nào để khi save file mà có 1 file có sẵn rồi, nó sẽ tự động xóa file cũ và save file mới này không?

Mình thấy khi lỡ save file mà tên file bị trùng thì nó hỏi mình có muốn replace không? Và mình replace bình thường mà bạn.
 
Upvote 0
Mình thấy khi lỡ save file mà tên file bị trùng thì nó hỏi mình có muốn replace không? Và mình replace bình thường mà bạn.

Vì mình phải save rất nhiều file ra đuôi text cùng một lúc, nó có đè lên cũng ko sao. Nhưng nếu mà mình cứ phải ngồi ấn accept thì mất thời gian lắm. Nên mình muốn hỏi trong code các bạn đưa ra nên thêm lệnh gì để khi ktra thấy có 1 file trùng tên, nó sẽ tự đồng chèn lên luôn
 
Upvote 0
Thanks hết mọi người nha. Mình tìm hoài mới thấy topic này đó. Mình muốn xuất dữ liệu trên vùng định sẵn (Vd: A1:B10) thành file txt, nhưng khi mình thay đổi giá trị và xuất dữ liệu một lần nữa thì nó chèn vào phía dưới dữ liệu vừa tạo trên file txt cũ (chứ ko replace file cũ). Có cách nào không vậy mọi người, giúp mình với!
 
Upvote 0
Cả nhà cho em hỏi thêm tí.
Em muốn có code xuất text trong Cad ra dạng này. ai biết chỉ giùm em với
 
Upvote 0
Đối với đoạn code này, trước khi chạy bạn phải chiếu sáng vùng cần xuất ra file *.txt.
Hoặc nếu bạn đã cố định vùng cần xuất ra file txt luôn là vùng B1:C22 thì sửa lại một tí:

PHP:
Sub ExcelToTxt()
    Dim MyPath As String, MyFileName As String
    Dim NewBook As Workbook
    MyPath = "D:\"
    MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
    ActiveSheet.[B1:C22].Select     ''Thêm đoạn này vô là xong
    Selection.Copy
    Set NewBook = Workbooks.Add
    With NewBook
        .Sheets("Sheet1").[A1].PasteSpecial xlPasteValues  ''Sửa tí chỗ này nữa
        .SaveAs Filename:=MyPath & MyFileName & ".txt", _
                          FileFormat:=xlUnicodeText, CreateBackup:=False
        .Close True
    End With
End Sub
Lưu ý: khi Paste ra workbook mới thì Paste vào ô đầu tiên của sheet mới trong workbook vừa tạo ra.


Mình thấy bài này rất hay nhưng mình thấy có 1 vấn đề sau: ở trong excel dữ liệu lằm ở nhiều cột khi xuất ra file.txt nó sẽ sếp thàng hàng theo kiểu bảng, ma mình muốn nó viết ra theo kiểu đọc dự liệu ở cột A viết ra txt hết dữ liệu ở cột A thì chuển sang đọc dự liệu cở cột B viết tiếp vào txt và tương tự như vâyi cho cột C, D ..
 
Upvote 0
Em cũng mạo muội góp một cách đơn giản dễ sử dụng, bảo đảm ai cũng làm được.
Copy đoạn code này vào Module.
Sau đó, chọn sheet cần export ra dạng text (nghĩa là activate sheet đó, đứng tại sheet đó), ấn Alt+F8 để gọi Sub này chạy, nhập vào tên file *.txt cần lưu (chỉ nhập tên file thôi, phần mở rộng excel tự điền vào), đường dẫn mặc định là D:\ và dĩ nhiên các bạn có thể sửa lại cho phù hợp.
PHP:
Sub ExcelToTxt()
Dim MyPath As String
MyPath = "D:\"
MyFileName = InputBox("Nhap ten file can luu:", "Export from excel to text")
ActiveSheet.Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs _
    Filename:=MyPath & MyFileName & ".txt", _
    FileFormat:=xlUnicodeText, CreateBackup:=False
ActiveWorkbook.Close True
End Sub
Mời các anh chị xem thêm file đính kèm nhé!





Bạn ơi, mình muốn hỏi là: Nếu nhw chuyển sang định dạng *.txt nhưng các số/chữ cách nhau bằng dấu "phảy" thì làm thế nào?(hiện bạn đang Export sang *.txt mà các chữ được cách nhau bởi Space)

Cảm ơn bạn rất nhiều.

bạn có thể gửi trực tếp vào Email của mình cũng được:dovanhoc84@gmail.com
}}}}}
 
Upvote 0
Lưu với UTF-8 thì phải làm sao nhỉ!?? khó thật đấy
 
Upvote 0
Lưu với UTF-8 thì phải làm sao nhỉ!?? khó thật đấy
Được mà bạn
Ví dụ code thế này:
PHP:
Sub Data2txtFile()
  Dim txtFile As String, sArray, tmp(), Arr(), lR As Long, lC As Long
  sArray = Selection.Value
  txtFile = ThisWorkbook.Path & "\tmp.txt"
  ReDim tmp(1 To UBound(sArray, 2))
  ReDim Arr(1 To UBound(sArray, 1))
  With CreateObject("Scripting.FileSystemObject")
    With .CreateTextFile(txtFile, True, True)
      For lR = 1 To UBound(sArray, 1)
        For lC = 1 To UBound(sArray, 2)
          tmp(lC) = sArray(lR, lC)
        Next
        Arr(lR) = Join(tmp, vbTab)
      Next
      .Write Join(Arr, vbCrLf)
      .Close
    End With
  End With
End Sub
Quét chọn vùng dữ liệu trên bảng tính rồi chạy code trên
 

File đính kèm

Upvote 0
Cám ơn anh,
cho em hỏi thêm đoạn code dưới đây này nếu muốn lưu với (UTF-8, hoặc UNIDCODE) thì phải thêm gì vào. Vì em chỉ lượm trên mạng code thôi nên không hiểu lắm ! chỉ thấy code này chạy được và đúng ý mình cần.


Public Sub Save_UPLOAD_File()
Dim i As Integer, FCTi as string, newtxt As Object, fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set newtxt = fso.createtextfile("D:\Filetext.txt")

For i = 8 To Worksheets("FCT").Range("A60000").End(xlUp).Row
FCTi = Range("FCTNAME").Value
newtxt.writeline (FCTi)
Next i

End If
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom