Попробуйте, пожалуйста. Он сохраняет ваш код таким, какой он есть, и определяет путь к папке до Open ... for Output
sequence:
Option Explicit
Sub ascii_datei_exportieren()
Dim fileName As String, folderPath As String, zeile As Long
Dim text As String, spalte As Long
folderPath = GetFolderPath(ThisWorkbook.FullName) ' you can ommit the parameter
fileName = "text.txt"
Open folderPath & "\" & fileName For Output As 1
For zeile = 2 To 4
text = ""
For spalte = 2 To 3
text = text & CVar(Cells(zeile, spalte))
If spalte < 4 Then text = text & "|"
Next
Print #1, text
Next
Close #1
End Sub
Private Function GetFolderPath(Optional strPath As String) As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
If strPath <> "" Then .InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolderPath = sItem
Set fldr = Nothing
End Function
Как правило, лучше использовать Option Explicit
поверх ваш модуль и правильно измерять все ваши переменные. Это избавит вас от многих потенциальных проблем в будущем ...
Или вы можете использовать следующий код для диалога SaveAs (для текстовых файлов):
Sub testDialogSaveAsText()
Dim fileSaveName As String, fileName As String
fileName = "text.txt"
fileSaveName = Application.GetSaveAsFilename(InitialFileName:=fileName, fileFilter:="Text Files (*.txt), *.txt")
If fileSaveName <> "" Then
MsgBox "Saved as " & fileSaveName
End If
End Sub