標題:
[發問]
請問該如何用VBA自動化出股票K線圖呢?
[打印本頁]
作者:
j1221
時間:
2011-1-16 23:19
標題:
請問該如何用VBA自動化出股票K線圖呢?
本帖最後由 j1221 於 2011-1-16 23:50 編輯
各位前輩好,小弟又來叨擾了,這次我的問題如下:
我利用VBA先抓出我要的資料後,然後再將所抓出來的資料化成K線圖
在畫圖的部份,因為小弟不知道該怎麼寫,所以我是利用錄製巨集的功能,把巨集製作出來。
但製作好之後,當我想要重新執行一次巨集的時候,跳出對話視窗「ChartType 方法(Chart物件)失敗」
可否請問是甚麼問題,該如何解決呢?
煩請參閱附件(Module 2)
[attach]4416[/attach]
作者:
skybbs
時間:
2011-1-17 18:35
Hello,
如果是在活頁簿裡的資料, 建議直接使用圖表的方式繪製就可以了.
這樣子比較簡單快速.
作者:
Hsieh
時間:
2011-1-17 21:01
回復
1#
j1221
先改變資料數列再設定圖表類型
Sub Macro1()
'
' Macro1 Macro
' Shih-Hao 在 2011/1/16 錄製的巨集
'
'
Charts.Add
'ActiveChart.ChartType = xlStockOHLC '取消這行
ActiveChart.SetSourceData Source:=Sheets("76C").Range("A1:N22"), PlotBy:= _
xlColumns
ActiveChart.SeriesCollection(5).Delete
ActiveChart.SeriesCollection(5).Delete
ActiveChart.SeriesCollection(5).Delete
ActiveChart.SeriesCollection(5).Delete
ActiveChart.SeriesCollection(5).Delete
ActiveChart.SeriesCollection(1).XValues = "='76C'!R2C1:R22C1"
ActiveChart.SeriesCollection(2).XValues = "='76C'!R2C1:R22C1"
ActiveChart.SeriesCollection(3).XValues = "='76C'!R2C1:R22C1"
ActiveChart.SeriesCollection(4).XValues = "='76C'!R2C1:R22C1"
ActiveChart.Location Where:=xlLocationAsObject, Name:="76C"
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.ChartType = xlStockOHLC '這裡才改變類型
End With
ActiveChart.HasLegend = False
Windows("test1.xls").SmallScroll Down:=7
ActiveSheet.Shapes(1).IncrementLeft -168.75
ActiveSheet.Shapes(1).IncrementTop 269.25
Windows("test1.xls").SmallScroll Down:=6
ActiveSheet.Shapes(1).ScaleWidth 1.53, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes(1).ScaleHeight 1.36, msoFalse, msoScaleFromTopLeft
ActiveChart.PlotArea.Select
With Selection.Border
.ColorIndex = 16
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection.Interior
.ColorIndex = 2
.PatternColorIndex = 1
.Pattern = xlSolid
End With
With Selection.Border
.ColorIndex = 16
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection.Interior
.ColorIndex = 40
.PatternColorIndex = 1
.Pattern = xlSolid
End With
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.NumberFormatLocal = "yyyy-mm-dd"
End Sub
複製代碼
作者:
j1221
時間:
2011-1-18 12:16
感激Hsieh板主,受教了....
但可否請問您,為何要「先改變資料數列再設定圖表類型」才對呢?
再次感謝
作者:
Hsieh
時間:
2011-1-18 13:35
回復
4#
j1221
k線圖資料必需依序排列
你若直接用所有欄位直接製圖會以預設的直調圖呈現
若直接轉換類型,EXCEL也會出現警告視窗,要求變更資料範圍
作者:
j1221
時間:
2011-1-20 11:58
回復
5#
Hsieh
Hsieh大感恩,又學到一樣東西。可否再請教您如何指定工作表的問題。我先定義了兩個變數c 和 op,c 為數字,op為文字
。然後我利用 ThisWorkbook.ActiveSheet.Name = c & op 命名目前的工作表。但知後我想要再指定這個工作表時該如何指定?
我是用 Sheets("c & op").Cells(i, 1)....
煩請您參考附件,在Module 1的列32,感謝。:D
[attach]4465[/attach]
作者:
Hsieh
時間:
2011-1-20 12:20
回復
6#
j1221
Sheets(c & op).Cells(i, 1).PasteSpecial
作者:
j1221
時間:
2011-1-20 12:34
回復
7#
Hsieh
Hsieh大抱歉,請問在繪製圖表裡面的部份該怎麼改?比如說這個?
ActiveChart.SeriesCollection(1).XValues = "='c & op'!R2C1:R22C1"
作者:
Hsieh
時間:
2011-1-20 12:39
回復
8#
j1221
ActiveChart.SeriesCollection(1).XValues = "='" & c & op & "'!R2C1:R22C1"
作者:
j1221
時間:
2011-1-20 13:08
回復
9#
Hsieh
Hsieh大,抱歉又有問題了.....這次問題出在我跑完d=1,進入d=2時。在
With Sheets("data")
Cells(1, 1).EntireRow.Select
Selection.Copy
Sheets.Add After:=Sheets("data")
ActiveSheet.Cells(1, 1).PasteSpecial
ThisWorkbook.ActiveSheet.Name = c & op
End With
出現「Class Range的Select 方法失敗」的訊息,為什麼第一圈沒有問題,第二圈的時候就會出來選擇錯誤??感謝您
作者:
Hsieh
時間:
2011-1-20 16:24
回復
10#
j1221
應該是SELECT的問題
With Sheets("data")
.Cells(1, 1).EntireRow.Copy
Sheets.Add After:=Sheets("data")
ActiveSheet.Cells(1, 1).PasteSpecial
ThisWorkbook.ActiveSheet.Name = c & op
End With
複製代碼
作者:
j1221
時間:
2011-1-21 12:13
回復
11#
Hsieh
感激大大....一切OK了!!:D
作者:
j1221
時間:
2011-1-22 11:39
回復
11#
Hsieh
Hsieh大,抱歉又來打擾了....
可以使用之後,我還想再加一個「輸入和約月份」的對話框,這樣可以選擇需要挑出的月份
我是這樣寫的
f = Application.InputBox(prompt:="請輸入合約結算月份(格式:yyyymm)")
然後在挑取資料的時候
If Sheets("data").Cells(i, 3).Value = f
可是好像excel認不出來這個 f ,所以我無法把資料挑選出來,可否請問您為什麼嗎?
請您參考附件,感謝:D
[attach]4485[/attach]
作者:
Hsieh
時間:
2011-1-22 11:47
回復
13#
j1221
Sheets("data").Cells(i, 3).Value = Val(f)
因為inputbox位指定變數型態則會以字串形態默認
所以f是一個數字組合的字串
但是,你工作表的年月是通用格式,所以被認為是數値
所以判斷式數直是不可能跟字串相等
故此將f使用VAL函數轉為數值即可
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)