【问题标题】:Writing a value to another worksheet "Subscript out of range" error将值写入另一个工作表“下标超出范围”错误
【发布时间】:2021-09-16 17:57:18
【问题描述】:

我对 VBA 完全陌生,需要编写一些简单的 VBA 代码来进行一些计算。 我有一个名为 fKitsel 的用户表单,它使用户可以选择 6 个选项之一,并将所选选项的数量作为 Public Kit As Integer 变量写入工作表Лист2(Variables)(我需要在我的组织中使用乌克兰语 excel 本地化)。 当用户按下 cbsubmit 命令按钮时发生写入。 这个子看起来像:

Sub cbsubmit_Click()       
    ActiveWorkbook.Sheets("Лист2").Range("A1").Value = Kit ' error points here
    Лист2.Activate
    Unload Me    
End Sub

当我单击 cbsubmit 按钮时,我收到“下标超出范围”错误,该错误指向我在代码块中注释的行。 无法理解我做错了什么。

【问题讨论】:

  • 我不认为 VBA 喜欢在编辑器中使用非英语字符,因此不要引用 ActiveWorkbook.Sheets("Лист2").Range("A1").Value,而是使用它的 CodeName,例如Sheet1.Range("A1").Value(在VBA编辑器的项目窗格中,它是工作表对象左侧的名称,括号中的是工作表名称)。
  • 感谢您的提示。问题是 CodeNames 本身使用的是西里尔字符,例如:Лист1(MainList)。如果我做对了,代码名称是“Лист1”,它的工作表名称(我在 Excel 本身中使用重命名给他)是“MainList”。所以现在我正在尝试下一件事:'Лист2.Range("A1").Value = Kit',现在我收到运行时错误 1004:应用程序定义或对象定义错误。
  • 所以您在 Excel 中工作表选项卡下看到的名称是 MainList?在这种情况下,您可以尝试ThisWorkbook.Worksheets("MainList").Range("A1").Value。 (我假设您运行代码的工作簿与MainList 所在的工作簿相同。使用ActiveWorkbook 不是一个好主意,因为当您将焦点更改为另一个可能不是的工作簿时,参考会发生变化你的意图)@Stas
  • @RaymondWu 谢谢。参考你建议的方式。仍然错误 1004:引用引用行的应用程序定义或对象定义错误。
  • refers to the reference row 是什么意思?错误仍然在同一行吗?如果没有,那么您需要显示更多代码。 @斯塔斯

标签: excel vba


【解决方案1】:

您的用户窗体包含一个名为KitFrame 控件,与Module1 模块中的Kit 变量同名,这会导致这一行的混淆:

ThisWorkbook.Worksheets("VarList").Range("A1").Value = Kit

这也意味着:

ThisWorkbook.Worksheets("VarList").Range("A1").Value = Me.Kit `(which is the frame control)

您可以为每个控件/变量指定不同且不同的名称(这是一种更好的方法,为您的变量/控件提供更具描述性的名称,例如frameKit

或者明确指出您指的是什么变量,例如:

ThisWorkbook.Worksheets("VarList").Range("A1").Value = Module1.Kit

【讨论】:

  • 是的,问题在于本书中不同项目的命名不明确。谢谢,即使它们完全不同,我也会一直跟踪我是如何命名的 =) 你的帮助挽救了这一天。
  • 由于提交给您的问题的任何答案都解决了您的问题,您可以通过单击答案旁边的勾号来接受它(如果有多个答案,您只能接受一个),这样您就可以接受我的任何一个或马特的答案,这取决于哪个答案最适合您的需要@Stas
猜你喜欢
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 2016-01-26
  • 1970-01-01
相关资源
最近更新 更多