Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使用vba生成图形而不占用时间?_Excel_Vba - Fatal编程技术网

Excel 如何使用vba生成图形而不占用时间?

Excel 如何使用vba生成图形而不占用时间?,excel,vba,Excel,Vba,您好,我已经编写了一个生成图形的代码,它工作正常。 问题是它需要很多时间来生成。我不明白为什么要花时间。 代码是 Dim cc As Chart Set cc = ActiveWorkbook.Charts.Add Set cc = cc.Location(Where:=xlLocationAsObject, name:=assume) With cc .ChartType = xlXYScatterLines With .Parent

您好,我已经编写了一个生成图形的代码,它工作正常。 问题是它需要很多时间来生成。我不明白为什么要花时间。 代码是

    Dim cc As Chart

    Set cc = ActiveWorkbook.Charts.Add
    Set cc = cc.Location(Where:=xlLocationAsObject, name:=assume)

    With cc

     .ChartType = xlXYScatterLines

     With .Parent

       .Top = Columns(b).Offset(0, 4).Top
       .Left = Columns(b).Offset(0, 4).Left
       .name = "cc"

     End With

  End With

  Dim sc As Series
  Set sc = cc.SeriesCollection(1)

  With sc
      .Values = Columns(b).Offset(0, -3)
      .XValues = Columns(b).Offset(0, -5)
  End With

请有人帮帮我你关掉屏幕更新了吗?将以下内容添加到代码的开头:

Application.ScreenUpdating = False
Application.ScreenUpdating = True
然后在代码末尾添加以下内容:

Application.ScreenUpdating = False
Application.ScreenUpdating = True

试着用实际数据绘制列的行

Sub makeChart(b As String, assume As String) 'i presupposed these arguments based on your code

Application.ScreenUpdating = False

Dim cc As Chart

Set cc = ActiveWorkbook.Charts.Add
Set cc = cc.Location(Where:=xlLocationAsObject, Name:=assume)

With cc

    .ChartType = xlXYScatterLines

    With .Parent

        .Top = Columns(b).Offset(0, 4).Top
        .Left = Columns(b).Offset(0, 4).Left
        .Name = "cc"

    End With

End With


Dim strValue As String, strXValue As String

'here you are using the passed column letter to find the specific column you want to chart
strValue = Split(Range(b & "1").Offset(, -3).Address, "$")(1) 'will return "C" if given column F
strXValue = Split(Range(b & "1").Offset(, -5).Address, "$")(1) 'will return "A" if given column F

Dim sc As Series
Set sc = cc.SeriesCollection(1)

With sc

    'will select from row 1 to the last true used row in the given column
    .Values = Range(strValue & "1:" & strValue & Range(strValue & Rows.Count).End(xlUp).Row)
    .XValues = Range(strXValue & "1:" & strXValue & Range(strXValue & Rows.Count).End(xlUp).Row)

End With

Application.ScreenUpdating = True

End Sub

很难说为什么要花这么多时间,但我确实看到您使用了整整两列数据作为源。这可能是对Excel的一个巨大要求。你确定这就是你想要的吗?你好,斯科特,也许你是对的,但我可以知道如何选择一个特定的数据。我的意思是,我有列“A”中的数据,我不知道它有多少,它应该选择整个数据井,然后你应该看到动态命名范围。或者可以在VBA中动态创建范围,以便只获取列中包含数据的行。如果你愿意的话,我可以很快告诉你。@ScottHoltzman请告诉我我发布了一个带有代码语法的答案。您好,我使用了上面的代码。它工作得很好,但正如Scott解释的那样,它可能花费了太多时间,因为选择了整个coulmn,所以我只选择了包含sc的列中的数据。value=Columns(b).End(xlDown)…Offset(0,-3).XValues=Columns(b).End(xlDown).Offset(0,-5)End With,但它给出了错误,请帮助我对上面的代码进行链接,它完全按照我的要求工作,但您能告诉我如何使用Xvalue和Values@M_S_SAJJAN->如果您还有其他问题,请向SO发布一个新问题。