下标超出范围运行时错误9

2023-11-29

我正在创建一个函数,该函数从两个 Excel 文件中读取列标题,然后将这些列标题放入复选框中,以便用户可以检查他将使用哪些列。当我使用一个文件执行此操作时它可以工作,但是当我修改它以使用两个文件时,我收到“运行时错误 9:下标超出范围”并突出显示该行 => Set wks2 = ActiveWorkbook.Worksheets(SheetName2)。

即使出现此错误消息,仍然适用于第一个文件,但不适用于第二个文件。有人可以帮我找到这个错误消息的原因吗?预先非常感谢您。

 Function CallFunction(SheetName1 As Variant, SheetName2 As Variant) As Long
' This is a function used to retrieve column titles and place them as checkboxes in a listBox

 Dim jTitles(200) As String
 Dim sTitles(200) As String
 Dim titless As Integer
 Dim titlesj As Integer
 Dim wks1 As Worksheet
 Dim wks2 As Worksheet
 Dim Item(200) As String

 SPathName = Range("F18").Value
 SFilename = Range("F19").Value

 JPathName = Range("F22").Value
 JFilename = Range("F23").Value

 Workbooks.Open Filename:=SPathName & "\" & SFilename
 Workbooks.Open Filename:=JPathName & "\" & JFilename

 Set wks1 = ActiveWorkbook.Worksheets(SheetName1)

 For j = 1 To 199
     If Trim(wks1.Cells(4, j).Value) = "" Then
        titlesj = j - 1
        Exit For
    End If
        jTitles(j - 1) = wks1.Cells(4, j).Value
 Next

 j = 1

 ' Add column titles from files into the listbox as checkboxes
 For j = 0 To titlesj
    Sheet1.ListBox1.AddItem jTitles(j)
    Sheet1.ListBox3.AddItem jTitles(j)
 Next

 Set wks2 = ActiveWorkbook.Worksheets(SheetName2)  ' <=== HERE POPS THE ERROR MESSAGE

 For s = 1 To 199
    If Trim(wks2.Cells(1, s).Value) = "" Then
        titless = s - 1
        Exit For
    End If
        sTitles(s - 1) = wks2.Cells(1, j).Value
 Next

 s = 1

 For s = 0 To titless
    Sheet1.ListBox2.AddItem sTitles(s)
    Sheet1.ListBox4.AddItem sTitles(s)
 Next

    Workbooks(JFilename).Close
    ' Workbooks(SFilename).Close

End Function

当该工作簿中不存在指定的工作表名称时,在这些情况下会出现下标超出范围错误Worksheets收藏。

我注意到您有两个打开的工作簿,指定为:

Workbooks.Open Filename:=SPathName & "\" & SFilename
Workbooks.Open Filename:=JPathName & "\" & JFilename

但是,您的两个工作表分配仅涉及ActiveWorkbook.

错误的原因肯定是SheetName2不存在于ActiveWorkbok(由指定JFilename)

尤其是在处理多本书或工作表时,最好避免使用激活/选择方法-- 否则您需要跟踪哪个工作簿/工作表/等。是“Active”,这会导致意大利面条式代码和大量不必要的调用.Activate method.

I know that SheetName1存在于JFilename,我假设SheetName2存在于工作簿中SFileName.

相反,定义两个Workbook变量:

Dim wb1 as Workbook
Dim wb2 as Workbook

分配结果Workbooks.Open这些工作簿的方法:

Set wb2 = Workbooks.Open(Filename:=SPathName & "\" & SFilename)
Set wb1 = Workbooks.Open(Filename:=JPathName & "\" & JFilename)

Now, wb1是“活动”工作簿,因此工作表分配:

Set wks1 = wb1.Worksheets(SheetName1)

后来为了Sheetname2:

Set wks2 = wb2.Worksheets(Sheetname2)

否则,您的工作表名称或发送给此函数的字符串参数存在拼写错误。仔细检查/调试该值SheetName2是正确的and它存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下标超出范围运行时错误9 的相关文章

  • 当第二个工作表中存在值时删除整行

    我有 2 张纸 sheet1 和sheet2 我在单元格 A3 sheet1 中有一个值 该值不是恒定的 Sheets2 中还有许多文件 我想做的是 当单元格 A3 Sheet1 中的值与 A 列 Sheet2 中的值相同时 它将删除找到该
  • 如何在自定义数据验证中使用用户定义的函数?

    In my Worksheet我有一个Table并想要定义Data validation对于包含日期的列 如下所示 S2M B2 lt gt Error 在上面 S2M 是一个用户定义的函数 用于将日期转换为Persian date to
  • 如何将32位VBA代码转换为64位VBA代码

    我正在尝试运行宏代码 但由于我使用的是 64 位 Excel 2016 因此该代码不起作用 请帮我解决这个问题 Private Declare Function FindWindowEx Lib User32 Alias FindWindo
  • 如何使用Python更改Excel中的列格式

    我想使用 openpyxl 方法将一张纸上的特定行和列复制到另一张纸上 但我的主要 Excel 文件是 xlsb 文件 而 openpyxl 不支持 xlsb 文件 所以我构建了这种复杂的方式 根据公司规则 我无法从 Microsoft E
  • 将 .XLS 转换为制表符分隔的 .TXT

    我可以使用 C 将 Excel XLS 文件转换为 txt tsv 制表符分隔值 文件吗 使用 OleDb 可能很棘手 并且可能会导致问题 具体取决于创建电子表格的 Excel 版本 例如 上面的示例适用于 xls 但不适用于 xlsx 您
  • ATL创建的COM接口继承IDispatch但后期绑定不起作用

    这是我的 IDL 文件 IFrame 是一个双接口 同时继承了 IDispatch 和 IUnknown object uuid C5AD0517 37FC 479C 9C7A A063B17E4A2E dual nonextensible
  • 在 XSSF 工作簿上设置密码保护

    我想为使用 poi 3 14 创建的 xlsx 文件添加密码保护 该文档声称 这是可能的 http poi apache org cryption html http poi apache org encryption html 使用我尝试
  • 如何从 jQuery 获取 ajax 请求下载 Excel

    我有一个 Spring MVC 视图 它提供了一个 excel 文件 但是 我现在修改了该过程 以便用户获得一个模式框 他们可以在下载 excel 之前在其中选择一些选项 这些选定的选项将发送到视图 我的请求看起来像这样 get downl
  • 是否有 R 函数可以将这些数据从长形重塑为宽形?

    数据现在看起来如何 Coach ID Student score 1 A 8 1 B 3 2 A 5 2 B 4 2 C 7 看起来像这样 Coach ID Student score student 2 score 2 student 3
  • 如何使用 Excel 公式将一个工作表中的单元格范围引用到另一个工作表?

    我有一个包含工作表 Sheet1 和 Sheet2 的工作表 我试图引用从 Sheet2 到 Sheet1 的一系列单元格 我知道如何引用工作表单元格 例如 Sheet2 A1但我怎样才能对单元格范围做同样的事情 例如A1 F1我试过 Sh
  • Excel 对象库文件在哪里

    我正在寻找 Excel 对象库文件以将其导入 LabVIEW 我安装了 MS Office 2013 可以找到 MSACC olb MSOUTL olb MSPPT olb 和 MSWORD olb 但无法确定要导入哪个文件 olb 或 d
  • Excel VBA 公式德语/法语/意大利语/俄语/荷兰语/外国函数

    当我将数据添加到工作簿时 需要将公式从较早的单元格复制到新单元格 我使用以下公式来计算我的增长率 WENN ODER K9 L9 WENNFEHLER L9 K9 K9 由于这非常耗时 我想用宏来改进它 因此编写了以下代码 Sub Grow
  • GetActiveObject() 与 GetObject() -- MK_E_UNAVAILABLE 错误

    All 我在将一些 VBA 代码转换为 C 时遇到一些问题 我们有一个充当本地 COM 服务器的第 3 方应用程序 在我们使用的VBA代码中获取对象 获取对现有对象的引用 e g Set appHandle GetObject ProgId
  • 将范围传递给 Excel 用户定义函数并将其分配给数组

    我在尝试着 通过两个范围 多行单列 Excel 2007 中的用户定义函数 然后将其分配给一个数组进行处理 谁能告诉我如何将这样的范围分配给数组 范围不是恒定的 因为我在不同的单元格中使用 UDF 来处理不同的数据 所以我不能使用 e g
  • 副水平X轴VBA最大刻度

    通过以下代码和敏 正在设置 VBA 中图表的主水平 X 轴的比例 Sub chart set Dim objCht As ChartObject With ActiveSheet ChartObjects 1 Chart Axes xlVa
  • 字节数组到 Excel 工作簿

    我正在尝试将字节数组转换为 Excel 工作簿 当我这样做时 Response BinaryWrite renderedBytes 它工作正常并且文件符合预期 但是当我尝试用我在网上找到的这个来做到这一点时 private Object B
  • 在 Excel 中将多组列相互叠置

    所以我有多组 3 列 每组始终采用相同的列顺序 SKU 销售 日期 我想知道是否有 VBA 脚本或其他方法可以执行以下操作 1 Copy G I 2 Paste into A C 3 Copy J L 4 Paste into A C Un
  • Excel 中分组经常性 CF 的净现值

    下面是 60 个期间的现金流量表 有一组经常性现金流量 Excel 中是否有一种简单的方法可以计算所有 60 个期间 每月现金流量 的 NPV 而无需创建 60 行的表格并使用 NPV 公式 因此 60 个订单项的公式如下所示 NPV PE
  • 使用 Microsoft Graph API 从 Sharepoint 站点提取 Excel.xlsx 工作簿

    正如标题中所述 我一直在尝试使用 Microsoft Graph API 从我们公司的 Sharepoint 站点提取 Excel 工作簿 我能够检索文件的元数据 但是当我添加 workbook 分段到 URL 我收到以下错误 error
  • 当 vbscript.regexp 工作时,VBA RegExp 会导致编译错误

    我正在为 Outlook 2013 的 VBA 编写一个脚本 它使用正则表达式 我发现的每个示例似乎都使用Set regex New RegExp创建一个正则表达式对象 当我尝试这个时 我得到了编译错误 用户定义类型未定义 我设法使用正则表

随机推荐