Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Arrays VBA相互减去两个不同的三维数组_Arrays_Vba_Excel - Fatal编程技术网

Arrays VBA相互减去两个不同的三维数组

Arrays VBA相互减去两个不同的三维数组,arrays,vba,excel,Arrays,Vba,Excel,我是Vba的新手,需要用宏和Vba解决一个特定的问题。我希望,你能帮我解决这个问题 我尝试构建一个宏,它可以帮助我完成以下步骤: 我使用一个驾驶舱文件,我想用它从两个工作表中相互减去所有单元格。我从两本不同的工作簿中得到工作表例如:我想从F11 Workbook2.Worksheet1中减去单元格F11 Workbook1.Worksheet1,而不是从F12 Workbook2.Worksheet1中减去单元格F12 Workbook1.Worksheet1,[…]J34 Wb1.ws1。来自

我是Vba的新手,需要用宏和Vba解决一个特定的问题。我希望,你能帮我解决这个问题

我尝试构建一个宏,它可以帮助我完成以下步骤:

我使用一个驾驶舱文件,我想用它从两个工作表中相互减去所有单元格。我从两本不同的工作簿中得到工作表例如:我想从F11 Workbook2.Worksheet1中减去单元格F11 Workbook1.Worksheet1,而不是从F12 Workbook2.Worksheet1中减去单元格F12 Workbook1.Worksheet1,[…]J34 Wb1.ws1。来自J34Wb2.ws.1 我想更改并选择文件。因此,我需要一个窗口,在其中我可以选择特定的文件。
为了避免错误,应通过vba中的数组进行计算。新的价值应该被添加到其中一个工作簿中 我试着用一个循环来解决这个数学问题,但它不起作用。当我谈到减法公式时,我得到了运行时错误13

希望你能帮助我!对不起,我英语不好

这是我的密码

Sub Makro4()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

    'Variabledef
    Dim i As Long 'Index
    Dim j As Long 'Index
    Dim k As Long 'Index
    Dim ArrayA As Variant 'Array
    Dim ArrayB As Variant 'Array
    Dim ArrayC As Variant 'Array
    Dim MyFile1 As String 'Workbookname
    Dim MyFile2 As String 'Workbookname
    Dim wb1 As String 'Workbookname
    Dim wb2 As String 'Workbookname
    Dim WS_Count1 As Integer 'Count Worksheets
    Dim WS_Count2 As Integer 'Count Worksheets
    Dim arrays1 As String 'Dimension
    Dim arrays2 As String 'Dimension


    'Change the actual path

    ChDrive "O:\"
    ChDir "O:[.......]\VBA"


    'Selection first File

    MyFile1 = Application.GetOpenFilename
    Workbooks.Open Filename:=MyFile1, ReadOnly:=True, IgnoreReadOnlyRecommended:=True
    wb1 = ActiveWorkbook.Name
    ArrayA = Workbooks(wb1).Worksheets("01").Range("F11:GL46").Value
    WS_Count1 = ActiveWorkbook.Worksheets.Count


    'Selection second File

    MyFile2 = Application.GetOpenFilename
    Workbooks.Open Filename:=MyFile2, ReadOnly:=True, IgnoreReadOnlyRecommended:=True
    wb2 = ActiveWorkbook.Name
    ArrayB = Workbooks(wb2).Worksheets("01").Range("F11:GL46").Value
    WS_Count2 = ActiveWorkbook.Worksheets.Count



' Calculation of the math - Runtime Error 13

    For k = 1 To WS_Count1
        For i = LBound(ArrayA, 1) To UBound(ArrayA, 1)
            For j = LBound(ArrayA, 2) To UBound(ArrayA, 2)
                ArrayC(i, j) = ArrayA(i, j) - ArrayB(i, j)
            Next j
        Next i

        Worksheets("k").Range("F11:GL34").Value = ArrayC

    Next k


Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
ArrayC尚未初始化。它被定义为Variant,这意味着,在为变量分配某些内容之前,类型是未知的

有了这行ArrayCi,j=ArrayAi,j-ArrayBi,j,你已经假设ArrayC持有一个数组,但它还没有

首先,在你的头脑中定义ArrayC,就像这个暗淡的ArrayC。这样就可以清楚地定义为数组。不过还是没有尺寸

现在,在k=1到WS_Count1的行之前,您可以通过以下方式设置数组的维度:ReDim ArrayCUBoundArrayA,1,UBoundArrayA,2这将创建一个与ArrayA大小相同的二维数组。 现在您有了一个完全初始化的数组


现在您的程序应该可以运行了。

在哪一行出现错误?您想将最初来自RangeF11:GL46的数组应用于RangeF11:H34是否正确?@HerrDerb抱歉,键入错误。新值应添加到相同的范围F11:GL46。我在ArrayCi,j=ArrayAi,j-ArrayBi,j行中得到了错误,我想问题是您没有在任何地方定义ArrayC的大小。为了避免错误,应该通过vba中的数组进行计算为什么?我会选择第一个范围并复制到目的地,然后选择第二个范围并在第一个范围上进行复制、粘贴特殊值、相减copy@HarassedDad谢谢你的提示,但这是我经理的感悟。我改变了一切,就像你告诉我的一样,但同样的错误仍然发生。运行时错误13发生在哪一行?它发生在同一行ArrayCi,j=ArrayAi,j-ArrayBi,j I将Dim ArrayC作为变量更改为Dim ArrayC,并将Redim ArrayC[…]粘贴到For k[…]的前面。数组包含哪些数据?数字?是的,数字。你的代码有效!有一些DIV/0!在我的数据中。如果不是ISERRORARAYAI,j或者不是ISERRORARAYAI,j,那么我集成了ArrayCi,j=ArrayAi,j-ArrayBi,j,它看起来很有效