回 帖 发 新 帖 刷新版面

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

还是在 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个回复)

21 楼

on error goto out
....


out:
end sub

22 楼

楼上您的回答..呃..一时接受不了

23 楼

[quote]这个句法在前面的帖子中您已经教会我了

但是放在这句代码中却不知道该怎么用,还请指教.[/quote]

也可以用之前的Selection,就是先用:

Range("A1:A7"(换成你需要的)).Select

然后:

ActiveChart.SeriesCollection(1).XValues = "=数据处理!" & Selection.Address(False, False)

24 楼

提示是 不能设置类 Series 的 XValues属性.....

25 楼

由变量控制X轴的数值我没弄出来

最后我的解决方法是将一列65536个单元格全部选中

发现效果正好合用~

再次对华山表示感谢~

26 楼

[quote]由变量控制X轴的数值我没弄出来[/quote]

最好是放上一个能说明你问题的简化附件以方便测试和调试,不然没在环境中试,凭经验写出代码的可能不对。

27 楼

今天破了一个老兄的代码

看到了他是这么处理的

 ActiveChart.SeriesCollection(1).Values = "=数据处理!R8C8:R" & Trim(CStr(c)) & "C8"

用这个也能解决我的问题,不过我对  Trim(CStr(*)) 这句并不是很理解
放上来看看讨论讨论~

附件太大了我也不太会简化,刚接触VBA,出个图慢死...哎...

---------
最近修改..也没啥不好理解的..返回字符串......

28 楼

节前你发的那个关于判断为空的条件代码

    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 楼


看了看附件,我明白你想要的了。

你说的另一种用字符转换得到地址的方法也行,但是控制太繁琐,可以试试以下方法:

    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 楼

要判断Range里全部为空,可以用:

    If WorksheetFunction.CountA(Selection) = 0 Then
        Msgbox "No data in selection."
    End If

我来回复

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