Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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,我试图找到答案,但似乎网上没有答案 代码示例: dim wb_name as string wb_name = range("A1").value & ".xlsx" set wb = workbooks(wb_name) 如果扩展名有时会更改(例如从旧excel格式更改为新excel格式),是否有办法在不使用“.xlsx”的情况下执行上述操作 是否有某种“一网打尽”的函数可以解释不同类型的扩展 您可以采用通配符方法 Dim wb_name as String wb_name = R

我试图找到答案,但似乎网上没有答案

代码示例:

dim wb_name as string
wb_name = range("A1").value & ".xlsx"
set wb = workbooks(wb_name)
  • 如果扩展名有时会更改(例如从旧excel格式更改为新excel格式),是否有办法在不使用“.xlsx”的情况下执行上述操作
  • 是否有某种“一网打尽”的函数可以解释不同类型的扩展

您可以采用通配符方法

Dim wb_name as String
wb_name = Range("A1").Value & ".****"
Set wb = Workbooks(wb_name)
您可以使用select case确定Excel版本和文件扩展名/格式

如果Val(Application.Version)<12,则
“您使用的是Excel 97-2003
FileExtStr=“.xls”:FileFormatNum=-4143
其他的
“您使用的是Excel 2007-2016
选择Case wb.FileFormat
案例51:FileExtStr=“.xlsx”:FileFormatNum=51
案例52:
如果.hasvb项目
FileExtStr=“.xlsm”:FileFormatNum=52
其他的
FileExtStr=“.xlsx”:FileFormatNum=51
如果结束
案例56:FileExtStr=“.xls”:FileFormatNum=56
其他情况:FileExtStr=“.xlsb”:FileFormatNum=50
结束选择
如果结束
这里有两个例子


您可以循环浏览打开的工作簿:

Public sub GetWB(byval wb_name as string) as excel.workbook
Dim wbkCurr as excel.workbook 

Set getwb=nothing 
For each wbkCurr in application.workbooks
    If lower(left(wbkCurr.name, instr(wbkCurr.name,”.”))) = lcase(wb_name) then
        Set getwb = wbkCurr
    Endif
Next wbkCurr 

End function 
用set wb=getwb(wb\u名称)调用它


在继续之前,只需检查wb是否仍然为空

上述链接的可能重复项根本不适用于正在讨论的问题。这些链接用于保存工作簿,而不是将工作簿设置为对象。要应用代码,此代码是否必须已经掌握工作簿?这是一个很好的保存方法,但是如何设置
Destwb
以在此处应用代码?嘿,我尝试了这个方法,但不幸的是,它不起作用,我得到了一个“下标超出范围”错误。通配符方法只有在循环工作簿集合并检查名称的情况下才有效。可以进行增强,以便在用户想要强制使用excel版本时接收可选扩展。如果需要,还可以增强以查看所有打开的excel实例,因为若工作簿是在另一个excel实例中打开的,它将找不到它。
Public sub GetWB(byval wb_name as string) as excel.workbook
Dim wbkCurr as excel.workbook 

Set getwb=nothing 
For each wbkCurr in application.workbooks
    If lower(left(wbkCurr.name, instr(wbkCurr.name,”.”))) = lcase(wb_name) then
        Set getwb = wbkCurr
    Endif
Next wbkCurr 

End function