回 帖 发 新 帖 刷新版面

主题:弄的我睡不着的基础问题

还是在 excel 里

我录制了一个关于生成图表的宏,其中源数据区的选择代码我认为是这一句
 ActiveChart.SetSourceData Source:=Sheets("数据处理").Range(H5:H30), PlotBy:= _
        xlColumns

我想实现通过代码控制 源数据区 选择问题

通过在网络上查找资料
将关于Range的部分修改成Range(Cells(x, 6), Cells(y, 6))
x=5,y=30都已经定义.
但是调试时提示:方法'Cells'作用于对象'_Giobal'失败

我承认VB基础薄弱..但我手里的那份VBA资料里也没提到 range 的基本句法..只好再来这里求助..
顺便请大家给我介绍一份比较不错的VBA资料

回复列表 (共40个回复)

沙发

Range(Cells(x, 6), Cells(y, 6))

照这个描述,你的数据是:Fx:Fy,也就是说,假如你的x=1, y=10,这个范围是:F1:F10,一个单排坚列,这不太可能,一个单排的横列出现机率还是有的。

所以我推测,你对cells代替常规的Range("A1:F10")的表达方法不熟悉。

Range(Cells(x1, y1), Cells(x2, y2))
第一个cell是你要取的范围的最左上角的单元格,第二个cell是要取的最右下角的单元格。

Cells(x, y)
x表示第几行,y表示第几列,这和Range("A10")是反过来的,Range("A10")用cells表示就是:
Cells(10, 1)
其中的y,如是A列是1,B列是2......

板凳

也就是说

取单排竖列的可行性不大了.

按照教材我换了一个方法

前面加上
Dim rCurrentRange As Range
Set rCurrentRange = Selection

把这句代码换成
ActiveChart. SetSourceData Source := rCurrentRange, PlotBy :=_
XlColumns

用来手动选择数据区域


虽然可行
但是,我不知道 Selection 怎么判断,当我不选的时候就会出错
我设想用一个分支结构提示我没选数据或者选择的区域不正确,比如没选中F列
 那么  Selection 的条件怎么写呢?

3 楼

关于VBA学习的资料,好像没有太公认的好书。

VBA的语法和VB的基本相同,要用好它,主要是要熟悉VBA特有的对象、方法、事件,比如在Excel中,它有很多对象是它独有的,比如:Workbooks、ActiveWorkbook、sheets、Range、Cell、Row、Rows、Columns......

每个对象又有它独特的方法,比如Workbooks等的Add,大部分对象的Select、Activate等,这些也和标准VB有很大的不同。

再有就是事件,比如Workbook的:

Workbook_BeforeClose、Workbook_Open、Workbook_SheetChange

等等。

还有一个要点就是VBA的函数,它有很多独特的函数,要在学习过程中逐步熟悉。

我当初学习VBA就是工作中的需要时,就尝试去做,用录制对比,最重要的是要看VBA的Help,英文能看的懂就有较大的帮助。就这样一两年后,到书店里去买了本一个老外写的700多页的书,回去一看就后悔了,基本上都是实战中掌握的东西。

所以个人认为,最好的资料就是在线的VBA Help。

4 楼

再一个,生成图表所用的数据几乎都是单排数列的...

看来今晚我要失眠着进入2008了...

5 楼

你用Selection还是得先用Range选取,又走回头了,还不如直接用Range,比如你要取"A1:F10":

Range("A1:F10").Select

或者:

Range(Cells(1,1), Cells(10, 6)).Select

然后的Selection就是上面的范围了。

6 楼

把你的图表用手工生成用附件放上来看看。

7 楼

传完了.
必须先选中才能执行.....
我就是想加个IF进去
如果没选中或选错 那就
MSGBOX

8 楼

因为是几千个数据
我需要反复抽一段数据来看其稳定性
所以不能定死A1:A10...

9 楼


如果直接录制很简单。但如果代码控制,这个Chart对象对代码的支持不是很好,要绕绕弯路。

1、声明一个Chart对象变量;
2、先设定它的Location为当前工作表;
3、然后用ActiveChart控制,用对象变量不能操纵。

参考代码:

[code=c]
Sub 图表()
Dim oChart As Chart

    Set oChart = Charts.Add
    
    oChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Range("A1:A7"), PlotBy:= _
            xlColumns   '这里的Range和上面的ChartType可根据需要设
                        '参数可通过录制对比得到
            
    Set oChart = Nothing
    
End Sub
[/code]

10 楼

我把代码修改了一下,
仍使用当前选择的那段代码

Sub 图表2()
Dim oChart As Chart
Dim rCurrentRange As Range

Set rCurrentRange = Selection

 Set oChart = Charts.Add
    
    oChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=rCurrentRange, PlotBy:= _
            xlColumns   '这里的Range和上面的ChartType可根据需要设
                        '参数可通过录制对比得到
            

    
End Sub

区域可变那是必须的.
但是 Selection 为空的条件仍然不会加...
类似于 if Selection = nothing then ...

我来回复

您尚未登录,请登录后再回复。点此登录或注册