Как получить диалог сохранения после выбора txt для вывода - PullRequest
1 голос
/ 13 февраля 2020

Итак, это мой текущий код, который в основном просто берет значения листа Excel и помещает его в файл .txt. Он просто открывает / создает текстовый файл в \ temp, а затем сохраняет его там. Я хотел бы, чтобы после активации макроса появилось диалоговое окно «Сохранить как», в котором я мог бы сохранить текстовый файл, куда бы я ни захотел. Заранее спасибо!

Sub ascii_datei_exportieren()


Open "c:\temp\text.txt" 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

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Вы можете использовать Метод Application.GetSaveAsFilename (Excel)

Спасибо, Сиддхарт, я уже просматривал эту ссылку перед публикацией вопроса. Я просто не знаю, как поместить это в мой код, чтобы он работал. - dani2507 16 минут go

На самом деле это довольно просто. Это то, что вы пытаетесь ( UNTESTED )?

Option Explicit

Sub Sample()
    Dim fileSaveName As Variant
    Dim zeile As Integer, spalte As Long
    Dim sText As String

    fileSaveName = Application.GetSaveAsFilename(fileFilter:="sText Files (*.txt), *.txt")

    If fileSaveName <> False Then
        Open fileSaveName For Output As 1

        For zeile = 2 To 4
            sText = ""
            For spalte = 2 To 3
                sText = sText & CVar(Cells(zeile, spalte))
                If spalte < 4 Then sText = sText & "|"
            Next
            Print #1, sText
        Next

        Close #1
    End If
End Sub

СОВЕТ : избегайте использования Text в качестве переменной.

0 голосов
/ 13 февраля 2020

Попробуйте, пожалуйста. Он сохраняет ваш код таким, какой он есть, и определяет путь к папке до 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...