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, ...)