Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel宏|将两个宏相加_Excel_Vba - Fatal编程技术网

Excel宏|将两个宏相加

Excel宏|将两个宏相加,excel,vba,Excel,Vba,完成这个新的,我和尝试添加两个宏作为一个。一个将Excel导出到CVS并具有用于保存文件名的对话框和另一个文件对话框文件夹选择器的对话框。我们将不胜感激 Sub ExportAsCSV() Dim MyFileName As String Dim CurrentWB As Workbook, TempWB As Workbook Set CurrentWB = ActiveWorkbook ActiveWorkbook.ActiveSheet.UsedRan

完成这个新的,我和尝试添加两个宏作为一个。一个将Excel导出到CVS并具有用于保存文件名的对话框和另一个文件对话框文件夹选择器的对话框。我们将不胜感激

 Sub ExportAsCSV()

    Dim MyFileName As String
    Dim CurrentWB As Workbook, TempWB As Workbook

    Set CurrentWB = ActiveWorkbook
    ActiveWorkbook.ActiveSheet.UsedRange.Copy

    Set TempWB = Application.Workbooks.Add(1)
    With TempWB.Sheets(1).Range("A1")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteFormats
    End With

    MyFileName = CurrentWB.Path & "\" & Left(CurrentWB.Name, Len(CurrentWB.Name) - 5) & ".csv"

    Application.DisplayAlerts = False
    TempWB.SaveAs fileName:=InputBox("Enter file name here, : ", , xFileName), FileFormat:=xlCSV, CreateBackup:=False, Local:=True
    TempWB.Close SaveChanges:=False
    Application.DisplayAlerts = True
End Sub

'''''''''''''''
'Plus file dialog 
'''''''''''''''''''''''

Sub SelectFolder()
    Dim diaFolder As FileDialog

    Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
    diaFolder.AllowMultiSelect = False
    diaFolder.Show
    ActiveSheet.Copy
    ActiveWorkbook.SaveAs fileName:= _
    diaFolder & ActiveSheet.[d2] & ".xlsx", FileFormat:= _
    xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False


    Set diaFolder = Nothing
End Sub

由于你提出的结构,你的问题有点尴尬。通常,名称由函数提供,并由调用过程执行。尝试在项目中实现此结构。下面是函数

Private Function FolderName() As String

    Dim FilePicker      As FileDialog

    Set FilePicker = Application.FileDialog(msoFileDialogFolderPicker)
    With FilePicker
        .Title = "Select a target folder"
        .AllowMultiSelect = False
        .InitialFileName = Environ("UserProfile") & "\Documents\"
        .ButtonName = "Confirm"
        If .Show Then
            FolderName = .SelectedItems(1)
        End If
    End With
End Function
这是应该以某种方式进入调用过程的部分

Dim MyFolder As String

MyFolder = FolderName
If Len(MyFolder) Then MsgBox MyFolder

当然,您的代码不会使用MsgBox,而是使用选定的文件名来实际保存工作簿—SelectFolder过程中包含的代码。关键是,如果用户按下“取消”,则不会尝试保存文件。在这种情况下,函数返回一个空字符串,调用过程通过测试
Len(MyFolder)

识别该空字符串。我想您是在问如何传递变量。四处搜索,了解如何创建用户定义的函数。例如,您可以将中的
SelectFolder
更改为返回字符串(文件夹路径)的函数,然后从中保存。将它们添加到一起后,预期的行为是什么?