【发布时间】:2012-12-03 13:48:16
【问题描述】:
此代码出现一个奇怪的错误。这段摘录是主要代码的开始。首先,它打开一个接受 3 个输入的表单。输入现在没有被使用,所以这不是问题。
Public triangle As Range
Public Height, Width, i As Integer
Sub asdf()
Set triangle = Selection
WeightsUserForm.Show
Height = triangle.Rows.Count
Width = triangle.Columns.Count
Debug.Print Height
Debug.Print Width
这给了我 12 作为高度和 12 作为宽度,根据我的选择,这是正确的。
现在这是当您在用户表单上按 OK 时运行的子程序:
Private Sub OKButton_Click()
Set triangle = Selection
Height = triangle.Rows.Count
Width = triangle.Columns.Count
Debug.Print Height
Debug.Print Width
这给了我 28.5 的高度和 99 的宽度。我不知道这是从哪里来的。我什至检查了我的用户窗体上的所有对象,好像它可能将其解释为我的选择(这显然是错误的,因为这些对象没有 rows 属性)。
理想情况下,如果这是真实的,我想将我的初始选择保存为“公共变量”。
感谢任何帮助。
编辑:进一步更新。我现在手动设置了变量三角形,即
triangle = Range("B3","M14")
这仍然给了我同样奇怪的维度。现在我真的很难过。
2xEDIT:当我不使用变量 Height 和 Width 并且直接引用 triangle.Rows.Count 和 triangle.Columns.Count 时,它给了我正确的答案。所以我现在可以正常运行我的程序了。不过,我仍然很想知道为什么使用变量是错误的。
所以你是说那行
Public Height,Width,i As Integer
只是将 i 声明为整数而不指定高度和宽度的类型?如果是这样,那将是我的问题。
我重做了它,将高度和宽度都正确地声明为整数,但它仍然以同样的方式出错。但是,使用私有变量 W 和 H 定义的工作方式相同。 耸耸肩
【问题讨论】:
-
声明所有变量可能会有所帮助。在用户表单代码中,至少正如您所展示的那样,没有声明任何变量。在第一个例程中,您实际上已将
Height和Width声明为Variants。请参阅cpearson.com/excel/DeclaringVariables.aspx 和名为“注意使用 One Dim 声明声明的变量”的部分,了解它们为何是变体。尝试将Option Explicit放在模块顶部,这将强制在编译时声明变量。 -
那么,您是否尝试过将所有变量声明为
variant以外的类型?我相信这会回答您的 2xEdit 问题。 -
再想一想:一般建议不要使用 Excel 保留字作为变量名。
Height和Width都是 Excel 属性名称。我会尝试将变量名称更改为其他名称,例如“TriangleHeight”。 -
所以您是说 Public Height,Width,i As Integer 行只是将 i 声明为整数而不指定高度和宽度的类型?如果是这样,那将是我的问题。
-
这就是我所说的,是的。