tạo file txt bằng VBA

Jokerfly

Thành viên mới
Tham gia ngày
27 Tháng mười một 2015
Bài viết
18
Thích
0
Tuổi
24
#1
cho mình hỏi có mình đang có dữ liệu trên 1 sheet excel mình mún tạo code tự tạo 1 file txt và lưu dữ liệu của sheet đó vào file txt vừa tạo.
mọi người giúp mình với
 

Jokerfly

Thành viên mới
Tham gia ngày
27 Tháng mười một 2015
Bài viết
18
Thích
0
Tuổi
24
#2
mình mò ra code rồi nhưng vứng cái file lưu ra không phải định dạng UTF-8 . mọi người giúp với

Sub Export()
Dim arr, I As Long
Dim strPath As String
strPath = Application.GetSaveAsFilename(FileFilter:= _
"Text Files (*.txt), *.txt", Title:="Save Location")
If strPath <> "False" Then
Open strPath For Output As #1
arr = Range("A1:G" & [A100].End(xlUp).Row)
For I = 1 To UBound(arr)
Print #1, arr(I, 1) & vbTab & arr(I, 2) & vbTab & arr(I, 3) & vbTab & arr(I, 4) & vbTab & arr(I, 5) & vbTab & arr(I, 6) & vbTab & arr(I, 7)
Next I
Close #1
End If
End Sub
 

batman1

Thành viên tiêu biểu
Tham gia ngày
8 Tháng chín 2014
Bài viết
588
Thích
1,033
#3
1. Định dạng bắt buộc phải UTF-8? Unicode không chấp nhận? Nếu thế thì phải chuyển từ unicode sang UTF-8.
2. Code của bạn thậm chí khi có vd. tiếng Việt thì sau khi ghi mất hết dấu
 
Tham gia ngày
12 Tháng ba 2007
Bài viết
3,753
Thích
2,547
#4
cho mình hỏi có mình đang có dữ liệu trên 1 sheet excel mình mún tạo code tự tạo 1 file txt và lưu dữ liệu của sheet đó vào file txt vừa tạo.
mọi người giúp mình với
Bạn có thể dùng tạm code này. Việc còn lại là bạn chế biến nhé.
Mã:
Private Sub Export()
    Dim fso As Object, MyFile  As Object
    Dim FileName As String, I As Long
    Set fso = CreateObject("Scripting.FileSystemObject")
    FileName = "C:\Text.txt"
    Set MyFile = fso.CreateTextFile(FileName, True, True)
    MyFile.Write "Gia ð" & ChrW(236) & "nh gi" & ChrW(7843) & "i pháp Excel"
    MyFile.Close
End Sub
 

Jokerfly

Thành viên mới
Tham gia ngày
27 Tháng mười một 2015
Bài viết
18
Thích
0
Tuổi
24
#5
1. Định dạng bắt buộc phải UTF-8? Unicode không chấp nhận? Nếu thế thì phải chuyển từ unicode sang UTF-8.
2. Code của bạn thậm chí khi có vd. tiếng Việt thì sau khi ghi mất hết dấu
1. nếu là Unicode vẫn được không nhất thiết là UTF-8
2. Mình dùng cho tính chất công việc nên không sử dụng tiếng Việt nên không sợ vứng vấn đề này
mình có xem tìm mãi k ra cách chuyển định dạng.
 

batman1

Thành viên tiêu biểu
Tham gia ngày
8 Tháng chín 2014
Bài viết
588
Thích
1,033
#6
Unicode thì sửa tí tẹo
Mã:
Sub Export()
Dim arr, i As Long
Dim strPath As String, s As String, m() As Byte
    strPath = Application.GetSaveAsFilename(FileFilter:= _
    "Text Files (*.txt), *.txt", Title:="Save Location")
    If strPath <> "False" Then
        arr = Range("A1:G" & [A100].End(xlUp).Row)
        For i = 1 To UBound(arr)
            s = s & IIf(i > 1, vbCrLf, "") & arr(i, 1) & vbTab & arr(i, 2) & vbTab & arr(i, 3) & vbTab & arr(i, 4) & vbTab & arr(i, 5) & vbTab & arr(i, 6) & vbTab & arr(i, 7)
        Next i
        m = s
        Open strPath For Binary As #1
        Put #1, , m
        Close #1
    End If
End Sub
 

Jokerfly

Thành viên mới
Tham gia ngày
27 Tháng mười một 2015
Bài viết
18
Thích
0
Tuổi
24
#7
Unicode thì sửa tí tẹo
Mã:
Sub Export()
Dim arr, i As Long
Dim strPath As String, s As String, m() As Byte
    strPath = Application.GetSaveAsFilename(FileFilter:= _
    "Text Files (*.txt), *.txt", Title:="Save Location")
    If strPath <> "False" Then
        arr = Range("A1:G" & [A100].End(xlUp).Row)
        For i = 1 To UBound(arr)
            s = s & IIf(i > 1, vbCrLf, "") & arr(i, 1) & vbTab & arr(i, 2) & vbTab & arr(i, 3) & vbTab & arr(i, 4) & vbTab & arr(i, 5) & vbTab & arr(i, 6) & vbTab & arr(i, 7)
        Next i
        m = s
        Open strPath For Binary As #1
        Put #1, , m
        Close #1
    End If
End Sub
cảm ơn bạn rất nhiều . mình chưa hiểu đoạn code bạn thêm vào. bạn có thể vui lòng giải thích giúp mình dc k.
 

batman1

Thành viên tiêu biểu
Tham gia ngày
8 Tháng chín 2014
Bài viết
588
Thích
1,033
#8
Thì bạn so sánh 2 code thì thấy khác biệt thôi.
Trong vòng lặp For code nối các mục thành 1 chuỗi duy nhất s.
Bất kể cái gì trong bộ nhớ thực ra cũng chỉ là một chuỗi bai. Mỗi chuỗi văn bản được Excel "giữ" trong bộ nhớ ở dạng unicode - dạng các bai đại diện cho chuỗi unicode.
Khi bạn có
Mã:
Dim s As string
thì thực ra chỉ là đặt hàng 4 bai ở "chỗ đó chỗ đó" để ghi địa chỉ hiện hành của chuỗi s vào đấy. Tức:
1. Ở đâu đó * trong RAM Excel chi ra 4 bai.
2. Khi nhập giá trị vào s thì Excel sẽ ghi đủ n bai vào đâu đó ** trong RAM, n bai này là dạng của chuỗi unicode trong bộ nhớ. vd. chuỗi "ab". "a" và "b" có mã là 97 = &H61, 98 = &H62. Ở ** sẽ có 4 bai &H61, &H0, &H62, &H0
3. địa chỉ ** sẽ được ghi vào 4 bai ở *
Tức ở địa chỉ * trong bộ nhớ sẽ lưu địa chỉ hiện hành của chuỗi, tức **, ở trong bộ nhớ.
Điạ chỉ * có thể đọc ra bằng hàm VarPtr, địa chỉ ** có thể đọc ra bằng hàm StrPtr
Mã:
Sub test()
Dim s As String
    Debug.Print "Dia chi * = " & VarPtr(s)
'    chua nhap gia tri, trong bo nho chua co chuoi s
    Debug.Print "Dia chi ** = " & StrPtr(s)
    s = "ab"
'    trong bo nho da co chuoi
    Debug.Print "Dia chi ** = " & StrPtr(s)
End Sub
Dòng
Mã:
m = s
là đưa tất cả các bai trong bộ nhớ tính từ địa chỉ ** vào mảng m. Chú ý là m được khai báo là mảng bai. Thế thôi.

Sau đó ghi chuỗi bai trong m vào tập tin - ghi mã của các ký tự. Mở tập tin bất kỳ bằng Hex Editor thì nó hiển thị chính những mã của các ký tự. Tức những bai sẽ được nạp vào bộ nhớ khi đọc tập tin vào bộ nhớ.

Tập tin được mở Fors Binary thay cho OutPut, và dùng Put thay cho Print
 

batman1

Thành viên tiêu biểu
Tham gia ngày
8 Tháng chín 2014
Bài viết
588
Thích
1,033
#10
Uổi, có thể thể gán chuỗi tới mảng Byte, nhưng sao lại không gán được tới các loại mảng Long... anh nhỉ?
Bạn viết thư hỏi anh Bill xem.

Mà bạn định gán mảng mã các ký tự của chuỗi vào mảng Long để làm gì? Và sau khi gán thì ý nghĩa của mỗi Long ấy là gì?
 
Top