Как я могу изменить каталог в этом коде VBA? VBA «Excel в TXT или CSV»

0

Я действительно хочу изменить каталог этого кода, Application.ActiveWorkbook.Pathно я не знаю, где его разместить.

Public Sub CharacterSV()
    Const DELIMITER As String = "|"
    Dim myRecord As Range
    Dim myField As Range
    Dim nFileNum As Long
    Dim sOut As String

    nFileNum = FreeFile
    Open ActiveWorkbook.Name & ".txt" For Output As #nFileNum
    For Each myRecord In Range("A1:A" & _
                Range("A" & Rows.Count).End(xlUp).Row)
        With myRecord
            For Each myField In Range(.Cells, _
                    Cells(.Row, Columns.Count).End(xlToLeft))
                sOut = sOut & DELIMITER & myField.Text
            Next myField
            Print #nFileNum, Mid(sOut, 2)
            sOut = Empty
        End With
    Next myRecord
    Close #nFileNum
End Sub

Я пытался понять это, и действительно хочу изучать VBA, но я не мог заставить его работать.

Заранее спасибо!

Dubblej
источник

Ответы:

0

Добавьте это к своему коду:
Dim fname as string fname = "c:\documents and settings\desktop\" Open fname & ActiveWorkbook.Name & ".txt" For Output As #nFileNum

Замените рабочий стол своим каталогом, и open откроет новый файл в вашем каталоге, позаботьтесь о том, чтобы написать реальный и правильный путь в fname.


источник
0

Спасибо за вдохновение.

Я просто прошел мимо другого кода, который сделал его более простым. Потому что я просто хотел добавить файл в каталог, из которого я работаю, но хотел сделать VBA динамическим.

Так что я использовал ActiveWorkbook.FullNameвместо ActiveWorkbook.Name. Я также добавил название из листа в" - " & ActiveSheet.Name &

Это окончательный код (также добавлено название листа):

Public Sub Worksheet_naar_TXT_Pipe_delimiter()
    Const DELIMITER As String = "|"
    Dim myRecord As Range
    Dim myField As Range
    Dim nFileNum As Long
    Dim sOut As String

    nFileNum = FreeFile
    Open ActiveWorkbook.FullName & " - " & ActiveSheet.Name & ".txt" For Output As #nFileNum
    For Each myRecord In Range("A1:A" & _
                Range("A" & Rows.Count).End(xlUp).Row)
        With myRecord
            For Each myField In Range(.Cells, _
                    Cells(.Row, Columns.Count).End(xlToLeft))
                sOut = sOut & DELIMITER & myField.Text
            Next myField
            Print #nFileNum, Mid(sOut, 2)
            sOut = Empty
        End With
    Next myRecord
    Close #nFileNum
End Sub

Спасибо за ваш ответ, это привело меня к идее!

Dubblej
источник
Уместно выразить мнение и отметить ответ, который помог вам как «правильный», чтобы поблагодарить ответчика за помощь.
Raystafarian