Arrays VBA相互减去两个不同的三维数组
我是Vba的新手,需要用宏和Vba解决一个特定的问题。我希望,你能帮我解决这个问题 我尝试构建一个宏,它可以帮助我完成以下步骤: 我使用一个驾驶舱文件,我想用它从两个工作表中相互减去所有单元格。我从两本不同的工作簿中得到工作表例如:我想从F11 Workbook2.Worksheet1中减去单元格F11 Workbook1.Worksheet1,而不是从F12 Workbook2.Worksheet1中减去单元格F12 Workbook1.Worksheet1,[…]J34 Wb1.ws1。来自J34Wb2.ws.1 我想更改并选择文件。因此,我需要一个窗口,在其中我可以选择特定的文件。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中的数组进行计算。新的价值应该被添加到其中一个工作簿中 我试着用一个循环来解决这个数学问题,但它不起作用。当我谈到减法公式时,我得到了运行时错误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,它看起来很有效