从VBA子系统中调用函数值
要求用户确定要保存某些文件的文件夹,然后将新工作簿保存到该文件夹。Sub调用将此文件夹路径设置为JobFolder的函数。从sub调用JobFolder文件夹路径时,sub会再次运行该函数。只需要JobFolder的值。多谢各位从VBA子系统中调用函数值,vba,excel,Vba,Excel,要求用户确定要保存某些文件的文件夹,然后将新工作簿保存到该文件夹。Sub调用将此文件夹路径设置为JobFolder的函数。从sub调用JobFolder文件夹路径时,sub会再次运行该函数。只需要JobFolder的值。多谢各位 Sub ExportJobFiles() 'Ask user to set job folder Dim JobFolder As String JobFolder = GetFolder() 'Ask user to set suffix f
Sub ExportJobFiles()
'Ask user to set job folder
Dim JobFolder As String
JobFolder = GetFolder()
'Ask user to set suffix for file names
Dim FileNameSuffix As Variant
Dim Default As String
Default = Worksheets("Summary").Range("E2").Value
FileNameSuffix = InputBox("Input suffix for job files", , Default)
'Creates job files in job folder
Dim SummaryFileName As String
Dim AFileName As String
Dim BFileName As String
Dim CFileName As String
SummaryFileName = JobFolder & "/Summary_" & FileNameSuffix & ".xls"
AFileName = JobFolder & "/A_" & FileNameSuffix & ".xls"
BFileName = JobFolder & "/B_" & FileNameSuffix & ".xls"
CFileName = JobFolder & "/C_" & FileNameSuffix & ".xls"
Workbooks.Add.SaveAs FileName:=SummaryFileName
Workbooks.Add.SaveAs FileName:=AFileName
Workbooks.Add.SaveAs FileName:=BFileName
Workbooks.Add.SaveAs FileName:=CFileName
End Sub
Function GetFolder() As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = ""
.Show
GetFolder = .SelectedItems(1)
End With
End Function
这就是使用过时的显式调用语法调用函数并丢弃其返回值
基本上,这条线没有任何用处
相反,请声明一个局部变量:
Dim folder As String
并为其分配函数的返回值:
folder = JobFolder
同样,你也应该避免跳入或跳出方块
如果With块是这样写的:
With Application.FileDialog(msoFileDialogFolderPicker)
'...
End With
然后跳出它将使With块持有的对象引用处于不确定状态。代码中没有出现这种情况的唯一原因是,您已经在with块之外引用了with块变量,并且正在手动销毁它。。。如果让With块处理引用,则不必使用该选项。将返回值存储到变量中并使用该变量。不应使用GoTo跳出With块。只需调用JobFolder一次并将其存储在变量中。
With Application.FileDialog(msoFileDialogFolderPicker)
'...
End With