[英]Why don't multiple subs work together while do individually in VBA?
我正在编写一个宏来做几件事。 我的目标是导入一个表,然后将其复制到同一个文件中的 3 个不同的工作表中。 毕竟我想和我的潜艇一起安排那 4 张桌子。 由于我在一个文件中有 4 张工作表,因此我需要为每张工作表编写一个单独的子表。
最后,我想将它们分配给一个名为 All() 的完整子组件。 但是当我这样做时,我的宏进入无限循环。
我试图单独运行它们并且它们工作正常。 但是我不知道为什么它们一起运行时不起作用。 这是我的代码:
Sub Format_1()
Sheets(1).Range("H2") = "P Axial"
Dim delete_list(7) As String
delete_list(0) = "Absolute Distance"
delete_list(1) = "V2"
delete_list(2) = "V3"
delete_list(3) = "T"
delete_list(4) = "U1 Plastic"
delete_list(5) = "U2 Plastic"
delete_list(6) = "U3 Plastic"
delete_list(7) = "R1 Plastic"
i = 1
Do While Sheets(1).Cells(2, i) <> ""
If IsInArray(Sheets(1).Cells(2, i), delete_list) Then
Columns(i).EntireColumn.Delete
i = i - 1
End If
i = i + 1
Loop
End Sub
Sub All()
Call Format_1
Call Format_2
Call Format_3
Call Format_4
End Sub
此代码将以相同的方式针对 4 个不同的工作表运行。 唯一的变化将是 Sheets(2)、Sheets(3)、Sheets(4) 而不是 Sheets(1)。
我想知道为什么他们不一起工作而单独做。 提前致谢。
PS:IsInArray 是一个 function,它检查是否在数组中看到了字符串。
您需要为宏工作使用工作表引用,因为它将默认激活什么,但激活的将是您在运行宏时拥有的任何内容。
尝试这个。
Sub Format_1()
Sheets(1).Range("H2") = "P Axial"
Dim delete_list(7) As String
delete_list(0) = "Absolute Distance"
delete_list(1) = "V2"
delete_list(2) = "V3"
delete_list(3) = "T"
delete_list(4) = "U1 Plastic"
delete_list(5) = "U2 Plastic"
delete_list(6) = "U3 Plastic"
delete_list(7) = "R1 Plastic"
i = 1
Do While Sheets(1).Cells(2, i) <> ""
If IsInArray(Sheets(1).Cells(2, i), delete_list) Then
'I added the Sheet reference, but do this for all of your macros
Sheets(1).Columns(i).EntireColumn.Delete
i = i - 1
End If
i = i + 1
Loop
End Sub
Sub All()
Call Format_1
Call Format_2
Call Format_3
Call Format_4
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.