簡體   English   中英

使用VBA創建Excel圖表-錯誤的結果

[英]Creating Excel chart with VBA - wrong result

我在Excel中做了正弦計算器。
我嘗試將圖表插入工作表。
圖表應為正弦波,Y軸為振幅,X軸為時間。
問題是我得到了帶有兩個圖形的圖表:根據Y列為正弦圖,根據X列為折線圖。
這是我的代碼:

Public oneTimeFlag As Integer

Sub calc()

    Range("A3", Range("A2").End(xlDown)).Clear
    Range("B2", Range("B2").End(xlDown)).Clear

    Range("A2").Value = "0"

    lw = Int(Range("$I$3").Value + 1)

    If lw >= 4 And lw < 21000 Then

        Range("A3").Select

        ActiveCell.Formula = "=(2*PI()/$I$3)+A2"

        Range("A3:A" & lw).FillDown

        Range("B2").Select

        ActiveCell.Formula = "=ROUNDDOWN(POWER(2,$G$2)/2 + SIN(($F$7*2*PI()/360) + A2)*((POWER(2,$G$2)/2) -1), 0)"

        Range("B2:B" & lw).FillDown

        AddOrUpdateChartSheet (lw)

    Else
        MsgBox "Nof points must be 4 at least and less than 21000!"
    End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$5" Or Target.Address = "$F$6" Or Target.Address = "$F$7" Then
        Dim rng As Range
        Set rng = Range(Selection.Address)
        Call calc
        rng.Select

    End If
End Sub

Sub AddOrUpdateChartSheet(ByVal lw As Integer)
    Dim chtChart As Chart
    If oneTimeFlag <> 1 Then
        oneTimeFlag = 1

        Set chtChart = Charts.Add
        Set chtChart = chtChart.Location(Where:=xlLocationAsObject, Name:="Sheet1")
        With chtChart            
            .ChartType = xlLine


            .SetSourceData (ActiveSheet.Range("A1:B" & lw))
            .HasTitle = True
            .ChartTitle.Text = "Sine"

            With .Parent 
              .Name = "Sine"
            End With
        End With


    Else    
        Dim objChrt As ChartObject        
        Dim sineChartExists As Boolean
        sineChartExists = False

        For Each objChrt In ActiveSheet.ChartObjects
            If objChrt.Name = "Sine" Then
                sineChartExists = True
            End If
        Next

        If sineChartExists = False Then
            oneTimeFlag = 0
            AddOrUpdateChartSheet (lw)
        Else
            Set objChrt = ActiveSheet.ChartObjects("Sine")
            Set chtChart = objChrt.Chart

            With chtChart
                .SetSourceData (ActiveSheet.Range("A1:B" & lw))
            End With
        End If
    End If    
End Sub

我得到類似於: 正弦波的圖表

時鍾頻率,分頻器和DAC分辨率為常數。
用戶更改所需的頻率,幅度和相位。
工作表自動計算點數,計算點數(時間,dac_value),並根據點數創建所需的圖表。

如上所述,結果得到帶有兩個圖形的圖表(X軸是點數,Y軸-是幅度(DAC值))。
我只需要一個圖(正弦),X軸作為時間(A列),Y軸作為幅度(B列)的圖表。

創建圖表之前,請清除A1,然后再恢復標題:

Sub calc()

    Range("A1", Range("A2").End(xlDown)).Clear
    Range("B2", Range("B2").End(xlDown)).Clear

    lw = Int(Range("$I$3").Value + 1)

    If lw >= 4 And lw < 21000 Then
        Range("A2").Value = "0"

        Range("A3:A" & lw).Formula = "=(2*PI()/$I$3)+A2"

        Range("B2:B" & lw).Formula = "=ROUNDDOWN(POWER(2,$G$2)/2 + SIN(($F$7*2*PI()/360) + A2)*((POWER(2,$G$2)/2) -1), 0)"

        AddOrUpdateChartSheet lw
        Range("A1").Value = "X (Time)"

    Else
        MsgBox "Nof points must be 4 at least and less than 21000!"
    End If

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM