Excel - สร้างไฟล์ข้อความที่ตั้งชื่อตามเซลล์ที่มีข้อมูลเซลล์อื่น


2

ฉันต้องการสร้าง.txt fileแต่ละค่าในcolumn Aประกอบด้วยค่าที่สอดคล้องกันในcolumns B and C

คำตอบ:


1

ยิ่งฉันมองดูสิ่งนี้มากเท่าไหร่ฉันก็ยิ่งพบว่ามันเป็นมาโครตัวเล็ก ๆ ที่มีประโยชน์ เพื่อป้องกันไม่ให้มันประมวลผลแถวที่ว่างเปล่า (และล็อคค่า 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

รู้สึกอิสระที่จะใช้และแก้ไขตามที่คุณต้องการ ขอบคุณสำหรับความคิดที่ดี


0

มาโครนี้จะรับค่าแต่ละค่า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

ความคิดที่ดี. รหัสนี้สร้างไฟล์ข้อความสำหรับข้อมูลที่ฉันมีในสองแถว แต่จากนั้นทำให้ Excel หยุดการตอบสนอง บรรทัดFor Each ce In Range("A1:A" & Cells(Rows.Count, 1).End(xlDown).Row) ส่งคืนมากกว่าหนึ่งล้านแถวแม้ว่าจะมีเพียงสองแถวเท่านั้น
CharlieRB

นั่นไม่ได้เกิดขึ้นกับฉัน แต่ฉันคิดว่าฉันเลือกแล้วใช้แป้นพิมพ์ลัดเพื่อเรียกใช้แมโคร เป็นการดีที่ฉันควรจะอยู่ในช่วงของฉัน แต่เมื่อเร็ว ๆ นี้มันแตกต่างกันมากเกินไป
Raystafarian

นอกจากนี้คุณสามารถให้มันเริ่มต้นที่ด้านล่างและxlUpด้านบนเพื่อหลีกเลี่ยงการมีแผ่นเปล่า ฉันเปิดกว้างสำหรับโซลูชันที่หรูหรากว่า
Raystafarian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.