【问题标题】:Select multiple columns in current region to create bar chart using Excel VBA选择当前区域中的多个列以使用 Excel VBA 创建条形图
【发布时间】:2013-08-02 09:38:05
【问题描述】:

谁能教我如何在 CurrentRegion 属性中选择多个列,以便我可以基于它创建条形图

以下是我到目前为止的进展.. 但是它不起作用

Public Function FourthTable()

Dim Source As Workbook
Dim Search As Range
Dim CR As Range

SRT = "Service Request Tickets (IIT)"

Set Source = Workbooks.Open("C:\Users\HP\Desktop\test.xlsx")

Source.Worksheets("Sheet1").Activate

Set Search = ActiveSheet.Cells.Find(SRT)

Source.Worksheets("Sheet1").Range(Search.Address).Offset(2, 0).CurrentRegion.Activate

ActiveCell.CurrentRegion.Columns.Range("A:A, 
C:C").Resize(ActiveCell.CurrentRegion.Rows.Count - 1).Select

ActiveSheet.Shapes.AddChart.Select
'ActiveChart.SetSourceData  
Source:=ActiveWorkbook.Sheets(1).Range(Search.Address).Offset(2, 
0).CurrentRegion.Resize(CR.Rows.Count - 1, CR.Columns.Count)
ActiveChart.ChartType = xl3DBarClustered
With ActiveChart
   .Perspective = 0
   .Elevation = 15
   .Rotation = 20
   .RightAngleAxes = True

End With

ActiveSheet.ChartObjects(1).Activate
ActiveSheet.ChartObjects(1).Cut
With Sheets("Sheet2")
.Select
.Range("A34").Select
End With

ActiveSheet.Paste
Source.Close SaveChanges:=True
End Function

我得到的错误信息是应用程序定义或对象定义的错误

我要选择的列是 A 列和 C 列。我无法通过指示“A34”或“C34”等单元格的地址来选择列,因为表格数据是使用程序工具生成的,并且因此表数据的位置每次都不同

下图是我参考的表格数据

http://postimg.org/image/gu05epzm9/

【问题讨论】:

  • 您要调整大小还是选择? activecell.currentregion.column 返回活动单元格的列号,该列号位于找到 srt 的单元格下方 2 行。从那里你告诉它选择 A 列和 C 列。如果我遗漏了什么,我很抱歉,但我不确定你想做什么。
  • 我的意图是使用 CurrentRegion 属性选择整个表数据并调整它的大小,使 B 列和最后一行不包含在我的选择中。从这里我可以根据我的选择创建条形图。我不确定我是否做得正确

标签: excel charts multiple-columns vba


【解决方案1】:

而不是这个:

  Source.Worksheets("Sheet1").Range(Search.Address).Offset(2, 0). _
       CurrentRegion.Activate

使用这个,收缩选定区域,从而排除数据表的最后一行和最后一列:

  Dim tbl As Range
  Set tbl = Source.Worksheets("Sheet1").Range(Search.Address).Offset(2, 0). _
      CurrentRegion
  tbl.Resize(tbl.Rows.Count - 1, tbl.Columns.Count - 1).Select

在继续注释或删除时:

'ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(1). _
     Range(Search.Address).Offset(2,0).CurrentRegion. _
     Resize(CR.Rows.Count - 1, CR.Columns.Count)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多