使用此代码获取奇怪错误。这段摘录是主要代码的开头。首先,它打开一个需要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作为宽度,这是根据我选择的正确。
现在,这是在用户表单上按“确定”时运行的子程序:
Private Sub OKButton_Click()
Set triangle = Selection
Height = triangle.Rows.Count
Width = triangle.Columns.Count
Debug.Print Height
Debug.Print Width
这给了我28.5的高度和99的宽度。我不知道它来自何处。我甚至检查了我的用户表单上的所有对象,好像它可能正在解释那个作为我的选择(这显然是错误的,因为那些对象没有行属性)。
理想情况下,如果这是真实的话,我想将我的初始选择保存为“公共变量”。
感谢任何帮助。
编辑:进一步更新。我现在手动设置了变量三角形,即
triangle = Range("B3","M14")
这个STILL给了我同样奇怪的维度。现在我真的很难过。
2xEDIT:当我不使用变量Height和Width并直接引用triangle.Rows.Count和triangle.Columns.Count时,它给出了正确的答案。所以我现在可以正常运行我的程序。我仍然想知道为什么使用变量是错误的。
所以你说的是
行 Public Height,Width,i As Integer
只是将i声明为整数而没有指定高度和宽度的类型?如果是这样那将是我的问题。
我重新整理它将高度和宽度正确地表示为整数,但它仍然以相同的方式进行了删除。但是,使用私有变量W和H定义的方式与它的工作方式相同。 耸肩
答案 0 :(得分:1)
在行间阅读,我认为您的问题是Debug.Print Height
和Debug.Print Width
正在打印表单的大小。
如果您的声明位于Module
而不是Form
类,则会发生这种情况,因为Height
和Width
是适用于表单的关键字,因此本地版本优先使用。
要解决,你应该做所有这些事情(并非所有这些都是绝对必要的,但这都是好的做法):
Option Explicit
Procedure
,然后是本地Module
,然后是公开Module
,并且仅在有充分理由时Module1.Height
BTW,使用Dim Height, Width, i as integer
声明声明Height
和Width
作为默认类型Variant
。