VBA 下标超出范围 - 错误 9

2024-01-16

有人可以帮我解决这个代码吗,我得到了下标超出范围 error:

“创建工作表”之后的行在调试器中以黄色突出显示

'Validation of year
 If TextBox_Year.Value = Format(TextBox_Year.Value, "0000") Then

 'Creating Process
'Creation of new sheet
Workbooks.Add
ActiveWorkbook.SaveAs FileName:= _
    "" & Workbooks("Temperature Charts Sheet Creator").Sheets("MENU").Cells(4, 12).Value & "Data Sheet - " & ComboBox_Month.Value & " " & TextBox_Year.Value & ".xls", FileFormat _
    :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
    False, CreateBackup:=False

'Creating of the sheets
Windows("Data Sheet - " & ComboBox_Month.Value & " " & TextBox_Year.Value & ".xls").Activate

    Sheets("Sheet3").Select
    Sheets("Sheet3").Name = "31 " & ComboBox_Month.Value
    Sheets("Sheet2").Select
    Sheets("Sheet2").Name = "30 " & ComboBox_Month.Value
    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "29 " & ComboBox_Month.Value

For i = 28 To 1 Step -1

    Sheets.Add
    ActiveSheet.Name = i & " " & ComboBox_Month.Value

Next

建议进行以下简化:捕获返回值Workbooks.Add而不是下标Windows()之后,如下:

Set wkb = Workbooks.Add
wkb.SaveAs ...

wkb.Activate ' instead of Windows(expression).Activate


一般哲学建议:

避免使用 Excel 的内置函数:ActiveWorkbook、ActiveSheet 和 Selection:捕获返回值,并倾向于使用限定表达式。

仅在最外层宏(子)中使用内置函数一次,并在宏开始时捕获,例如

Set wkb = ActiveWorkbook
Set wks = ActiveSheet
Set sel = Selection

在宏期间和内部不依赖于这些内置名称,而是捕获返回值,例如

Set wkb = Workbooks.Add 'instead of Workbooks.Add without return value capture
wkb.Activate 'instead of Activeworkbook.Activate

另外,尝试使用限定表达式,例如

wkb.Sheets("Sheet3").Name = "foo" ' instead of Sheets("Sheet3").Name = "foo"

or

Set newWks = wkb.Sheets.Add
newWks.Name = "bar" 'instead of ActiveSheet.Name = "bar"

使用限定表达式,例如

newWks.Name = "bar" 'instead of `xyz.Select` followed by Selection.Name = "bar" 

这些方法通常会更好地工作,提供更少的混乱结果,在重构时会更加健壮(例如,在方法内和方法之间移动代码行),并且在 Excel 版本之间会更好地工作。例如,在宏执行过程中,从一个版本的 Excel 到另一版本的选择会发生不同的变化。

另请注意,您可能会发现您不需要.Activate使用更多限定表达式时几乎同样如此。 (这可能意味着对于用户来说屏幕闪烁会更少。)因此整条线Windows(expression).Activate可以简单地消除而不是被取代wkb.Activate.

(另请注意:我认为您显示的 .Select 语句没有贡献,可以省略。)

(我认为 Excel 的宏记录器负责推广这种使用 ActiveSheet、ActiveWorkbook、Selection 和 Select 的更脆弱的编程风格;这种风格留下了很大的改进空间。)

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

VBA 下标超出范围 - 错误 9 的相关文章

随机推荐

  • 如何将参数传递给事件处理程序?

    我有一个函数对象 我想使用 jquery 在单击时向其传递参数 但它不起作用 我不明白其背后的概念 谁能解释一下我哪里出错了 让您正在调用的函数在闭包中返回一个具有名称的函数 并通过参数传递 div click fn clik Mike v
  • 将图像添加到 Tkinter Entry

    使用 tkinter 我尝试在条目小部件的边框内显示图像 我尝试在谷歌中搜索 但没有成功 有人知道该怎么做吗 没有任何功能或属性允许图像位于 Entry 小部件的边界内 但是 您可以很容易地模拟它 方法是将图像和条目小部件放入框架内 从条目
  • cython 中融合类型的替代品

    我正在努力使用 python C api 将最初用 C 编写的 python 模块重写为 Cython 该模块还使用 NumPy 该项目的一个主要挑战是保持模块当前的速度 并且它应该适用于所有 Numpy 数据类型 我正在考虑使用融合数据类
  • wint_t 总是至少与 wchar_t 一样大吗? unsigned short 如何满足 wint_t 的要求?

    似乎每个人都假设wint t至少与wchar t 然而C标准允许wchar trange 的值不直接对应于扩展字符集中的任何字符 价值WCHAR MIN and WCHAR MAX不一定对应于扩展字符集的成员 and wchar t 它是一
  • 在网格视图中为复选框列生成新列

    我使用数据表作为网格视图的数据源 DataTable table new DataTable table Columns Add Dosage typeof int table Columns Add Drug typeof string
  • java.lang.OutOfMemoryError:Java堆空间已满100000条记录

    尝试使用以下代码编写Excel文件 public static void main String args XSSFWorkbook workbook new XSSFWorkbook XSSFSheet sheet workbook cr
  • 如何通过 Web.config 或 C# 将所有内容重定向到 https://www。网站的版本?

    我有一个托管在 GoDaddy 上的 ASP NET 网站 我需要将每个请求重定向 301 到https www example com whatever https www example com whatever 例如 http exa
  • 在Android中解析巨大的JSON对象?

    Android中如何解析巨大的JSON文件 当我解析这样的文件时 我在日志上看到类似这样的内容 04 05 15 55 46 490 DEBUG dalvikvm 3847 GC freed 12159 objects 557744 byt
  • Tomcat 6 与 servlet 3 规范

    与此相反文档 http tomcat apache org whichversion html Tomcat 6 可以使用 Servlet 规范 3 吗 是否可以将 servlet 3 规范与 tomcat 6 一起使用 我怀疑这是一个实用
  • 如何创建“显示更多”按钮并指定最初可以显示多少行文本

    我正在寻找一种方法在我的响应式网站上创建滑出 显示更多 功能 该功能在两行的一个段落 我之前已经通过静态网站实现了这一点 通过对容器应用设定的高度并使用overflow hidden 然后对容器的高度进行动画处理 但为了响应 容器会在不同的
  • sorl 缩略图 + django 生产中的问题

    我正在 Django 中使用 sorl 缩略图 在我的本地设置中它工作正常 但在生产中未制作缩略图 我的代码如下所示 load thumbnail thumbnail up image 32x32 crop center as im img
  • 您可以从 CakePHP 中的视图调用控制器函数吗?

    我想从视图调用控制器函数 这在 Cake PHP 中可能吗 可以通过请求操作方法 http book cakephp org 2 0 en views html requesting elements from a plugin 但不建议这
  • 使用peewee访问远程MySQL数据库

    我正在尝试使用 peewee 连接到 Amazon RDS 上的 MySQL 数据库 但无法使其工作 我是数据库新手 所以我可能在做一些愚蠢的事情 但这就是我正在尝试的 import peewee as pw myDB pw MySQLDa
  • Python质数检查[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我写了这个非常简单的素数检查 pri
  • 为什么子线程无法访问flask_login中的current_user变量?

    我正在写一个烧瓶应用我正在尝试插入一个多线程实现对于某些服务器相关的功能 我注意到这种奇怪的行为 所以我想了解为什么会发生这种情况以及如何解决它 我有以下代码 from flask login import current user log
  • 布尔数组转整数

    python 中是否有任何内置函数可以转换 bool 数组 表示字节中的位 如下所示 p True True True False True False False True 像这样的字节数组 bp byteArray 233 我知道哦 n
  • 动态添加表单字段行 - cakePHP

    我有一个发票表和一个invoice item 表 每个发票有许多发票项 创建发票时 系统会向用户显示一个包含发票表单字段的表单以及包含发票项表单字段的行 我想要做的是有一个 添加新项目 链接 可以动态 jQuery AJAX 添加新的项目字
  • 对 php.ini 的更改未反映在 PHP 的 phpinfo() 中

    我只是无法在本地主机设置或相关的设置上更改 php info 值php我的管理员 https en wikipedia org wiki PhpMyAdmin最大文件大小 所以我找到了 PHP 文件phpinfo https www php
  • 如何对 Laravel Eloquent ORM 对象进行排序?

    例如 我们有一个包含 3 个字段的模型航班 created at 航班创建的时间 name 航班名称 分数 航班的分数 所以我这样写 flights App Flight orderBy created at 我得到一些 flight排序对
  • VBA 下标超出范围 - 错误 9

    有人可以帮我解决这个代码吗 我得到了下标超出范围 error 创建工作表 之后的行在调试器中以黄色突出显示 Validation of year If TextBox Year Value Format TextBox Year Value