VBA xuất tệp .txt từ tệp ết-cel

Liên hệ QC

bin.vcsc

Thành viên hoạt động
Tham gia
6/12/13
Bài viết
125
Được thích
12
Gửi anh chị và các bạn

Mình muốn xuất tệp txt từ tệp ết-cel. Tuy nhiên mình tham khảo VBA và viết thử thì chỉ xuất ra được dòng đầu tiên.
Mong anh chị và các bạn tư vấn giúp mình xuất được tệp.
Cám ơn nhiều.
 

File đính kèm

  • HAN-D02DAT-0111114400.txt
    907 bytes · Đọc: 9
  • Tạo file txt.xlsm
    19.5 KB · Đọc: 17
Gửi anh chị và các bạn

Mình muốn xuất tệp txt từ tệp ết-cel. Tuy nhiên mình tham khảo VBA và viết thử thì chỉ xuất ra được dòng đầu tiên.
Mong anh chị và các bạn tư vấn giúp mình xuất được tệp.
Cám ơn nhiều.
Nhưng ý bạn muốn là gì? Xuất bao nhiêu dòng? Ra bao nhiêu file? Mỗi file sẽ gồm dữ liệu nào?... Mô tả càng chi tiết thì càng được hổ trợ tốt hơn.
 
Upvote 0
Nhưng ý bạn muốn là gì? Xuất bao nhiêu dòng? Ra bao nhiêu file? Mỗi file sẽ gồm dữ liệu nào?... Mô tả càng chi tiết thì càng được hổ trợ tốt hơn.
Cám ơn bạn @giaiphap , mình muốn xuất tất cả các cột và hàng trong bảng.

Cũng xin nói rõ thêm là mình dùng VBA vì khi xuất tệp xuất có thêm phần mở rộng phía trước và ngày giờ xuất tệp.
 
Upvote 0
Cám ơn bạn @giaiphap , mình muốn xuất tất cả các cột và hàng trong bảng.

Cũng xin nói rõ thêm là mình dùng VBA vì khi xuất tệp xuất có thêm phần mở rộng phía trước và ngày giờ xuất tệp.
Nói lại lần nửa nếu bạn không mô tả chi tiết vấn đề của mình thì tui sẽ không hổ trợ nửa. Tất cả các hàng và các cột theo thứ tự ra sao? Các cột và các hàng xuất sang txt thì nó nằm gom chung lại hết hay tách ra? Gom chung là gom theo thứ tự hàng rồi tới cột hay cột tới hàng, còn không gom thì chúng cách nhau như thế nào (khoảng trắng, tab, ->, @,...)
 
Upvote 0
Nói lại lần nửa nếu bạn không mô tả chi tiết vấn đề của mình thì tui sẽ không hổ trợ nửa. Tất cả các hàng và các cột theo thứ tự ra sao? Các cột và các hàng xuất sang txt thì nó nằm gom chung lại hết hay tách ra? Gom chung là gom theo thứ tự hàng rồi tới cột hay cột tới hàng, còn không gom thì chúng cách nhau như thế nào (khoảng trắng, tab, ->, @,...)
Các cột sẽ được phân tách bằng dấu ; (dấu chấm phẩy) giữa các cột.

Cám ơn bạn @giaiphap và xin lỗi do mình chưa hiểu rõ ý.
 
Upvote 0
Gửi anh chị và các bạn

Mình muốn xuất tệp txt từ tệp ết-cel. Tuy nhiên mình tham khảo VBA và viết thử thì chỉ xuất ra được dòng đầu tiên.
Mong anh chị và các bạn tư vấn giúp mình xuất được tệp.
Cám ơn nhiều.
Mình bổ sung thêm vào code của bạn để ra kết quả thôi. Sau này viết code phải khai báo biến rõ ràng nha, và trình bày khoa học chút để nhìn cho dễ khi cần xử lý. Nhìn code bạn làm mình nhớ lại những ngày đầu ở GPE
Mã:
Sub TaoFile()

fn = ActiveWorkbook.Path & "\HAN-D02DAT-"
        dmy = Now()
        mmm = Month(dmy)
        If Len(mmm) = 1 Then
            mmm = "0" & mmm
        End If
        dd = Day(dmy)
        If Len(dd) = 1 Then
            dd = "0" & dd
        End If
        hh = Hour(dmy)
        If Len(hh) = 1 Then
            hh = "0" & hh
        End If
        mm = Minute(dmy)
        If Len(mm) = 1 Then
            mm = "0" & mm
        End If
        
        fn = fn & mmm & dd & hh & mm & "00.txt"
        FName = HAN & "DO2DAT" & mmm & dd & hh & mm & "00.txt"
        
Open fn For Output As #1
With Sheets("Data")
    sArr = .Range("A2", .[A65536].End(3)).Resize(, 44).Value
End With
For i = 1 To UBound(sArr)
   For j = 1 To UBound(sArr, 2)
       tmp = tmp & vbTab & sArr(i, j)
   Next
   Print #1, tmp
   tmp = Empty
Next i
Close #1
End Sub
 
Upvote 0
Mình bổ sung thêm vào code của bạn để ra kết quả thôi. Sau này viết code phải khai báo biến rõ ràng nha, và trình bày khoa học chút để nhìn cho dễ khi cần xử lý. Nhìn code bạn làm mình nhớ lại những ngày đầu ở GPE
Mã:
Sub TaoFile()

fn = ActiveWorkbook.Path & "\HAN-D02DAT-"
        dmy = Now()
        mmm = Month(dmy)
        If Len(mmm) = 1 Then
            mmm = "0" & mmm
        End If
        dd = Day(dmy)
        If Len(dd) = 1 Then
            dd = "0" & dd
        End If
        hh = Hour(dmy)
        If Len(hh) = 1 Then
            hh = "0" & hh
        End If
        mm = Minute(dmy)
        If Len(mm) = 1 Then
            mm = "0" & mm
        End If
       
        fn = fn & mmm & dd & hh & mm & "00.txt"
        FName = HAN & "DO2DAT" & mmm & dd & hh & mm & "00.txt"
       
Open fn For Output As #1
With Sheets("Data")
    sArr = .Range("A2", .[A65536].End(3)).Resize(, 44).Value
End With
For i = 1 To UBound(sArr)
   For j = 1 To UBound(sArr, 2)
       tmp = tmp & vbTab & sArr(i, j)
   Next
   Print #1, tmp
   tmp = Empty
Next i
Close #1
End Sub
Bin đã chạy ra kết quả. Tuy nhiên do Bin đưa thông tin thiếu, và cũng như bác @giaiphap có nhắc Bin bổ sung ở trên về việc phân tách các cột trong tệp kết quả.
Nên nếu bây giờ mình muốn thêm dấu ; (dấu chấm phẩy giữa các cột) trong file xuất ra thì như thế nào.
Cám ơn bác @Quang_Hải rất nhiều.
 
Upvote 0
Bin đã chạy ra kết quả. Tuy nhiên do Bin đưa thông tin thiếu, và cũng như bác @giaiphap có nhắc Bin bổ sung ở trên về việc phân tách các cột trong tệp kết quả.
Nên nếu bây giờ mình muốn thêm dấu ; (dấu chấm phẩy giữa các cột) trong file xuất ra thì như thế nào.
Cám ơn bác @Quang_Hải rất nhiều.
Thay vbTab thành ";"
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Gửi bác @Quang_Hải.
Em vận dụng VBA vào tệp của công ty tuy nhiên khi xuất tệp ra thì có báo lỗi như sau. Mong bác xem và hướng dẫn giúp ah.
1615175559705.png
 

File đính kèm

  • VCSC6001-20210225.xlsb
    289.4 KB · Đọc: 20
Upvote 0
Hình như dữ liệu trong sheet Data bị lỗi tại X44
Gửi bác @Quang_Hải , em kiểm tra thì đúng là có lỗi. Nguyên nhân là do có "-" ở phía trước trong dữ liệu nguồn.

Mình có cách nào khắc phục không bác?

1615183503512.png 1615183571216.png
Bài đã được tự động gộp:

View attachment 255088

tmp = vba.cstr()
tmp = tmp & ";" & vba.cstr()
Gửi bác @befaint , sửa xong báo lỗi này:

1615183911166.png
 
Upvote 0
Gửi bác @Quang_Hải , em kiểm tra thì đúng là có lỗi. Nguyên nhân là do có "-" ở phía trước trong dữ liệu nguồn.

Mình có cách nào khắc phục không bác?

View attachment 255092 View attachment 255093
Bài đã được tự động gộp:


Gửi bác @befaint , sửa xong báo lỗi này:

View attachment 255094
Sửa dòng này. Thay .Value thành .Formula
With Sheets("Data")
sArr = .Range("A2", .[A65536].End(3)).Resize(, 45).Formula
End With
 
Upvote 0
Sửa dòng này. Thay .Value thành .Formula
With Sheets("Data")
sArr = .Range("A2", .[A65536].End(3)).Resize(, 45).Formula
End With
Cám ơn bác @Quang_Hải , em chỉnh lại .Formula nhưng các cột ngày tháng năm lại bị ảnh hưởng chuyển thành định dạng số (03/09/2021 -> 44248).
Mình có cách nào khắc phục lỗi này không bác?
 
Upvote 0
Cám ơn bác @Quang_Hải , em chỉnh lại .Formula nhưng các cột ngày tháng năm lại bị ảnh hưởng chuyển thành định dạng số (03/09/2021 -> 44248).
Mình có cách nào khắc phục lỗi này không bác?
Vậy sử dụng lại đoạn code cũ và thử sửa lại chỗ này

If tmp = Empty Then
tmp = sArr(I, J)
Else
tmp = tmp & ";" & CStr(sArr(I, J)) ' sửa lại chỗ này
End If
 
Upvote 0
Web KT
Back
Top Bottom