Đóng và lưu tên file notepad sau khi copy dữ liệu từ excel sang

Liên hệ QC

Đình Phán

Thành viên thường trực
Tham gia
23/11/10
Bài viết
232
Được thích
68
Giới tính
Nam
Nghề nghiệp
kt
Chào các ACE GPE


Em có file dữ liệu cần copy sang file dạng *txt
Nếu chuyển bằng cách SAVE AS sheets sang đuôi *txt thì em làm được, nhưng để kích hoạt NotePad và dán dữ liệu sang sau đó đóng file NotePad và lưu tên thì em không có cách nào xử lý được.

Khi chuyển từ Sheet sang file mới rồi lưu dạng *txt thì import vào phần mềm báo lỗi số cột, vì vậy bắt buộc phải copy sang Notepad. Về việc này em có sưu tầm trên mạng 1 đoạn code, nhưng để lưu tên file *txt và đóng lại thì vẫn không đáp ứng được.

Mong các ACE giúp đỡ.

Em cảm ơn!

PHP:
Sub ExportToNotePad()

Dim WB As Workbook
Dim FileName As String
Dim WS As Worksheet
Dim LR As Integer




Set WB = ThisWorkbook
FileName = WB.Sheets("Ventas").Range("A2").Value
Application.ScreenUpdating = False


WB.Sheets("Ventas").Activate
Range("A12").Select
LR = WB.Sheets("Ventas").Range(Selection, Selection.End(xlDown)).Count + 1


WB.Sheets("Sheet1").Activate
WB.Sheets("Sheet1").Range("A3:AD1048576").ClearContents
WB.Sheets("Sheet1").Range("A2:AD2").Select
Selection.Copy
WB.Sheets("Sheet1").Range(Cells(3, 1), Cells(LR, 30)).PasteSpecial


For Each WS In WB.Worksheets
    If WS.Name = "Sheet1" Then
        WS.Activate
        Range([AD2], [AD2].End(xlDown)).Select
        Selection.Copy
        Shell "notepad.exe", vbNormalFocus
    With Application
        SendKeys "^V"
        SendKeys "^S"
        SendKeys "{ENTER}"
        SendKeys "LE20543254798" & FileName
        SendKeys "%fx"
        VBA.AppActivate .Caption
    End With
        'With NWB
            '.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            '.Application.CutCopyMode = False
            '.SaveAs Filename:="C:\Users\phannd3\Desktop\LE20543254798.txt", _
                FileFormat:=xlUnicodeText, CreateBackup:=False
            '.Close savechanges:=True
        'End With
    End If
Next WS
WB.Sheets("Ventas").Activate
Application.ScreenUpdating = True
MsgBox "Export Successful!"
End Sub
 

File đính kèm

  • Test.xlsm
    572.6 KB · Đọc: 30
thiết nghĩ sendkey chỉ là giải pháp sau cùng gọi là "bí quá làm liều" thôi chứ xuất nội dung ra file .txt hình như chả ai làm thế . bạn thử tìm trong diễn đàn các bài viết tương tự xem sao
 
Upvote 0
thiết nghĩ sendkey chỉ là giải pháp sau cùng gọi là "bí quá làm liều" thôi chứ xuất nội dung ra file .txt hình như chả ai làm thế . bạn thử tìm trong diễn đàn các bài viết tương tự xem sao

Chào bạn,

Như mình đã nói ở trên, nếu kết xuất từ 01 Sheets ra *txt thì đơn giản nhưng import vào phần mềm vì ko nhận, Phần mềm báo lỗi số cột định dạng. (Điều kiện chỉ có 01 cột duy nhất).
Vì vậy cần phải kích hoạt Notepad và paste vào đó.
Về các bài viết cuả các diễn đàn khác, mình tìm mấy ngày nay mà ko có. Các nào cũng phải tự điền tên và bấm SAVE, CLOSE thủ công.

Mong các cao thủ trợ giúp.
 
Upvote 0
mình ko hiểu lắm ý bạn về số cột gì đó ...
nhưng bạn có thể tưởng tượng :
cái cần tạo : 1 file text
và như câu nói kinh điển của các vị trên GPE : cái gì làm bằng tay thủ công thì code cũng làm dc
dưới đây là vài dòng ghi dữ liệu ra file text . nếu ghi sai ý bạn thì bạn cho ý kiến lại

Mã:
Public Sub hello()


Dim r As Long
Dim lr As Long
Dim c As Integer
Dim lc As Integer
Dim i As Long
r = firstRow
If r > 0 Then
    Dim fsT As Object
    Set fsT = CreateObject("ADODB.Stream")
    fsT.Type = 2 'string data type
    fsT.Charset = "utf-8"
    fsT.Open
    
    lr = Sheet2.Range("d" & r).End(xlDown).Row
    lc = Sheet2.UsedRange.SpecialCells(xlCellTypeLastCell).Column
    Dim str As String
    For i = r To lr Step 1
        str = ""
        For c = 1 To lc Step 1
            str = str & Sheet2.cells(i, c) & "|"
        Next
        str = str & vbNewLine
        fsT.writetext str
    Next
    fsT.SaveToFile ThisWorkbook.Path & "\\newtext.txt", 2
End If


End Sub

Mã:
Private Function firstRow() As Long


Dim cells As Variant
Dim i As Integer
firstRow = 0
cells = Sheet2.Range("d1:d1000").Value
For i = 1 To 1000 Step 1
    If Trim(cells(i, 1)) <> "" And IsNumeric(cells(i, 1)) Then
        firstRow = i
        Exit For
    End If
Next
End Function
 
Upvote 0
Chào các ACE GPE


Em có file dữ liệu cần copy sang file dạng *txt
Nếu chuyển bằng cách SAVE AS sheets sang đuôi *txt thì em làm được, nhưng để kích hoạt NotePad và dán dữ liệu sang sau đó đóng file NotePad và lưu tên thì em không có cách nào xử lý được.

Khi chuyển từ Sheet sang file mới rồi lưu dạng *txt thì import vào phần mềm báo lỗi số cột, vì vậy bắt buộc phải copy sang Notepad. Về việc này em có sưu tầm trên mạng 1 đoạn code, nhưng để lưu tên file *txt và đóng lại thì vẫn không đáp ứng được.

Mong các ACE giúp đỡ.

Thế này sẽ đơn giản hơn: Gửi lên file dữ liệu Excel + file TXT kết quả. Người ta nhìn vào kết quả sẽ đoán được bạn muốn làm gì (xem code phiền lắm)
 
Upvote 0
Chào các ACE GPE

Em có file dữ liệu cần copy sang file dạng *txt
Nếu chuyển bằng cách SAVE AS sheets sang đuôi *txt thì em làm được, nhưng để kích hoạt NotePad và dán dữ liệu sang sau đó đóng file NotePad và lưu tên thì em không có cách nào xử lý được.

Khi chuyển từ Sheet sang file mới rồi lưu dạng *txt thì import vào phần mềm báo lỗi số cột, vì vậy bắt buộc phải copy sang Notepad. Về việc này em có sưu tầm trên mạng 1 đoạn code, nhưng để lưu tên file *txt và đóng lại thì vẫn không đáp ứng được.

Mong các ACE giúp đỡ.

Em cảm ơn!

[/PHP]

Nếu theo code bạn post lên thì mình đoán là bạn đang làm mọi việc rắc rối thêm lên. (1)*
Mình đã xem qua file của bạn, mình lại đoán tiếp là dữ liệu chỉ thực sự bắt đầu từ dòng số 12 và từ dòng 1 và đến 11 sẽ không thay đổi hoặc không thay đổi nhiều. (2)

Giả sử (1) & (2) là đúng thì bạn chỉ việc export/import dữ liệu kể từ dòng 12 trở về sau thôi. Nếu không thì mình hiểu nhầm, bạn có thể dừng đọc câu trả lời này.

Bạn muốn lưu dữ liệu dưới dạng file *.txt - thì có nhiều cách để lưu, 2 cách thường được sử dụng là:
1. lưu dưới dạng các giá trị ngăn cách nhau bằng dấu phẩy (CSV - comma separated values)
2. lưu dưới dạng các giá trị ngăn cách nhau bằng dấu tab (TSV - tab separated values)

Vì bạn không up file txt kết quả lên nên mình đoán là nhiều người lười chưa viết code vội, mình cũng vậy. Mình sẽ đoán tiếp là bạn sẽ upload file txt lên.
Hẹn gặp lại sớm :)


(1)*: Đoạn code: mở notepad ra, sử dụng sendkeys để dán dữ liệu sau đó lại đổi tên file rồi tiếp sau đó làm vài thứ khác ... Tại sao không lấy dữ liệu ra, tạo 1 file txt với tên bạn muốn và ghi dữ liệu vào.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom