ฉันต้องการสร้าง.txt file
แต่ละค่าในcolumn A
ประกอบด้วยค่าที่สอดคล้องกันในcolumns B and C
ฉันต้องการสร้าง.txt file
แต่ละค่าในcolumn A
ประกอบด้วยค่าที่สอดคล้องกันในcolumns B and C
คำตอบ:
ยิ่งฉันมองดูสิ่งนี้มากเท่าไหร่ฉันก็ยิ่งพบว่ามันเป็นมาโครตัวเล็ก ๆ ที่มีประโยชน์ เพื่อป้องกันไม่ให้มันประมวลผลแถวที่ว่างเปล่า (และล็อคค่า Excel ของฉัน) ฉันเขียนโค้ดใหม่เพื่อสร้างไฟล์ในขณะที่มีข้อมูลเท่านั้น นอกจากนี้การใช้งานprint
แทนที่จะwrite
สร้างข้อความโดยไม่มีการเสนอราคา นี่คือสิ่งที่ฉันเคยทำในสิ่งเดียวกัน
Sub CreateFile()
Do While Not IsEmpty(ActiveCell.Offset(0, 1))
MyFile = ActiveCell.Value & ".txt"
'set and open file for output
fnum = FreeFile()
Open MyFile For Output As fnum
'use Print when you want the string without quotation marks
Print #fnum, ActiveCell.Offset(0, 1) & " " & ActiveCell.Offset(0, 2)
Close #fnum
ActiveCell.Offset(1, 0).Select
Loop
End Sub
รู้สึกอิสระที่จะใช้และแก้ไขตามที่คุณต้องการ ขอบคุณสำหรับความคิดที่ดี
มาโครนี้จะรับค่าแต่ละค่าcolumn A
สร้าง.txt document
ในชื่อของค่าและแทรกข้อมูลที่เกี่ยวข้องcolumns B and C
Sub CreateTxt()
'
For Each ce In Range("A1:A" & Cells(Rows.Count, 1).End(xlDown).Row)
Open ce & ".txt" For Output As #1
Write #1, ce.Offset(0, 1) & " " & ce.Offset(0, 2)
Close #1
Next ce
End Sub
สี่ปีต่อมาฉันตัดสินใจกลับมาที่คำถาม SU แรกของฉันนั่นเป็นจุดเริ่มต้นที่ VBA ของฉัน สิ่งนี้ดีกว่า แต่จะเขียนทับไฟล์ใด ๆ ที่มีอยู่แล้ว
Option Explicit
Sub CreateFileEachLine()
Dim myPathTo As String
myPathTo = "C:\Users\path\to\"
Dim myFileSystemObject As Object
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
Dim fileOut As Object
Dim myFileName As String
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long
For i = 1 To lastRow
If Not IsEmpty(Cells(i, 1)) Then
myFileName = myPathTo & Cells(i, 1) & ".txt"
Set fileOut = myFileSystemObject.CreateTextFile(myFileName)
fileOut.write Cells(i, 2) & " " & Cells(i, 3)
fileOut.Close
End If
Next
Set myFileSystemObject = Nothing
Set fileOut = Nothing
End Sub
xlUp
ด้านบนเพื่อหลีกเลี่ยงการมีแผ่นเปล่า ฉันเปิดกว้างสำหรับโซลูชันที่หรูหรากว่า
For Each ce In Range("A1:A" & Cells(Rows.Count, 1).End(xlDown).Row)
ส่งคืนมากกว่าหนึ่งล้านแถวแม้ว่าจะมีเพียงสองแถวเท่านั้น