2

这段代码出现一个奇怪的错误。这段摘录是主要代码的开始。首先,它打开一个接受 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 定义的工作方式相同。 耸耸肩

4

1 回答 1

1

在字里行间阅读,我认为您的问题是Debug.Print Height并且Debug.Print Width正在打印表单的大小。

如果您的声明位于 aModule而不是Form类中,则会发生这种情况,因为HeightandWidth是适用于表单的关键字,因此优先使用本地版本。

要解决,你应该做所有这些事情(并非所有这些都是绝对必要的,但都是好的做法):

  • Option Explicit所有模块中使用
  • 不要使用关键字作为变量名
  • 将变量范围按优先顺序排列为 to Procedure,然后是 local Module,然后是 public Module,并且只有在有充分理由的情况下
  • 使用模块名称为远程模块调用添加前缀,例如Module1.Height

顺便说一句,使用Dim Height, Width, i as integer声明声明HeightWidth作为默认类型是Variant.

于 2012-12-03T05:48:16.123 回答