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のサイズを印刷していると思います。

これは、宣言がクラスでModuleはなくa にある場合に発生します。and はフォームに適用可能なキーワードであるため、ローカル バージョンが優先的に使用されます。FormHeightWidth

解決するには、次のことをすべて行う必要があります (すべてが絶対に必要というわけではありませんが、すべてが適切な方法です)。

  • すべてのモジュールOption Explicitで使用
  • 変数名にキーワードを使用しないでください
  • 適切な理由がある場合にのみ、変数のスコープを優先順にProcedure、次に local Module、次に publicにします。Module
  • リモートモジュール呼び出しの前にモジュール名を付けます。Module1.Height

ところで、Dim Height, Width, i as integer宣言を使用して宣言しHeightWidthデフォルトの型としてVariant.

于 2012-12-03T05:48:16.123 に答える