VBA从彼此减去两个不同的三维arrays

我是一个VBA的新手,需要用macros和vba来解决一个特定的问题。 我希望,你可以帮助我解决这个问题!

我试图build立一个macros应该帮助我这个步骤:

  1. 我使用了一个“驾驶舱文件”,我想用两个工作表中的所有单元格来减去所有的单元格。 我从两个不同的工作簿中获取工作表。 ;-)作为一个例子:我想从F11(Workbook2.Worksheet1)减去单元格F11(Workbook1.Worksheet1),而不是从F12(Workbook2.Worksheet1)的F12(workboosk1.worksheet1),J34(Wb1 .ws1。)从J34(Wb2.ws.1)
  2. 我想更改并select文件。 因此,我需要在哪个窗口中select特定的文件。
  3. 为了避免错误,math应该通过vba中的数组完成。 新的价值应该被添加到其中一个工作簿中

我试图用循环来解决math问题,但它不工作。 当我来到减法公式时,我得到运行时错误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 ,这意味着,types是未知的,直到事物被赋值给variables。

用这条线ArrayC(i, j) = ArrayA(i, j) - ArrayB(i, j)你已经假设ArrayC拥有一个数组,它还没有。

首先在你的头像这样Dim ArrayC()定义ArrayC 。 这种方式明确定义为一个数组。 仍然没有大小,但。

ReDim ArrayC(UBound(ArrayA,1) ,UBound(ArrayA,2))这将创build一个与ArrayA大小相同的二维数组。 现在你有一个完全初始化的数组

现在你的程序应该工作。