如何激活在VBA中使用工作簿名称打开的工作簿

如何激活在VBA中使用工作簿名称打开的工作簿,vba,excel,Vba,Excel,我已经打开了一个工作簿,但正在运行另一个工作簿中的宏。我想使用其名称激活第一个工作簿 守则: FileName = input_path_1 & input_file_1 Workbooks(FileName.xls).Activate 当我尝试这样做时,它给了我“下标超出范围”的错误。如何解决它?检查变量Filename是否包含正确的文件名。(例如Sample.xls) 还要检查input\u path\u 1和input\u file\u 1的值是否正确。 如果他们有,应该是这样的

我已经打开了一个工作簿,但正在运行另一个工作簿中的宏。我想使用其名称激活第一个工作簿

守则:

FileName = input_path_1 & input_file_1
Workbooks(FileName.xls).Activate

当我尝试这样做时,它给了我“下标超出范围”的错误。如何解决它?

检查变量
Filename
是否包含正确的文件名。(例如Sample.xls)
还要检查
input\u path\u 1
input\u file\u 1
的值是否正确。
如果他们有,应该是这样的:

Workbooks(Filename).Activate
现在,如果需要附加扩展名(例如,
Filename
值仅为示例):

参数应始终采用字符串形式,并且应为完整的文件名(带扩展名)。虽然也接受数字(索引),但您无法确定哪个索引引用了哪个工作簿。更好的是,将其分配给一个变量

Dim otherWB As Workbook
Set otherWB = Workbooks(Filename)
'Set otherWB = Workbooks(Filename & ".xls") '~~> for second scenario above
Edit1:从注释中,如果
Filename
包含完整路径,则这可能会起作用

Dim Filename1 As String
Filename1 = Split(Filename, "\")(UBound(Split(Filename, "\")))
Workbooks(Filename1).Activate

访问特定工作簿窗口的唯一方法是使用下面的方法

Vba

C#


Set OutsideWb=Workbooks(“path+Filename.xlsm”)
如果工作簿已经打开,则无法工作

将全局wb变量设置为打开的文件并使用该变量 例如


我的包含.xls扩展名,所以我使用了第一个扩展名的解决方案。但它仍然给了我下标错误。运行时错误9。@lakesh如果您得到的是与工作簿完全相同的文件名,请尝试
Debug.Print Filename
。还要仔细检查文件扩展名是否正确。(例如,XL2007和更高版本有
.xlsx
扩展名。是的,变量值是正确的。因为我用它打开文件。它在excel 2003中。这可能是个问题。@lakesh在2003年没有问题。问题可能是:
因为我用它打开文件
如果你用它打开文件,那么字符串包含完整路径(例如C:\User\User.Name\Folder\Sample.xls)。您只需要Sample.xls部分。这是一个VBA问题
Dim Filename1 As String
Filename1 = Split(Filename, "\")(UBound(Split(Filename, "\")))
Workbooks(Filename1).Activate
Dim filename as string
set filename = Path.GetFileName(fullFilename)

set Workbook.Windows(filename).WindowState = Excel.XlWindowState.xlMinimized
set Workbook.Windows(filename).WindowState = Excel.XlWindowState.xlNormal

' You can also use Worksheet.Activate() here if you want
string filename;
filename = Path.GetFileName(fullFilename);

Workbook.Windows[filename].WindowState = Excel.XlWindowState.xlMinimized;
Workbook.Windows[filename].WindowState = Excel.XlWindowState.xlNormal;

// you can also use Worksheet.Activate() here if you want
Set oXLBook = oXLApp.Workbooks.Open("path + Filename.xlsm") '
  Set OutsideWb = oXLBook 'prolly dont need oxlbook  todo