Я действительно хочу изменить каталог этого кода в 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, но я не мог заставить его работать.

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

2 ответа2

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .