Excel 我可以指定包含工作簿名称的字符串值作为参数吗?
总之,工作簿的名称每周更改两次,我没有考虑另一种可选的自动更改方式,而是决定显示一个输入框,在其中键入当前工作簿的名称,然后将其分配给:Excel 我可以指定包含工作簿名称的字符串值作为参数吗?,excel,vba,Excel,Vba,总之,工作簿的名称每周更改两次,我没有考虑另一种可选的自动更改方式,而是决定显示一个输入框,在其中键入当前工作簿的名称,然后将其分配给: Public fileName As String fileName = InputBox("Type here the current workbook's name: ") 错误9:下标超出范围 从技术上讲,这并不完全是您所要求的,但让用户在其中选择文件是一种更好的编程实践 操作系统接口,而不是让他们键入文件名, 最终达到了同样的目标 我已经创建了
Public fileName As String
fileName = InputBox("Type here the current workbook's name: ")
错误9:下标超出范围 从技术上讲,这并不完全是您所要求的,但让用户在其中选择文件是一种更好的编程实践 操作系统接口,而不是让他们键入文件名, 最终达到了同样的目标 我已经创建了一个自定义函数,用于通过
FileDialog
对象拾取文件。作为可选参数,您可以在format
参数中强制执行特定的文件类型
get_文件([format],[fullpath])
使用强制的.xlsx
[format]
打开带有[fullpath]
的工作簿(True
)以获得正确链接(.xlsx
[format]
),并打印保存在wb
变量中的工作簿
对象的名称
属性
从技术上讲,这并不完全是您所要求的,但让用户在其中选择文件是一种更好的编程实践
操作系统接口,而不是让他们键入文件名,
最终达到了同样的目标
我已经创建了一个自定义函数,用于通过FileDialog
对象拾取文件。作为可选参数,您可以在format
参数中强制执行特定的文件类型
get_文件([format],[fullpath])
使用强制的.xlsx
[format]
打开带有[fullpath]
的工作簿(True
)以获得正确链接(.xlsx
[format]
),并打印保存在wb
变量中的工作簿
对象的名称
属性
您要查找的工作簿是否已打开?如果没有,那么您将得到该错误(并且需要使用Workbooks.Open方法)。如果工作簿已经打开,则手动输入工作簿名称的错误很可能是罪魁祸首。一般来说,您应该完全避免这种情况,我建议您显示“打开文件”对话框,以便用户可以选择他们感兴趣的文件,这样就不会出现错误。更好的是,如果你能预测工作簿的名称(因为它以一种已知的方式变化),最好是生成/计算名称。它没有打开。事实上,我现在觉得很愚蠢,谢谢你的建议。我使用宏还不到一个月,所以还有很多东西要学。您正在使用的工作簿是包含代码的工作簿吗?如果是这样的话,你可以只做<代码>设置WK=这个工作簿,避免完全需要一个名字。如果你需要打开工作表,考虑使用<代码> Apple。FieldLax(MSOFLILDAcLoMePrimeKER),而不是要求用户键入文件名(它们将不可避免地出错一半)。@DavidN这不是很不幸你要找的工作簿已经打开了吗?如果没有,那么您将得到该错误(并且需要使用Workbooks.Open方法)。如果工作簿已经打开,则手动输入工作簿名称的错误很可能是罪魁祸首。一般来说,您应该完全避免这种情况,我建议您显示“打开文件”对话框,以便用户可以选择他们感兴趣的文件,这样就不会出现错误。更好的是,如果你能预测工作簿的名称(因为它以一种已知的方式变化),最好是生成/计算名称。它没有打开。事实上,我现在觉得很愚蠢,谢谢你的建议。我使用宏还不到一个月,所以还有很多东西要学。您正在使用的工作簿是包含代码的工作簿吗?如果是这样的话,你可以只做<代码>设置WK=这个工作簿,避免完全需要一个名字。如果你需要打开工作表,考虑使用<代码> Apple。FieldLax(MSOFLILDAcLoMePrimeKER),而不是要求用户键入文件名(它们将不可避免地出错一半)。@戴维顿,这并不不幸
Dim ext As String
ext = ".xlsb"
Set wk = Excel.Workbooks(fileName & ext)
' Returns a file name of a selected file via the .FileDialog object
' Arguments:
' [format] : Optional argument, if left empty any file format can be selected, _
otherwise enforce what [format] was put in to be selected
' [fullpath] : Optional argument, if left empty will only return FileName.xxx, _
otherwise will return full path (eg. D:\MyDir\Book.xlsx")
' Returns: A <String> with the selected filename.
Private Function get_file(Optional ByVal format As String = "nomatch", _
Optional ByVal fullpath As Boolean = False) As String
Dim fs As FileDialog: Set fs = Application.FileDialog(msoFileDialogFilePicker)
Dim goodmatch As Boolean: goodmatch = False
Do Until goodmatch = True
With fs
If .Show <> -1 Then
.Title = "Choose a Workbook to work with"
.AllowMultiSelect = False
.InitialFileName = Application.DefaultFilePath
End If
If format = "nomatch" Then
goodmatch = True
Else
format = Replace(format, ".", "")
If Mid(.SelectedItems(1), InStrRev(.SelectedItems(1), ".") + 1) <> format Then
MsgBox "Please select a " & format & " file format", vbCritical
Else
goodmatch = True
End If
End If
End With
Loop
If fullpath = True Then
get_file = fs.SelectedItems(1)
Else
get_file = Mid(fs.SelectedItems(1), InStrRev(fs.SelectedItems(1), "\") + 1)
End If
End Function
Private Sub test()
Dim wb As Workbook: Set wb = Workbooks.Open(get_file(".xlsx", fullpath:= True))
' saves a workbook of only .xlsx type from what user selected into wb variable
Debug.Print wb.Name
End Sub