Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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 使用阵列时如何解决运行时错误6_Excel_Vba - Fatal编程技术网

Excel 使用阵列时如何解决运行时错误6

Excel 使用阵列时如何解决运行时错误6,excel,vba,Excel,Vba,我正在构建一个数组字符串,该字符串通过将数组值除以一个变量(即X)来转换为百分比 我面临的问题是,我的数组有时会返回一些数组字符串值的零值,这会导致代码溢出,当数组值=0&X=0时,它会挂起在数组值/X。 如何修改宏以跳过对空值或零值的分割 代码 那真是太多了: 把它分开;将计算单个值与构建值数组分开: 如果x 0那么 Dim percentClientInterested为双精度 percentClientInterested=clientInterested(开始日期、结束日期)/x Dim

我正在构建一个数组字符串,该字符串通过将数组值除以一个变量(即
X
)来转换为百分比

我面临的问题是,我的数组有时会返回一些数组字符串值的零值,这会导致代码溢出,当数组值=0&X=0时,它会挂起在
数组值/X
。 如何修改宏以跳过对空值或零值的分割

代码


那真是太多了:

把它分开;将计算单个值与构建值数组分开:

如果x 0那么
Dim percentClientInterested为双精度
percentClientInterested=clientInterested(开始日期、结束日期)/x
Dim Percentclient下降了一倍
PercentClientDevered=ClientDevered(开始日期、结束日期)/x
...
如果结束
.values=数组(percentClientInterested、PercentClientDecended,…)
这样,如果
x=0
,则单个数组元素将为
0
,并且您将拥有有效的数据


也就是说,除以零应该抛出错误11“除以零”,而不是错误6“溢出”。我怀疑
x
实际上不是
0
,而是非常接近的东西;根据我们正在查看的
数组值的类型,被非常小的数字除可能会导致溢出错误。

被零除应该是被零除的错误(11),而不是溢出(6)。当
x
0
时需要发生什么?您的解决方案看起来更干净、更有条理!工作得很好@Jose谢谢,我仍然很好奇我们在看什么样的
x
——如果
x
在0和1之间是合法的,非常接近但不等于0,您仍然可能会遇到溢出错误。在这种情况下,您需要确定一个阈值,低于该阈值,您将
x
视为0。
Sub buildMixChart(ByVal startdate As Date, ByVal endDate As Date)
Dim ws As Worksheet
Dim arr() As Variant
Dim srs As Series
Dim cht As ChartObject
Dim ch As Chart
Dim axs As Axis
Dim x As Long

x = selectedDatesTotalCalls(startdate, endDate)

Set ws = Sheets("Analysis Report")
Set cht = Sheets("Analysis Report").ChartObjects.Add(Left:=225, Width:=800, Top:=530, Height:=150)
cht.Chart.ChartType = xlColumnClustered

With cht
Set srs = .Chart.SeriesCollection.NewSeries

    .Chart.SeriesCollection(1).Interior.Color = RGB(232, 32, 118)
    .Chart.ApplyDataLabels
    .Chart.SeriesCollection(1).DataLabels.NumberFormat = "0%"
    .Chart.SeriesCollection(1).DataLabels.Font.Name = "Arial"
    .Chart.SeriesCollection(1).DataLabels.Font.Size = 12
    .Chart.SeriesCollection(1).DataLabels.Font.Bold = True
    .Chart.SeriesCollection(1).Format.Line.Visible = False
    .Name = "Portfolio Mix"
End With

For Each cht In ws.ChartObjects
Set ch = Sheets("Analysis Report").ChartObjects("Portfolio Mix").Chart
For Each axs In ch.Axes

    axs.HasMajorGridlines = False
    axs.Border.LineStyle = False

Next
Next cht

With ch.Axes(xlValue, xlPrimary)
    .Border.LineStyle = xlNone
    .MajorTickMark = xlNone
    .MinorTickMark = xlNone
    .TickLabelPosition = xlNone
End With

With ch
    .HasLegend = False
End With
Set ch = Nothing

With srs
    .Border.Color = vbWhite
    .XValues = Array("Client Interested", "Client Declined", "Appt", "Left VM", "Sent Letter", "Sent Email", "Unble to Rch", "Req. Call Later")

    'error happens here
    .values = Array(clientInterested(startdate, endDate) / x, clientDeclined(startdate, endDate) / x, clientAppt(startdate, endDate) / x, vmLeft(startdate, endDate) / x, letterSent(startdate, endDate) / x, emailSent(startdate, endDate) / x, unabletoReach(startdate, endDate) / x, reqCallLater(startdate, endDate) / x)
End With


  'remove the shape border
With ActiveSheet
    .Shapes("Portfolio Mix").Line.Visible = False
End With
End Sub
.values = Array(clientInterested(startdate, endDate) / x, clientDeclined(startdate, endDate) / x, clientAppt(startdate, endDate) / x, vmLeft(startdate, endDate) / x, letterSent(startdate, endDate) / x, emailSent(startdate, endDate) / x, unabletoReach(startdate, endDate) / x, reqCallLater(startdate, endDate) / x)
If x <> 0 Then
    Dim percentClientInterested As Double
    percentClientInterested = clientInterested(startdate, endDate) / x

    Dim percentClientDeclined As Double
    percentClientDeclined = clientDeclined(startdate, enddate) / x

    ...

End If
.values = Array(percentClientInterested, percentClientDeclined, ...)