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

我创建的简单用户窗体有三个命令按钮。按钮 1 用于 Sin (x),按钮 2 用于 Cos (x),按钮 3 用于 Tan (x)。下面是我为 Button1_Click 编写的代码。它不是模块一的一部分。它位于项目资源管理器中自己的部分下。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 时,出现错误...

编译错误:未定义变量

Excel 请突出显示导致错误的代码行。我用 :::ERROR 表示这行代码我假设错误是指我在模块 1 中定义为图表的“c”。我猜定义的变量不会从模块 1 转移到 userform1。

我的目标是让用户能够单击用户窗体上的 sin (x) aka 按钮 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 回答