Excel - VBA |使图表显示具体系列取决于哪个按钮的用户点击



我是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/形式/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。然而!当我单击用户表单上的Button 1时,我得到一个错误…

编译错误:变量未定义

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

我的目标是让用户能够在用户表单上单击sin (x),即按钮1或cos (x)按钮2或tan (x)按钮3,然后sin, cos或tan的曲线应该出现在图表上。我提前感谢stackoverflow的所有成员对这个调查的评论。谢谢你的帮助。

您正在发现(与您突出显示的错误)VBA变量具有作用域:它们仅为声明它们的模块所知,除非您在声明它们的模块中将它们声明为公共(在模块级别)。,以及在使用它们的另一个模块中。

回到你的问题:declare

Option Explicit
Public c as Chart
模块1中模块级

(Sub one()之前);删除相应的

Dim c as Chart

from inside 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

最新更新