このコードで奇妙なエラーが発生します。この抜粋は、メインコードの始まりです。まず、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を使用すると、同じように機能するように定義されます。 肩をすくめる