主题:弄的我睡不着的基础问题
恶少老七
[专家分:110] 发布于 2007-12-30 23:45:00
还是在 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资料
最后更新于:2007-12-31 10:56:00
回复列表 (共40个回复)
21 楼
btxdlibin [专家分:2430] 发布于 2008-01-05 10:36:00
on error goto out
....
out:
end sub
22 楼
恶少老七 [专家分:110] 发布于 2008-01-05 13:43:00
楼上您的回答..呃..一时接受不了
23 楼
华山论剑 [专家分:5310] 发布于 2008-01-05 14:00:00
[quote]这个句法在前面的帖子中您已经教会我了
但是放在这句代码中却不知道该怎么用,还请指教.[/quote]
也可以用之前的Selection,就是先用:
Range("A1:A7"(换成你需要的)).Select
然后:
ActiveChart.SeriesCollection(1).XValues = "=数据处理!" & Selection.Address(False, False)
24 楼
恶少老七 [专家分:110] 发布于 2008-01-05 14:33:00
提示是 不能设置类 Series 的 XValues属性.....
25 楼
恶少老七 [专家分:110] 发布于 2008-01-07 09:04:00
由变量控制X轴的数值我没弄出来
最后我的解决方法是将一列65536个单元格全部选中
发现效果正好合用~
再次对华山表示感谢~
26 楼
华山论剑 [专家分:5310] 发布于 2008-01-07 10:17:00
[quote]由变量控制X轴的数值我没弄出来[/quote]
最好是放上一个能说明你问题的简化附件以方便测试和调试,不然没在环境中试,凭经验写出代码的可能不对。
27 楼
恶少老七 [专家分:110] 发布于 2008-01-07 16:30:00
今天破了一个老兄的代码
看到了他是这么处理的
ActiveChart.SeriesCollection(1).Values = "=数据处理!R8C8:R" & Trim(CStr(c)) & "C8"
用这个也能解决我的问题,不过我对 Trim(CStr(*)) 这句并不是很理解
放上来看看讨论讨论~
附件太大了我也不太会简化,刚接触VBA,出个图慢死...哎...
---------
最近修改..也没啥不好理解的..返回字符串......
28 楼
恶少老七 [专家分:110] 发布于 2008-01-07 16:43:00
节前你发的那个关于判断为空的条件代码
Dim oCell As Range
For Each oCell In Selection.Cells
If IsEmpty(oCell) Then
Exit Sub
End If
Next
Set oCell = Nothing
我仔细试了多次,发现这段代码是判断所选区域有无空格的.
所选区域只要有一个空格,那么这个条件就成立,直接 exit sub.
而实际上使用时就不大方便.
用的条件是 所选完全为空时才成立,不全为空格时不成立.
这段代码该怎么改?
29 楼
华山论剑 [专家分:5310] 发布于 2008-01-07 17:29:00
看了看附件,我明白你想要的了。
你说的另一种用字符转换得到地址的方法也行,但是控制太繁琐,可以试试以下方法:
Dim r As Range
Set r = Range(Cells(1, 1), Cells(7, 1))
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=r, PlotBy:= _
xlColumns
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Set r = Nothing
之前用:
ActiveChart.SetSourceData Source:=Range(Cells(1, 1), Cells(7, 1)), PlotBy:= _
xlColumns
这句失败的原因是:在创建了chart后,以前的sheet已经不是ActiveSheet了,现在的Active的对象是新建的Chart,那么上面的:
Range(Cells(1, 1), Cells(7, 1))
就不知道是那个Sheet的。所以也可以如下修改:
ActiveChart.SetSourceData Source:=Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(7, 1)), PlotBy:= _
xlColumns
但这样的语法太繁琐了,太多限定词,不如上面的简明。
30 楼
华山论剑 [专家分:5310] 发布于 2008-01-07 17:43:00
要判断Range里全部为空,可以用:
If WorksheetFunction.CountA(Selection) = 0 Then
Msgbox "No data in selection."
End If
我来回复