1

Excel-VBA初心者です。だから、私は赤ちゃんのステップを自分自身に教えるために小さなプロジェクトを試みています. 作成したユーザーフォームでユーザーがクリックしたボタンに応じて、sin (x)、cos (x)、または tan (x) の曲線を表示するインタラクティブなグラフを作成したいと考えています。

以下は、モジュール 1 の VBA コードです。このコードは、グラフを作成し、ワークシートにグラフを配置し、x 値を生成し、sin (x) セットの y 値を生成します。これまでのところ、sin (x) セットの y 値のみを作成しました。これは、ユーザー フォーム ボタンに実行させたいことを実行させることに関心があるためです。また、急いでこの質問を投稿したかったのです!

Option Explicit
---------------------------------------------------------------------------------
Sub one()

'VARIABLES
Dim Row As Integer
Dim j As Single
Dim pi As Single
pi = 3.14159265359

'LABEL X SET
Cells(1, 38).Value = "X"

'GENERATE X VALUES
j = -4 * pi
For Row = 2 To 82

Cells(Row, 38).Value = j

j = j + 0.025 * pi

Next Row

'LABEL / GENERATE Y VALUES = SIN ( X )
Cells(1, 39).Value = "SIN ( X )"
For Row = 2 To 82

Cells(Row, 39).Value = Sin(Cells(Row, 38).Value)

Next Row

'CREATE CHART 1
Dim c As Chart
Set c = ActiveWorkbook.Charts.Add
Set c = c.Location(where:=xlLocationAsObject, Name:="Sheet1")
With c
    .ChartType = xlXYScatter
    .Axes(xlValue).MajorGridlines.Delete
    .Legend.Delete
End With

'POSITION CHART 1
Dim cobject As ChartObject
Dim r As Range
Set cobject = ActiveSheet.ChartObjects(1)
Set r = ActiveSheet.Range(Cells(1, 1), Cells(37, 22))
cobject.Left = r.Left
cobject.Top = r.Top
cobject.Width = r.Width
cobject.Height = r.Height

'DISPLAY USERFORM 1
Userform1.Show


End Sub

私が作成した単純なユーザーフォームには、3 つのコマンド ボタンがあります。ボタン 1 は Sin (x)、ボタン 2 は Cos (x)、ボタン 3 は Tan (x) です。以下は、Button1_Click 用に作成したコードです。モジュール 1 の一部ではありません。これは、プロジェクト エクスプローラーの独自のセクションの下にあります。VBAProject/Forms/Userform1

Option Explicit
---------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()

Dim sinx As Series
Set sinx = c.SeriesCollection.NewSeries :::ERROR
With sinx
    .Values = Range(Cells(2, 39), Cells(82, 39))
    .XValues = Range(Cells(2, 38), Cells(82, 38))
    .Format.Fill.ForeColor.RGB = rgbBlack
    c.SeriesCollection(1).MarkerSize = 2
End With

End Sub

そこで... モジュール 1 を実行します。x 値をそれぞれの範囲に正常に生成し、sin (x) 値をそれぞれの範囲に生成し、グラフを作成して配置し、UserForm1 を表示します。でも!ユーザーフォームのボタン 1 をクリックすると、エラーが発生します...

コンパイル エラー: 変数が定義されていません

エラーの原因となっているコード行が強調表示されます。このコード行を :::ERROR で示しました。モジュール 1 でチャートとして定義した "c" をエラーが参照していると仮定します。定義された変数はモジュール 1 から userform1 に転送されないと思います。

私の目的は、ユーザーがユーザーフォームのsin(x)別名ボタン1またはcos(x)ボタン2またはtan(x)ボタン3をクリックできるようにすることであり、その後、sin、cos、またはtanのいずれかの曲線が上がるはずですチャート上。この問い合わせに対してコメントをくださったstackoverflowのすべてのメンバーに事前に感謝します。助けていただければ幸いです。

4

1 に答える 1

0

VBA変数にスコープがあることを(強調表示したエラーで)発見しています。宣言するモジュールで(モジュールレベルで)パブリックであると宣言しない限り、それらは宣言されているモジュールにのみ認識されます. 、およびそれらを使用する別のモジュールで再び。詳細については、この記事を参照してください。

質問に戻る: 宣言する

Option Explicit
Public c as Chart

モジュール 1 のモジュール レベル (Sub one() の前)。対応するものを削除

Dim c as Chart

内側からSub one()。次に、ユーザーフォームのコードを次のように変更します。

Option Explicit

Private Sub CommandButton1_Click()

Dim sinx As Series

Set sinx = c.SeriesCollection.Add(Source:=Range(Cells(2, 38), Cells(82, 39)), _
  CategoryLabels:=True)

With sinx
    .Format.Fill.ForeColor.RGB = rgbBlack
    c.SeriesCollection(1).MarkerSize = 2
End With

' important: must hide the dialog so control returns to the calling sub!
Me.Hide

End Sub

これらの変更により、私にとってはうまくいきました...

于 2013-03-15T03:55:37.137 に答える