【发布时间】:2017-10-17 09:48:34
【问题描述】:
我是 Vba 的新手,需要用宏和 vba 解决特定问题。希望你能帮我解决这个问题!
我尝试构建一个可以帮助我完成以下步骤的宏:
- 我使用一个“驾驶舱文件”,我想用它从两个工作表中减去所有单元格。我从两个不同的工作簿中获取工作表。 ;-) 例如:我想从 F11 (Workbook2.Worksheet1) 中减去单元格 F11 (Workbook1.Worksheet1),而不是从 F12 (Workbook2.Worksheet1) 中减去 F12 (workboosk1.worksheet1),[...] J34 (Wb1 .ws1.) 来自 J34(Wb2.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
【问题讨论】:
-
你在哪一行得到错误?您想将最初来自
Range("F11:GL46")的数组应用到Range("F11:H34")是否正确? -
@HerrDerb 抱歉,输入错误。新值应添加到同一范围
Range("F11:GL46")。我在ArrayC(i,j) = ArrayA(i,j) - ArrayB(i,j)行中得到错误 -
认为问题是你没有在任何地方定义
ArrayC的大小。 -
"为了避免错误,应该通过 vba 中的数组来完成数学运算" 为什么?我会选择第一个范围并复制到目标,然后选择第二个范围并复制、粘贴特殊值、减去第一个副本
-
@HarassedDad 感谢您的提示,但这是我的经理的看法..