Arrays Excel VBA运行时错误';6';填充数组时

Arrays Excel VBA运行时错误';6';填充数组时,arrays,excel,vba,Arrays,Excel,Vba,我已经解决了这个问题。问题与代码(直接)无关。这与lRow变量有关。该值由我的电子表格上的公式填充,然后由另一个宏填充。我发现我插入了一列,因此更新了错误的列。我更改了代码以更新命名范围而不是实际地址,问题消失了。仍然有点奇怪,因为第24行中的值对我来说是有效的,所以这段代码失败了 感谢所有的投入 希望有人能帮忙。我最近开始在尝试运行代码时出错 此错误出现在以下代码行: NewArr = Sheets("Input Sheet").Range("A" & lRow & ":B

我已经解决了这个问题。问题与代码(直接)无关。这与lRow变量有关。该值由我的电子表格上的公式填充,然后由另一个宏填充。我发现我插入了一列,因此更新了错误的列。我更改了代码以更新命名范围而不是实际地址,问题消失了。仍然有点奇怪,因为第24行中的值对我来说是有效的,所以这段代码失败了

感谢所有的投入


希望有人能帮忙。我最近开始在尝试运行代码时出错

此错误出现在以下代码行:

NewArr = Sheets("Input Sheet").Range("A" & lRow & ":BJ" & lRow).Value
上述变量声明为:

Dim NewArr() As Variant
lRow的计算结果为24,因此我们的想法是,将使用输入表范围A24:BJ24上显示的值填充名为NewArr的数组

我知道变量数据类型可以处理非常大的数字,尽管这一行中有一些大的数字和文本等,但没有一个超过400万。(一个是3380438.98545603)。你知道我为什么会犯这个错误吗

蒂亚

我的完整代码(直到出现错误为止)是:

Private Sub BT\u SUBMIT\u Click()
Dim-NewArr作为变体
暗淡的光线和长的一样
暗淡的lCol尽可能长
将范围设置为范围
Dim被更新为布尔值
'在写入电子表格之前,检查用户是否勾选了确认框
如果Me.XB_CONFIRM.Value=False,则
MsgBox“您必须勾选确认框,以表明您理解”_
&您的修改无法撤消。请返回表单,勾选方框并_
&“重新提交。”,仅限vbOKOnly,“请勾选确认框”
出口接头
如果结束
'检查用户是否在“更改”框中选择了“是”或“否”
如果Me.OB\u CHNGS\u NO.Value=False和Me.OB\u CHNGS\u YES.Value=False,那么
MsgBox“您必须选择是或否以指示是否正在进行更改。”_
&“请更正并重新提交。”,选择“是”或“否”
出口接头
如果结束
'检查目标解决日期是否至少为今天或更晚,如果不是
'用户必须更新
如果Sheets(“Input Sheet”).Cells(Sheets(“Lookups”).Range(“NEW\u IAR\u ROW”).Value0,则
bUpdated=True
如果控制错误(“FR\u IAR\u RSVD”),则
出口接头
如果结束
如果结束
如果(Len(Me.TB\u AMNT\u WO.Value)+Len(Me.TB\u NO\u TRNS\u WO.Value)+Len(Me.TB\u CMNT\u WO.Value)),则
bUpdated=True
如果控制错误(“FR_IAR_WO”),则
出口接头
如果结束
如果结束
如果(Len(Me.TB\u AMNT\u INC.值)+Len(Me.TB\u NO\u TRNS\u INC.值)+Len(Me.TB\u CMNT\u INC.值)),则
bUpdated=True
如果控制错误(“FR\u IAR\u INCR”),则
出口接头
如果结束
如果结束
如果没有(更新),则
MsgBox“您尚未输入任何已解决、注销或增加的更改。”_
&“您必须至少更新其中一个部分,或选择“无更改”。,vbCritical,“错误”
出口接头
如果结束
如果结束
lRow=图纸(“查找”).范围(“新行”).值
lCol=工作表(“查找”).范围(“总列”).值
'首先,我们用工作表上的当前值加载数组。
NewArr=工作表(“输入工作表”)。范围(“A”&lRow&“:BJ”&lRow)。值
Application.ScreenUpdating=False
“那么,除此之外还有其他代码
端接头

你能直接在
newArr=
行的前面和后面显示行吗?理论上,行的这一部分不会发生错误……问题不是数字的大小,而是数字用于存储在内存中的位数。也就是说,您引用的数字只使用了22位内存,因此不应该是一个真正的问题。您是否尝试将varable声明为
Dim NewArr声明为Variant
?不是数组。您可以尝试将数组的大小调整为加载范围所需的大小,然后在范围中循环,逐个元素将数据复制到数组元素。这样你就可以知道问题在哪里(假设问题实际上在那一行,而不是像德克建议的那样在相邻的一行)。我尝试了多种方法来重现你的问题,但即使是大随机数也无法做到。您可能需要发布一些实际数据。因此,强烈建议a。你能直接在
newArr=
行的前面和后面显示行吗?理论上,行的这一部分不会发生错误……问题不是数字的大小,而是数字用于存储在内存中的位数。也就是说,您引用的数字只使用了22位内存,因此不应该是一个真正的问题。您是否尝试将varable声明为
Dim NewArr声明为Variant
?不是数组。您可以尝试将数组的大小调整为加载范围所需的大小,然后在范围中循环,逐个元素将数据复制到数组元素。这样你就可以知道问题在哪里(假设问题实际上在那一行,而不是像德克建议的那样在相邻的一行)。我尝试了多种方法来重现你的问题,但即使是大随机数也无法做到。您可能需要发布一些实际数据。因此,我们强烈建议采取行动。
Private Sub BT_SUBMIT_Click()

Dim NewArr As Variant
Dim lRow As Long
Dim lCol As Long
Dim PasteRange As Range
Dim bUpdated As Boolean

'Check if the user  has ticked the confirm box before writing to the spreadsheet
If Me.XB_CONFIRM.Value = False Then
    MsgBox "You must tick the confirm box to indicate you understand that " _
    & "your amendments cannot be undone.  Please return to the form, tick the box and " _
    & "resubmit.", vbOKOnly, "Please tick confirmation box"
    Exit Sub
End If

'Check if the user has selected either yes or no on changes frame
If Me.OB_CHNGS_NO.Value = False And Me.OB_CHNGS_YES.Value = False Then
    MsgBox "You must select either yes or no to indicate if there are changes being made." _
    & "  Please correct and resubmit.", vbCritical, "Select Yes or No"
    Exit Sub
End If

'Check if the Target Resolution Date is at least today or later and if not
'user must update
If Sheets("Input Sheet").Cells(Sheets("Lookups").Range("NEW_IAR_ROW").Value, 38).Value < Now() And Me.OB_CHNGS_YES.Value = False Then

    MsgBox "The Target Resolution Date must be no earlier than today." _
    & "  Please correct and resubmit.", vbCritical, "Change Target Resolution Date"

    Me.OB_CHNGS_YES.Value = True
    Exit Sub
End If


'Check if the values enterered are valid
If Me.OB_CHNGS_YES Then
    If Control_Error("FR_AMNDMENTS") Then
        Exit Sub
    End If

    If (Len(Me.TB_AMNT_RES.Value) + Len(Me.TB_NO_TRNS_RES.Value) + Len(Me.TB_CMNT_RES.Value)) > 0 Then
        bUpdated = True
        If Control_Error("FR_IAR_RSVD") Then
            Exit Sub
        End If
    End If
    If (Len(Me.TB_AMNT_WO.Value) + Len(Me.TB_NO_TRNS_WO.Value) + Len(Me.TB_CMNT_WO.Value)) Then
        bUpdated = True
        If Control_Error("FR_IAR_WO") Then
            Exit Sub
        End If
    End If

    If (Len(Me.TB_AMNT_INC.Value) + Len(Me.TB_NO_TRNS_INC.Value) + Len(Me.TB_CMNT_INC.Value)) Then
        bUpdated = True
        If Control_Error("FR_IAR_INCR") Then
            Exit Sub
        End If
    End If

    If Not (bUpdated) Then
        MsgBox "You have not entered any changes for resolved, write offs or increases.  " _
        & "You must update at least one of these sections or select no changes.", vbCritical, "Error"
        Exit Sub
    End If
End If

lRow = Sheets("Lookups").Range("NEW_IAR_ROW").Value
lCol = Sheets("Lookups").Range("TOTAL_COLUMNS").Value

'First we load the array with the current values on the sheet.
NewArr = Sheets("Input Sheet").Range("A" & lRow & ":BJ" & lRow).Value

Application.ScreenUpdating = False
'Then there is other code beyond this point
End Sub