2012-03-09 94 views
1

我在Excel中有一個VBA代碼,它會自動創建圖形並將其格式化,然後粘貼到圖表excel表單中。代碼似乎對除股票圖之外的所有圖都正常工作。每當我運行宏,我都能看到圖表創建,但是當涉及到格式化和特殊粘貼時,圖形變成了invisibel。換句話說,當代碼運行完畢後,我無法看到圖形。Excel中的股票圖有些奇怪

我不知道股票圖是怎麼回事?任何人都可以解釋並告訴我一個解決方案嗎? 非常感謝。

這裏是我的代碼:

Sub CreateGraph() 
Dim MyRng As Range 
Dim LastCell As Long 
LastCell = Worksheets(1).Range("E3").End(xlDown).Row 
Set MyRng = Worksheets(1).Range("B3:E" & LastCell) 
    ActiveSheet.Shapes.AddChart.Select 
    ActiveChart.SetSourceData Source:=MyRng 
    ActiveChart.ChartType = xlStockHLC 
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart1" 
End Sub 

Sub FormatChart() 
Let Title = Sheets("Sheet1").Cells(2, 1) 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.SeriesCollection(1).Select 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.Axes(xlCategory).Select 
    ActiveChart.Axes(xlCategory).ReversePlotOrder = True 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.SetElement (msoElementChartTitleAboveChart) 
    ActiveChart.ChartTitle.Select 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.ChartTitle.Text = Title & "responses*" 
    With ActiveChart.ChartTitle.Font 
    .Name = "Arial" 
    .FontStyle = "Bold" 
    .Size = 8 
    End With 
    With ActiveChart.Axes(xlCategory).TickLabels.Font 
    .Name = "Arial" 
    .FontStyle = "Regular" 
    .Size = 7 
    End With 
    With ActiveChart.Axes(xlValue).TickLabels.Font 
    .Name = "Arial" 
    .FontStyle = "Regular" 
    .Size = 7 
    End With 
    With ActiveChart.PlotArea.Interior 
    .ColorIndex = 2 
    .PatternColorIndex = 1 
    .Pattern = xlSolid 
    End With 
    Range("S4").Select 
    ActiveWindow.SmallScroll Down:=48 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.Legend.Select 
    With ActiveChart.Legend.Font 
    .Name = "Arial" 
    .FontStyle = "Regular" 
    .Size = 8 
    End With 
    ActiveWindow.SmallScroll Down:=45 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.PlotArea.Select 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveWindow.SmallScroll Down:=-45 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.Axes(xlValue).MajorGridlines.Select 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveWindow.SmallScroll Down:=-54 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.ChartArea.Select 
    ActiveChart.ChartArea.Width = 500 
    ActiveChart.ChartArea.Height = 1000 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.Axes(xlValue).MajorGridlines.Select 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.Axes(xlValue).Select 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.Axes(xlValue).MajorGridlines.Select 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveSheet.ChartObjects("Chart 1").Activate 
    ActiveChart.Axes(xlValue).Select 
    ActiveChart.Axes(xlValue).MinimumScale = 0 
    ActiveChart.Axes(xlValue).MaximumScale = 100 
    ActiveChart.Axes(xlValue).MajorUnit = 20 
    ActiveChart.Axes(xlValue).MajorUnit = 10 
     With ActiveChart.SeriesCollection(1) 
     .Interior.Color = RGB(0, 51, 153) 
    End With 
      With ActiveChart.SeriesCollection(2) 
     .Interior.Color = RGB(80, 116, 77) 
    End With 
     ActiveSheet.ChartObjects("Chart 1").Activate 
     ActiveSheet.ChartObjects("Chart 1").Activate 
    Selection.Cut 
    Sheets("Chart2").Select 
    ActiveChart.Paste 
End Sub 
+0

,如果你發佈一些代碼的你可能會得到更好的反應。 – bernie 2012-03-09 17:30:38

+0

謝謝Adam。我上面發佈了我的代碼。 – Nupur 2012-03-09 22:10:12

回答

0

Nupur,

試一下這個(久經考驗

代碼替換

ActiveSheet.ChartObjects("Chart 7").Activate 
ActiveSheet.ChartObjects("Chart 7").Activate 
Selection.Cut 
Sheets("Chart2").Select 
ActiveChart.Paste 

ActiveSheet.ChartObjects("Chart 7").Activate 
ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart2" 

建議:我相信你記錄了一個宏嗎? :)這兩片的代碼做同樣的事:) Excel中的方式是相當「謙虛」你只需要一次告訴它;)

ActiveSheet.ChartObjects("Chart 1").Activate 
ActiveSheet.ChartObjects("Chart 1").Activate 
ActiveSheet.ChartObjects("Chart 1").Activate 
ActiveSheet.ChartObjects("Chart 1").Activate 
ActiveSheet.ChartObjects("Chart 1").Activate 

ActiveSheet.ChartObjects("Chart 1").Activate 

你可以放心地刪除多餘的行。

HTH

希德

+0

@ Sid:謝謝你的迴應。代碼工作正常,但給出錯誤:「特定維度對當前圖表類型無效」。在調試它突出顯示的行:ActiveChart.Location其中:= xlLocationAsObject,名稱:=「Chart2」 – Nupur 2012-03-12 15:54:01

+0

@Nupur:我測試了代碼,它工作正常。如需快速解決方案,您可以在www.wikisend.com上傳您的文件並在此分享鏈接? – 2012-03-12 15:55:45

+0

嗨錫德!我有點想通了爲什麼代碼給我一個運行時錯誤。當我將Name:=「Chart2」更改爲Name:=「Sheet1」時,代碼工作良好。但我仍然需要將圖表保存在「圖表」表格中,而不是常規表格。 – Nupur 2012-03-29 16:58:36