Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Vba 按名称引用工作表返回“;下标超出范围“;错误_Vba_Excel - Fatal编程技术网

Vba 按名称引用工作表返回“;下标超出范围“;错误

Vba 按名称引用工作表返回“;下标超出范围“;错误,vba,excel,Vba,Excel,设置: 从数据库导入数据的Excel工作簿(VBA-SQL) Excel工作簿,我想从第一个Excel工作簿运行“UpdateAll”宏,并获取一些更新的数据 我运行这个代码 Sub RunMacro() 运行“'E:\programs(x86)\Dropbox\work\excel\data.xlsm'!UpdateAll” 端接头 返回的错误为: 下标超出范围(错误9) “调试”导致: Sub-UpdateAll() daysBack=Sheets(“Update”).Range(“B1”

设置:

  • 从数据库导入数据的Excel工作簿(VBA-SQL)
  • Excel工作簿,我想从第一个Excel工作簿运行“UpdateAll”宏,并获取一些更新的数据
  • 我运行这个代码

    Sub RunMacro()
    运行“'E:\programs(x86)\Dropbox\work\excel\data.xlsm'!UpdateAll”
    端接头
    
    返回的错误为:

    下标超出范围(错误9)

    “调试”导致:

    Sub-UpdateAll()
    
    daysBack=Sheets(“Update”).Range(“B1”).Value'活动工作簿中没有
    Update
    sheet。这:

    Sheets("Update")
    
    含蓄地说:

    ActiveWorkbook.Sheets("Update")
    
    要么1)
    ActiveWorkbook
    不是您期望的书,要么2)工作表名称错误;查找(并删除)前导空格或尾随空格


    请注意,
    表格
    集合也可以包含图表;如果要查找工作表,请使用
    工作表
    集合。

    活动工作簿中没有
    更新
    工作表。这:

    Sheets("Update")
    
    含蓄地说:

    ActiveWorkbook.Sheets("Update")
    
    要么1)
    ActiveWorkbook
    不是您期望的书,要么2)工作表名称错误;查找(并删除)前导空格或尾随空格


    请注意,
    表格
    集合也可以包含图表;如果您正在寻找工作表,请使用
    工作表
    集合。

    将解决方案从问题移动到答案:

    编辑:解决方案 将第二个代码中的第二行编辑为以下格式:

    daysBack = Workbooks("name_of_workbook_containing_update_sheet").Sheets‌​("Update").Range("B1‌​").Value
    
    就我而言,这将是:

    daysBack = Workbooks("data").Sheets‌​("Update").Range("B1‌​").Value
    

    将解决方案从问题移至答案:

    编辑:解决方案 将第二个代码中的第二行编辑为以下格式:

    daysBack = Workbooks("name_of_workbook_containing_update_sheet").Sheets‌​("Update").Range("B1‌​").Value
    
    就我而言,这将是:

    daysBack = Workbooks("data").Sheets‌​("Update").Range("B1‌​").Value
    

    我再问一个问题。您确定要在正确的工作簿中查找工作表“更新”吗?在
    工作表之前没有任何内容<代码>工作表
    指的是您现在可以在屏幕上看到的任何工作表,即
    活动工作表
    。非常感谢,@EganWolf,此评论与您对下面答案的评论结合起来,现在非常有意义。@emilreintert,不客气:)我再问一个问题。您确定要在正确的工作簿中查找工作表“更新”吗?在
    工作表之前没有任何内容<代码>工作表
    指的是您现在在屏幕上可以看到的任何工作表,即
    活动工作表
    。非常感谢,@EganWolf,这条评论加上您对下面答案的评论,现在非常有意义。@emilreintert,不客气:)下面是关于它的有趣之处。我给一个命令按钮分配了完全相同的代码,它工作得非常好。但该按钮位于更新工作表中-这可能是也可能不是按下该按钮时代码工作的原因,因为代码引用了同一工作表中的数据?这使活动工作簿成为包含“更新”工作表的工作簿。。。所以,是的,这有助于Excel解决问题。这是有道理的,穆格先生。谢谢。因此,解决方案是将第二个代码中的第二行编辑为:daysBack=Worksheets(“Update”).Range(“B1”).Value?@EmilReinert。这不会改变任何内容,只会使工作表从正确的集合中拉出。修复方法是在您拉取活动工作表时激活正确的工作簿。@emilreIntert否,解决方案可以是
    daysBack=Workbooks(“包含更新工作表的工作簿名称”).Sheets(“更新”).Range(“B1”).Value
    ,现在有一个有趣的地方。我给一个命令按钮分配了完全相同的代码,它工作得非常好。但该按钮位于更新工作表中-这可能是也可能不是按下该按钮时代码工作的原因,因为代码引用了同一工作表中的数据?这使活动工作簿成为包含“更新”工作表的工作簿。。。所以,是的,这有助于Excel解决问题。这是有道理的,穆格先生。谢谢。因此,解决方案是将第二个代码中的第二行编辑为:daysBack=Worksheets(“Update”).Range(“B1”).Value?@EmilReinert。这不会改变任何内容,只会使工作表从正确的集合中拉出。修复方法是在拉取活动工作表时激活正确的工作簿。@EmilreInsert否,解决方案可以是
    daysBack=Workbooks(“包含更新工作表的工作簿名称”)。工作表(“更新”)。范围(“B1”)。值