2013-07-29 48 views
0

我是VBA的初學者,只有MATlab的一些經驗。VBA用戶窗體:根據Combobox訪問不同的圖表

目前我正在嘗試使用Userform來顯示不同的圖形(在同一個用戶窗體上),具體取決於ComboBox的輸出。我將我的圖表顯示在this tutorial.上本質上,圖片保存爲GIF,然後用圖像控件打開。

例如,我將圖表保存爲Chart#_ ####; Chart1_4301。數字的順序是一樣的,在組合框的選項 - 我想1_4301在組合框中設置CurrentChart到Chart1_4301,然後通過保存GIF運行和加載圖像控制步驟

Private Sub Open_Graph_But_Click() 
'This sub opens a different graph depending on the combobox selection 

Set CurrentChart = "Chart" & ComboBox1.Value 


CurrentChart.Parent.Width = 900 
CurrentChart.Parent.Height = 450 

' Save chart as GIF 
Fname = ThisWorkbook.Path & Application.PathSeparator & "temp.gif" 
CurrentChart.Export Filename:=Fname, FilterName:="GIF" 

' Show the chart 
Image1.Picture = LoadPicture(Fname) 

End Subb 

我不知道它是否可能通過不同名稱的圖形循環,並且我試圖查找它是如何完成的,但是我不知道這是什麼意思,因此我很難找到有用的東西。

我發現導致我進入上述設置,但運行時錯誤爲'13':類型不匹配,其中Set CurrentChart = "Chart" & ComboBox1.Value高亮顯示。任何建議表示讚賞!

+0

確定兩種方法,一種您應該知道圖紙名稱,因此您可以使用圖表名稱來指定圖表名稱,如下所示:set CurrentChart = Worksheets(「SheetName」)。Shapes(「ChartName」)。圖表或工作表(「SheetName」)。ChartObjects(「ChartName」)。圖表。如果您不知道工作表名稱,那麼您可以循環遍歷所有形狀,如下所示(未經測試,只是一個示例): 對於每個工作表 對於sht.ChartObjects中的每個cht如果cht.Name =「YourChartName 「然後 集CurrentChart = CHT 退出對於 結束如果 接下來CHT 接下來SHT – Vikas

+0

@Vikas - 我可以看到你的建議是什麼,我認爲這是可行的。但是沒有辦法編寫一個允許VBA訪問圖形或其他任何文本的腳本,部分文本和部分變量? 如果您需要訪問60個不同的陣列,它們被命名爲Array1,Array2等。有沒有辦法說像For i = 1到60「數組」我...一些代碼...下一個? – Heaviside

回答

1

我爲了解釋它,我創建了下面的宏。在活動工作表中,圖表1,圖表2,圖表3和圖表4中有四個圖表。在單元格B23中,我輸入圖表1/2/3或4的「圖表名稱」,在此基礎上,我的下面的宏工程。無論我輸入什麼圖表,它都會將選定的圖表設置爲紅色背景,其餘3格式設置爲黃色背景。我無法附上我的書,因爲我無法找到辦法。如果您仍然不知道如何操作,請將您的電子郵件發送給我,我將上傳工作簿。

Sub RunMacro() 

Dim sht As Worksheet 
Dim co As ChartObject 

Dim selectedChart As String 

Set sht = ActiveSheet ' it may be your sheet like Worksheets("Sheet1") or Worksheets("Sheet2") 

selectedChart = sht.Range("B23").Value ' assign the selected chart from combobox 

Dim chrt As Chart 

'''option 1: Loop through all the charts 


For Each co In sht.ChartObjects 
    If co.Name = selectedChart Then 
     co.Chart.ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 0, 0) 
    Else 
     co.Chart.ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 0) 
    End If 
Next co 

'option 2: select the chart directly and popup the size 




Set chrt = sht.ChartObjects(selectedChart).Chart 

MsgBox "Selected Chart is " & selectedChart & " and the chart is for " & chrt.ChartTitle.Text 

End Sub 

希望這會有所幫助。 Vikas B