Xin code chuyển 1 vùng dữ liệu sang file txt???

Liên hệ QC

nguyentieu

Thành viên hoạt động
Tham gia
12/2/09
Bài viết
109
Được thích
10
Nghề nghiệp
Sinh viên
E cần xuất sang file 2 file txt của 2 vùng dữ liệu trong cùng 1 sheet (đã được đặt tên là phongang và phodung) để nhập vào phần mềm khác. E muốn xin 1 macro để tạo một hoặc hai command button để thực hiện việc này. Yêu cầu:


  • Chỉ định được vị trí lưu file txt (e có tham khảo vài đoạn trên diễn đàn nhưng phải gõ đường dẫn) -> hiện ra cái bảng giống như lưu file í --=0
  • File txt xuất ra có dạng giống mẫu e đính kèm.

Mong các ACE chỉ giáo.
Thanks
 

File đính kèm

  • Xuat txt.rar
    5.7 KB · Đọc: 125
E cần xuất sang file 2 file txt của 2 vùng dữ liệu trong cùng 1 sheet (đã được đặt tên là phongang và phodung) để nhập vào phần mềm khác. E muốn xin 1 macro để tạo một hoặc hai command button để thực hiện việc này. Yêu cầu:


  • Chỉ định được vị trí lưu file txt (e có tham khảo vài đoạn trên diễn đàn nhưng phải gõ đường dẫn) -> hiện ra cái bảng giống như lưu file í --=0
  • File txt xuất ra có dạng giống mẫu e đính kèm.
Mong các ACE chỉ giáo.
Thanks
Trong file đính kèm, mình tạo nút xuất file text vào thư mục chứa file Excel, còn vấn đề chỉ định đường dẫn thì xin nhờ các bạn khác.
 

File đính kèm

  • Xuat sang txt.rar
    12.7 KB · Đọc: 162
Trong file đính kèm, mình tạo nút xuất file text vào thư mục chứa file Excel....

Bác nghiaphuc ơi, nếu như e muốn tách ra làm 2 Command Buttondùng chính Name đã đặt cho vùng muốn xuất ra file .txt thì làm sao vậy? Bác hướng dẫn e tí nhé, e cũng ko rành lắm về VBA lắm, nhân tiện e gửi bác xem 1 file có xuất ra file txt nhưng phải gõ đường dẫn vào bác xem thử có sáng kiến gì ko. (bác chãy thủ tục rồi gõ tên file, mặc định nó lưu vào ổ D) -> cái này e cũng sưu tầm trên diễn đàn mình quên mất tác giả rồi sr --=0--=0
 

File đính kèm

  • xuat txt.xls
    39.5 KB · Đọc: 52
Em mới sưu tầm được 1 đoạn code trên diễn đàn. Đoạn code khá hay nhưng phải chọn vùng muốn xuất ra. Vì vậy e muốn nhờ các ACE chỉnh dùm lại là xuất trong vùng e đã đặt tên là phongangphodung và cho vào 2 command button. E có gửi file lên diễn đàn.

Mong các ACE giúp đỡ
Thanks

Mạo muội xin phép tác giả cho e đăng đoạn code --=0
PHP:
Sub NewTxt()
Dim MyPath As String, MyStr As String, MyFile As String
Dim r As Long, c As Long, rD As Long, rC As Long, cD As Long, cC As Long, f As Byte
On Error Resume Next
MyPath = ThisWorkbook.Path
MyFile = InputBox("Nhap duong dan, ten file Txt:" & Chr(13) & "Ví du: d:\THUMUC\NewTxt.txt", "TXT", MyPath & "\MyTxt.txt")
If MyFile = "" Then Exit Sub
rD = Selection.Row
rC = Selection.Rows.Count + rD - 1
cD = Selection.Column
cC = Selection.Columns.Count + rD - 1
Kill MyFile
f = FreeFile
Open MyFile For Output As #f
For r = rD To rC
  MyStr = ""
  For c = cD To cC
    MyStr = MyStr & Cells(r, c) & " "
  Next
  Print #f, Trim(MyStr)
Next
Close #f
End Sub
 

File đính kèm

  • Xuat sang txt.xls
    37.5 KB · Đọc: 96
Bác nghiaphuc ơi, nếu như e muốn tách ra làm 2 Command Buttondùng chính Name đã đặt cho vùng muốn xuất ra file .txt thì làm sao vậy? Bác hướng dẫn e tí nhé, e cũng ko rành lắm về VBA lắm, nhân tiện e gửi bác xem 1 file có xuất ra file txt nhưng phải gõ đường dẫn vào bác xem thử có sáng kiến gì ko. (bác chãy thủ tục rồi gõ tên file, mặc định nó lưu vào ổ D) -> cái này e cũng sưu tầm trên diễn đàn mình quên mất tác giả rồi sr --=0--=0
Code sau cho phép chọn thư mục lưu:
PHP:
Private Sub CmdExport_Click()
    Dim Cuoi As Integer, i As Integer, a, b, FS
    Dim FD As FileDialog, DDan As String
    
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    FD.Title = "Chon thu muc luu": FD.Show
    DDan = FD.SelectedItems.Item(1)
    Cuoi = [B1000].End(xlUp).Row
    Set FS = CreateObject("Scripting.FileSystemObject")
    Set a = FS.CreateTextFile(DDan & "\PhoNgang.txt", True, False)
    Set b = FS.CreateTextFile(DDan & "\PhoDung.txt", True, False)
    For i = 5 To Cuoi
        a.WriteLine Range("B" & i) & " " & Range("C" & i)
        b.WriteLine Range("F" & i) & " " & Range("G" & i)
    Next
    a.Close: b.Close
End Sub
 

E đã làm được rồi, code rất là tuyệt vời. Cảm ơn bác một lần nữa. /-*+/
Nhân tiện bác cho e hỏi:
1/ Xóa chữ Private ở phần đầu đoạn code để gán vào Button có ảnh hưởng gì nhiều ko ạ?
2/ Có cách nào đặt tên file tùy ý ko? (giống đoạn code vừa rồi e giới thiệu)
 
Lần chỉnh sửa cuối:
E đã làm được rồi, code rất là tuyệt vời. Cảm ơn bác một lần nữa. /-*+/
Nhân tiện bác cho e hỏi:
1/ Xóa chữ Private ở phần đầu đoạn code để gán vào Button có ảnh hưởng gì nhiều ko ạ?
2/ Có cách nào đặt tên file tùy ý ko? (giống đoạn code vừa rồi e giới thiệu)
- Thứ nhất: Từ khóa Private cho biết thủ tục này chỉ áp dụng trong nội bộ 1 Module (khi ở Excel, bạn nhấn Alt+F8 sẽ không nhìn thấy nó), nếu muốn gọi thủ tục này, ta phải dùng lệnh Call (VD: Call Sheet1.CmdExport_Click). Nếu bỏ từ khóa này thì ta sẽ thấy thủ tục ở mọi nơi.
- Thứ hai: Trong file đính kèm, mình đã đáp ứng được yêu cầu của bạn: Cho phép chọn đường dẫn, tập tin giống như lưu một tập tin Text (bạn xem code trong file nhé).
 

File đính kèm

  • Xuat sang txt.rar
    13 KB · Đọc: 169
Trong file đính kèm, mình tạo nút xuất file text vào thư mục chứa file Excel, còn vấn đề chỉ định đường dẫn thì xin nhờ các bạn khác.
Em đang gặp vấn đề với việc xuất dữ liệu ra file text. Nếu dữ liệu viết bằng unicode thì khi xuất ra text file sẽ bị mất dữ liệu vì note pad mặc định Encoding là ANSI. Có cách nào khắc phục vấn đề này không ạ?
 
Em đang gặp vấn đề với việc xuất dữ liệu ra file text. Nếu dữ liệu viết bằng unicode thì khi xuất ra text file sẽ bị mất dữ liệu vì note pad mặc định Encoding là ANSI. Có cách nào khắc phục vấn đề này không ạ?
Trong code tại bài #5, bạn chỉ cần thay Set a = FS.CreateTextFile(DDan & "\PhoNgang.txt", True, False) bởi Set a = FS.CreateTextFile(DDan & "\PhoNgang.txt", True, True) là được.
 
Em đã làm theo hướng dẫn và được rồi. Nhưng bây giờ lại nảy sinh vấn đề khác, phần mềm của em không đọc được text với encode unicode. Như vậy là vẫn phải mở file text ra gõ lại rồi save as encode ansi. Còn có giải pháp nào nữa không nhỉ?
 
ninhhai;380312Như vậy là vẫn[B đã viết:
phải mở file text ra gõ lại rồi save as encode ansi[/B]. Còn có giải pháp nào nữa không nhỉ?
Bạn nói sao lạ thế? Nếu Save Encoding =ANSI thì các ký tự Unicode bị biến thành dấu ? hết rồi, sao mà đọc được? Bạn đã thử chưa?
 
Em đã làm theo hướng dẫn và được rồi. Nhưng bây giờ lại nảy sinh vấn đề khác, phần mềm của em không đọc được text với encode unicode. Như vậy là vẫn phải mở file text ra gõ lại rồi save as encode ansi. Còn có giải pháp nào nữa không nhỉ?
Tôi có giải pháp thế này, không biết có dùng được không
- Đầu tiên chuyển mà Text sang dạng VIQR (dùng 1 hàm chuyển mã)
- Lưu Text vào txt file ---> Chuổi với mã VIQR sẽ có thể lưu với Encoding = ANSI và phần mềm nào cũng đọc được
- Mai này khi xuất ra, có thể convert VIQR sang Unicode rất dễ dàng ---> Có thể dùng Unikey hoặc hàm tự tạo
Code như sau:
1> Hàm Convert qua lại giữa mã Unicode và VIQR
PHP:
Function VIQRConvert(ByVal Text As String, ByVal bMode As Boolean) As String
  ''Remark: - bMode = True  <--> Convert Unicode to VIQR
  ''        - bMode = False <--> Convert VIQR to Unicode
  Dim CharCode, viqrCode, i As Long, Tmp As String
  On Error Resume Next
  Tmp = Text
  CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
                   ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), _
                   ChrW(7879), ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), _
                   ChrW(7901), ChrW(7903), ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), _
                   ChrW(7919), ChrW(7921), ChrW(225), ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), _
                   ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), ChrW(7867), ChrW(7869), _
                   ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
                   ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), _
                   ChrW(250), ChrW(249), ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), _
                   ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
  viqrCode = Array("a('", "a(`", "a(?", "a(~", "a(.", "a^'", "a^`", "a^?", "a^~", "a^.", "e^'", _
                  "e^`", "e^?", "e^~", "e^.", "o^'", "o^`", "o^?", "o^~", "o^.", "o+'", "o+`", _
                  "o+?", "o+~", "o+.", "u+'", "u+`", "u+?", "u+~", "u+.", "a'", "a`", "a?", _
                  "a~", "a.", "a(", "a^", "dd", "e'", "e`", "e?", "e~", "e.", "e^", "i'", _
                  "i`", "i?", "i~", "i.", "o'", "o`", "o?", "o~", "o.", "o^", "o+", "u'", _
                  "u`", "u?", "u~", "u.", "u+", "y'", "y`", "y?", "y~", "y.")
  
  For i = 0 To UBound(CharCode)
    Tmp = Replace(Tmp, IIf(bMode, CharCode(i), viqrCode(i)), IIf(bMode, viqrCode(i), CharCode(i)))
    Tmp = Replace(Tmp, UCase(IIf(bMode, CharCode(i), viqrCode(i))), UCase(IIf(bMode, viqrCode(i), CharCode(i))))
  Next
  VIQRConvert = Tmp
End Function
2> Code lưu dữ liệu vào txtfile
PHP:
Sub Data2txtFile(ByVal SrcRng As Range, txtFile As String)
  Dim sArray, Tmp(), Arr(), lR As Long, lC As Long
  On Error GoTo ExitSub
  sArray = SrcRng.Value
  ReDim Tmp(1 To UBound(sArray, 2))
  ReDim Arr(1 To UBound(sArray, 1))
  With CreateObject("Scripting.FileSystemObject")
    With .CreateTextFile(txtFile, True, False)
      For lR = 1 To UBound(sArray, 1)
        For lC = 1 To UBound(sArray, 2)
          Tmp(lC) = VIQRConvert(sArray(lR, lC), True)
        Next
        Arr(lR) = Join(Tmp, vbTab)
      Next
      .Write Join(Arr, vbCrLf)
      .Close
    End With
  End With
ExitSub:
End Sub
3> Code chính để chạy với dữ liệu là 1 vùng cụ thể:
PHP:
Sub Main()
  Dim txtFile As String, SrcRng As Range
  Set SrcRng = Selection
  txtFile = ThisWorkbook.Path & "\tmp.txt"
  Data2txtFile SrcRng, txtFile
End Sub
--------------------------
Mai này, khi lấy dữ liệu từ file txt đã lưu, ta hoàn toàn có thể convert VIQR sang Unicode trở lại (bằng cú pháp VIQRConvert(Text, False)...)
 

File đính kèm

  • Data2txtFile(EncodingVIQR).rar
    21.5 KB · Đọc: 87
Nhân tình cờ gặp chủ đề này em cũng thắc mắc tại sao khi Save as dạng text file thì nó ra hàng cột giống file excel và em đã kết hợp code anh NghiaPhuc và của bạn để giống dạng Save as nay xin chia sẽ các bạn, nói chung chi thêm hàm Chr(9) là ra...

PHP:
Sub CreatetxtFile()
 Dim Cuoi As Integer, i As Integer, a, b, FS, j As Long
    Dim FD As FileDialog, DDan As String, mystr
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    FD.Title = "Chon thu muc luu": FD.Show
    DDan = FD.SelectedItems.Item(1)
    Cuoi = [A1000].End(xlUp).Row
    Set FS = CreateObject("Scripting.FileSystemObject")
    Set a = FS.CreateTextFile(DDan & "\Data.txt", True, True)
    For i = 1 To Cuoi
        mystr = ""
        For j = 1 To 10
            mystr = mystr & Cells(i, j) & Chr(9)
        Next
        a.WriteLine mystr
    Next
    a.Close
End Sub
 

File đính kèm

  • DataText.7z
    69 bytes · Đọc: 47
xin chia sẽ các bạn, nói chung chi thêm hàm Chr(9) là ra...
Thay vì viết Chr(9), sửa thành vbTab cho dễ hiểu (đằng nào thì cũng là.. nó mà thôi)
- Trong txt file, nếu chữ cách chữ = vbTab thì mai này chuyển vào Excel, chữ và chữ sẽ nằm ở 2 cell theo chiều ngang
- Dòng cách dòng = vbCrLf thì mai này chuyển vào Excel, dòng của chuổi sẽ nằm tương ứng dòng trong Excel
(Bạn xem trong bài 12, tôi nối các cell cùng dòng bằng vbTab và dòng với dòng bằng vbCrLf đấy thôi)
 
Bạn nói sao lạ thế? Nếu Save Encoding =ANSI thì các ký tự Unicode bị biến thành dấu ? hết rồi, sao mà đọc được? Bạn đã thử chưa?
:D Em gõ ký tự không dấu
Mai này, khi lấy dữ liệu từ file txt đã lưu, ta hoàn toàn có thể convert VIQR sang Unicode trở lại (bằng cú pháp VIQRConvert(Text, False)...)
Cám ơn Anh rất nhiều, vượt quá mong đợi của em. Thực ra em chỉ cần lấy đủ các hàng trong cột là được, chữ khó đọc không sao vì em chỉ cần lấy dữ liệu có sẵn trong file excel để đưa vào cho phần mềm tính toán và copy kết quả trở lại chính file excel đó thôi.
 
Lần chỉnh sửa cuối:
Cám ơn Anh rất nhiều, vượt quá mong đợi của em. Thực ra em chỉ cần lấy đủ các hàng trong cột là được, chữ khó đọc không sao vì em chỉ cần lấy dữ liệu có sẵn trong file excel để đưa vào cho phần mềm tính toán và copy kết quả trở lại chính file excel đó thôi.
Ngộ quá hén, bản thân Excel là phần mềm dùng để tính toán, vậy thì cớ chi lại phải chạy lòng vòng: Nhập dữ liệu vào Excel --> Xuất ra Text --> Nhờ phần mềm khác tính toán trên Text --> Dán kết quả lại Excel.
Tưởng gì khó khăn chứ nếu thực sự yêu cầu của bạn chỉ có vậy thì bạn hãy đưa file Excel và quy tắc tính lên đây, mọi người sẽ giúp bạn công thức để Excel có thể tính ra kết quả mà khỏi phải chạy lòng vòng.
 
Ngộ quá hén, bản thân Excel là phần mềm dùng để tính toán, vậy thì cớ chi lại phải chạy lòng vòng: Nhập dữ liệu vào Excel --> Xuất ra Text --> Nhờ phần mềm khác tính toán trên Text --> Dán kết quả lại Excel.
Tưởng gì khó khăn chứ nếu thực sự yêu cầu của bạn chỉ có vậy thì bạn hãy đưa file Excel và quy tắc tính lên đây, mọi người sẽ giúp bạn công thức để Excel có thể tính ra kết quả mà khỏi phải chạy lòng vòng.
Cũng có thể phần mềm nào đó chỉ có chức năng Import từ txt file mà không lấy trực tiếp từ Excel được nên buộc data của chúng ta phải chuyển sang txt file trước
(Đó cũng là cái dở của 1 số phần mềm ---> Vì thiếu chức năng nên người dùng phải đi đường vòng)
 
Cũng có thể phần mềm nào đó chỉ có chức năng Import từ txt file mà không lấy trực tiếp từ Excel được nên buộc data của chúng ta phải chuyển sang txt file trước
(Đó cũng là cái dở của 1 số phần mềm ---> Vì thiếu chức năng nên người dùng phải đi đường vòng)
Tại đa số các chương trình lớn cũng phải lấy dữ liệu từ text file lên thôi anh, tại vì text file là cái cơ bản mà máy nào cũng có nên có khi người ta sợ upload từ excel sẽ bị lỗi nên upload từ text file là chắc ăn nhất.
 
Ngộ quá hén, bản thân Excel là phần mềm dùng để tính toán, vậy thì cớ chi lại phải chạy lòng vòng: Nhập dữ liệu vào Excel --> Xuất ra Text --> Nhờ phần mềm khác tính toán trên Text --> Dán kết quả lại Excel.
Tưởng gì khó khăn chứ nếu thực sự yêu cầu của bạn chỉ có vậy thì bạn hãy đưa file Excel và quy tắc tính lên đây, mọi người sẽ giúp bạn công thức để Excel có thể tính ra kết quả mà khỏi phải chạy lòng vòng.

Thực ra dữ liệu trong file excel chỉ là một phần. Phần dữ liệu khác lại là định dạng khác và tạo bởi phần mềm nên em mới phải làm vậy.
 
Tôi có giải pháp thế này, không biết có dùng được không
- Đầu tiên chuyển mà Text sang dạng VIQR (dùng 1 hàm chuyển mã)
- Lưu Text vào txt file ---> Chuổi với mã VIQR sẽ có thể lưu với Encoding = ANSI và phần mềm nào cũng đọc được
- Mai này khi xuất ra, có thể convert VIQR sang Unicode rất dễ dàng ---> Có thể dùng Unikey hoặc hàm tự tạo

Anh có thể giúp em sửa code sao cho sau khi cover và xuất ra file text thì bỏ hết dấu đi ( chỉ còn chữ không dấu) được không ạ? em mò mãi mà không được.
 
Web KT
Back
Top Bottom