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 的相关文章

  • HTML/VBA Click 事件未触发

    这是我第一次在 StackOverflow 上发布问题 到目前为止 我已经能够通过 VBA 帮助论坛解决我的大部分问题 我的问题很简单 我有一个自动数据拉取 我需要在其中导出数据 我过去曾在这方面取得过成功 但这次略有不同 我尝试单击以生成
  • 是否存在用于开放 xml Excel 编辑的良好包装类和/或库?

    我正在寻找一个不错的库 用于在我们的 Windows 服务器上编辑和 或生成 Excel 文档 我觉得 open xml sdk 可能是可行的方法 但对我来说 学习曲线似乎很陡峭 而且我们的开发时间有限 我认为编辑 Excel 文档不应该那
  • VBA Excel:将范围值分配给新范围

    我在将一个工作簿范围中的值分配给当前工作簿中的某个范围时遇到问题 当我使用 Range A1 C1 分配我的范围时 此代码工作正常 但是当我使用 Range Cells 1 1 Cells 1 3 定义我的范围时 该函数会失败 Sub Co
  • Excel 2010 在 IF 函数中搜索文本 - 单独的单元格数据

    Program Excel 2010 Require 一种将名字 姓氏 电子邮件提取到各个单元格的方法 Data 我的数据有一个包含原始 脏数据 的表 它是原始的并且一团糟 我用一个简单的方法整理它 IF A7 Order 1 然后其余单元
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 如何隐藏组合框下拉列表中的列?

    我正在 Excel 用户窗体中构建一个 ComboBox 该用户窗体从 Access 表中获取其行 我想在下拉列表中向用户显示多个文本字段 但从 ComboBox 返回的值应该是与用户选择的行关联的 ID 号 即 ID 列是绑定列 但我不想
  • 将用户定义的表类型从 VBA 传递到 SQL

    我的任务是创建一个 Excel 电子表格作为 SQL 数据库的前端 以及一些对数据执行复杂计算的 C 我的老板想要前端作为电子表格 而计算对于 VBA 来说似乎太复杂了 目前 检索数据集的存储过程运行良好 然后 用户将在 Excel 中编辑
  • Excel 的 VBA - 如何检查范围的交集不为空

    我有两个问题 1 如何检查交集或范围是否不为空 例如 如果我想检查它是否为空 我会写 if application intersect r1 r2 is nothing 但有什么东西是否定虚无的吗 例如 并非没有任何事情不起作用 2 如何比
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • 将 CURL 命令行转换为 VBA

    在 CURL 中 我可以使用这一行 curl data DataToBeSent https example com resource cgi 我正在努力将此类行转换为在 VBA 中使用 这是我到目前为止的尝试 Sub POST Metho
  • 如何使用 ssis 2008 循环遍历 Excel 文件并获取工作表名称

    我正在尝试将 Excel 文件中的数据加载到 SQL 数据库表中 该文件的工作表名称不是静态的 工作表名称包含 yyyymmdd 它会随每个文件而变化 我按照提供的解决方案进行操作如何使用 SSIS 包循环遍历 Excel 文件并将其加载到
  • VBA 中的 If 和 Or 多个语句

    我想将包含 14 列的 Excel 文件重新分配到正确的列 包含 12 000 行 为此 我必须使用一些 If And Or 语句将数字放入矩阵中 但显然我没有从中得到正确的东西 它使我的所有单元格为零 而具有值的单元格应保留该值 我哪里出
  • 在单元格中查找以逗号分隔的多个值并返回以逗号分隔的多个值

    如果有人可以帮忙的话 我们将此表称为 1 我想在此处执行查找 可以将工作表 2 中 B 列的值引入工作表 1 中的 B 列 返回的多个值也应该用逗号分隔 我在这里尝试使用 textjoin 公式 但它搞砸的地方是 例如它将 A12 计为 A
  • 打开特定工作表上的 Excel 文件

    我有一个包含 5 个工作表的 Excel 文件 我想用 C 代码打开它 当它打开时 我希望激活第 3 页 我怎样才能做到这一点 像这样 using Excel Excel Application excelApp new Excel App
  • VBA复制单元格值和格式

    我如何修改以下代码以便不仅复制值而且复制字体样式 例如大胆或不大胆 谢谢 Private Sub CommandButton1 Click Dim i As Integer Dim a As Integer a 15 For i 11 To
  • 将整个工作表复制到 Excel 2010 中的新工作表

    我发现了类似的问题 涉及复制一个工作簿中的整个工作表并将其粘贴到另一个工作簿 但我感兴趣的是简单地复制整个工作表并将其粘贴到同一工作簿中的新工作表 我正在将 2003 xls 文件转换为 2010 xlsm 用于在工作表之间复制和粘贴的旧方
  • 如何将工作表和范围作为变量传递?

    我想在子例程之间传递工作表的名称和范围 以下抛出 下标超出范围 错误 Sub This x Sheet1 y D3 MsgBox x Range y Value End Sub This is 我的项目资源管理器的示例 https i st
  • VBA在下一个空白行正确输入用户表单数据

    创建了一个用户表单 添加了一个文本框和一个组合框 添加了提交按钮 单击 提交 后 会将数据添加到电子表格中 据我所知和我所读到的 这是错误的 ActiveCell Value TextBox3 Text ActiveCell Offset
  • 根据用户名获取广告详细信息

    我有一个代码可以从 AD 检索用户的详细信息 例如电子邮件地址 电话号码等 我当前使用的代码是 Set objSysInfo CreateObject ADSystemInfo strUser objSysInfo UserName msg
  • 如果不是,则必须删除单元格的第一个字符 #3Created 循环永远不会结束

    所以基本上 我需要删除主键字段中第二位数字不为 3 的所有记录 例如可以如下所示 39001 或者没有 3 我想要的是所有以非 3 开头的单元格 它们的行都被删除我想出了以下代码 它删除了所有单元格 但宏永远不会停止运行 Sub keep3

随机推荐

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

    我有一个函数对象 我想使用 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