2017-08-17 38 views
0

首先,感謝您在過去的所有幫助,這個網站是一個祝福,你們都是聖人。現在到商業VBA - 不正確的圖形代碼

我有一套我的測試數據,其他圖形正確,但是,這組數據導致我的圖形看起來錯了。我想我發現了這個問題,但我不確定如何解決它。當我的代碼創建要繪製的範圍時,由於數學錯誤,它不會抓取正確的範圍。作爲參考,DataLength = 102,這是圖表和一部分數據的樣子。 graph我需要繪製到"CZ",但它只會去D,因爲fRemainder = 0這裏是缺少怪異代碼。

Dim iAlpha As Integer, fAlpha As Integer 
    Dim iRemainder As Integer, fRemainder As Integer 
    Dim ConvertToLetter As String 
    Dim fConvertToLetter As String 

    iAlpha = Int((DataLength)/26) '26 for the letters 
    fAlpha = Int((DataLength + 2)/26) 'for the average and sd functions, since they start at C not A 
    iRemainder = DataLength - (iAlpha * 26) 
    fRemainder = DataLength + 2 - (fAlpha * 26) 
    If iAlpha > 0 Then 
     ConvertToLetter = Chr(iAlpha + 64) 
    End If 
    If iRemainder > 0 Then 
     ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) 
    End If 
    If fAlpha > 0 Then 
     fConvertToLetter = Chr(fAlpha + 64) 
    End If 
    If fRemainder > 0 Then 
     fConvertToLetter = fConvertToLetter & Chr(fRemainder + 64) 
    End If 

而作爲附加參考,這是實際的圖形代碼是。第一行從"C13"偏移,但是單元隨每個分組而改變,即。 "C13" "C49" "C85"

ActiveCell.Offset(-7, -2).Select 
ActiveCell.Range("A1:" & fConvertToLetter & "4").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select 
ActiveCell.Activate 
Range(Selection, Selection.End(xlToRight)).Select 
ActiveSheet.Shapes.AddChart.Select 
With ActiveChart 
    .ChartType = xlLine 
    .Axes(xlCategory).Select 
    .HasTitle = True 
    .ChartTitle.Text = Range("B" & (12 * x - 5)).Value 
End With 
With ActiveChart.Parent 
    .Top = 153 * x + 12.75 * 2 ' reposition cells are 12.75 high and there are 36 cells between 
    .Left = 50 ' reposition 
End With 

回答

2

有不同的方式來定義用於圖表的範圍。在下面的例子中,我展示了兩種方法,一種是製作初始圖表,另一種是基於向圖表添加新系列。最好刪除宏記錄器使用的語句,如selection.select,而是定義範圍變量。這些範圍變量可以根據需要使用.offset函數進行微調。按照我在動畫.gif中顯示的代碼逐步完成代碼,以幫助理解它的工作原理,然後根據需要爲應用程序進行調整。

enter image description here

Option Explicit 
Sub chartRange() 
Dim r As Range, chObj As ChartObject, ser As Series 
Set r = ActiveSheet.Range("A1:B5") 
Set chObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225) 
    With chObj 
    .chart.ChartType = xlXYScatterLines 
    .chart.SetSourceData Source:=r 
    End With 
    If MsgBox("Plot y2 also?", vbYesNo) Then 
     Set ser = chObj.chart.SeriesCollection.NewSeries 
     Set r = ActiveSheet.Range("A1:A5") 
     ser.XValues = r 
     ser.Values = r.Offset(0, 2) 
     ser.Name = "y2" 
    End If 
End Sub 
+0

你會怎麼推薦編輯我的圖形代碼,因爲我不知所措我有點這裏。我需要繪製的範圍永遠不會是有限的,並隨着每次使用而變化。我需要確保它與一組數據集一起工作。 –

+1

這裏有一個例子。設置r =範圍(「A1」)。end(xlDown)是一種爲具有未知長度的連續數據列定義範圍的方法。如果你花一些時間來了解範圍函數,我認爲它可以幫助你很長一段時間,現在和將來都會有所幫助。 –

+1

更正:設置r =範圍(「A1」)。end(xlDown)只會讓你到底部的連續範圍。要定義從A1到其底部的連續範圍,請使用Set r = Range(「A1」)作爲一行代碼,然後在下一行Set r = Range(r,r.end(xlDown)) –