Excel、VBA、宏、文件-打开或创建、对话框

Excel、VBA、宏、文件-打开或创建、对话框,excel,vba,file,output,Excel,Vba,File,Output,我正在使用VBA在MS excel中编写宏。我需要打开或创建一个要写入的文件。 该文件可能具有不同的扩展名(即cal),但在内部仅包含文本 我已经查看了许多通过显式说明新文件的路径来创建文件的示例(我找到了一个): 其他示例打开已存在的文件 我想有一个弹出/对话框,允许用户“打开现有文件”或“创建新文件”。我想这是可能的 我使用字符串/路径和对象使用了应用程序.FileDialog(…)函数,但迄今为止没有太大成功。使用应用程序.FileDialog(…)您的用户应该能够像在Windows资源管

我正在使用VBA在MS excel中编写宏。我需要打开或创建一个要写入的文件。 该文件可能具有不同的扩展名(即cal),但在内部仅包含文本

我已经查看了许多通过显式说明新文件的路径来创建文件的示例(我找到了一个):

其他示例打开已存在的文件

我想有一个弹出/对话框,允许用户“打开现有文件”或“创建新文件”。我想这是可能的


我使用字符串/路径和对象使用了
应用程序.FileDialog(…)
函数,但迄今为止没有太大成功。

使用
应用程序.FileDialog(…)
您的用户应该能够像在Windows资源管理器中一样创建新的文本文件(通过右键单击并选择new->text file),然后,他们可以选择要将数据输出到的文件

下面的
SelectFile(…)
函数返回所选文件的路径(如果未选择文件,则返回空字符串)。按原样使用此函数,用户只能选择一个文件,但考虑到上下文,我希望这不是问题

Public Sub SelectOrCreateFile()
    Dim strFileName As String
    Dim iFileNum As Integer

    iFileNum = FreeFile
    strFileName = SelectFile

    If strFileName <> "" Then
        Open strFileName For Output As #iFileNum
        '### WRITE YOUR DATA ###
        Close #iFileNum
    End If
End Sub

'Returns File Path of file selected with file selection dialog
Public Function SelectFile(Optional DefaultPath As String = "", _
                           Optional FileType As String = "All Files", _
                           Optional FileExtension As String = "*.*") As String
    Dim F As Object

    Set F = Application.FileDialog(msoFileDialogFilePicker)

    'Set up FileDialog properties
    F.Filters.Clear
    F.Filters.Add FileType, FileExtension
    F.AllowMultiSelect = False
    F.Title = "Select File"
    F.ButtonName = "Select"
    If DefaultPath <> "" Then F.InitialFileName = DefaultPath

    'FileDialog.Show returns False if the user cancels
    If F.show Then
        SelectFile = F.SelectedItems(1)
    Else
        MsgBox "No File Selected", vbInformation, "Cancelled"
        SelectFile = ""
    End If

    Set F = Nothing
End Function
Public子选择器创建文件()
将strFileName设置为字符串
作为整数的Dim iFileNum
iFileNum=FreeFile
strFileName=SelectFile
如果strFileName为“”,则
打开strFileName以作为#iFileNum输出
写下你的数据###
关闭#iFileNum
如果结束
端接头
'返回使用“文件选择”对话框选择的文件的文件路径
公共函数SelectFile(可选默认路径为String=“”_
可选文件类型为String=“所有文件”_
可选文件扩展名为字符串=“**”)为字符串
将F作为对象
Set F=Application.FileDialog(msoFileDialogFilePicker)
'设置文件对话框属性
清除过滤器
F.Filters.Add文件类型、文件扩展名
F.AllowMultiSelect=False
F.Title=“选择文件”
F.ButtonName=“选择”
如果为DefaultPath“”,则F.InitialFileName=DefaultPath
'FileDialog.Show如果用户取消,则返回False
如果F.show那么
SelectFile=F.SelectedItems(1)
其他的
MsgBox“未选择文件”,vbInformation,“已取消”
SelectFile=“”
如果结束
设置F=无
端函数

希望这有帮助

展示您的尝试,描述导致的问题,并提供帮助。另请阅读:,特别强调“标题”部分。
Public Sub SelectOrCreateFile()
    Dim strFileName As String
    Dim iFileNum As Integer

    iFileNum = FreeFile
    strFileName = SelectFile

    If strFileName <> "" Then
        Open strFileName For Output As #iFileNum
        '### WRITE YOUR DATA ###
        Close #iFileNum
    End If
End Sub

'Returns File Path of file selected with file selection dialog
Public Function SelectFile(Optional DefaultPath As String = "", _
                           Optional FileType As String = "All Files", _
                           Optional FileExtension As String = "*.*") As String
    Dim F As Object

    Set F = Application.FileDialog(msoFileDialogFilePicker)

    'Set up FileDialog properties
    F.Filters.Clear
    F.Filters.Add FileType, FileExtension
    F.AllowMultiSelect = False
    F.Title = "Select File"
    F.ButtonName = "Select"
    If DefaultPath <> "" Then F.InitialFileName = DefaultPath

    'FileDialog.Show returns False if the user cancels
    If F.show Then
        SelectFile = F.SelectedItems(1)
    Else
        MsgBox "No File Selected", vbInformation, "Cancelled"
        SelectFile = ""
    End If

    Set F = Nothing
End Function