我有一个函数,我调用多次,至少14次,到目前为止,我静态地调用每个方法,并改变每个必须在函数中输入的变量。
函数调用的代码。
If HeaderExists("W_Sheet", "BM") Then 'Checking if function needs to be called
Set rng = ws.Rows(1).Find(What:="BM", LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
prevHeader = ws.ListObjects("W_Sheet").HeaderRowRange.Cells(1, rng.column - 1).Value 'find the previous header to the current one
Call splitColumn(rng.column, "BM", "BM", prevHeader) ' actual calling of the function with parameter passing
End If
现在,这个特定的代码将重复14次,(或出现许多头),只有参数改变。有没有办法在某种循环中引入这个??
编辑请原谅我没说清楚,
注意事项
我根据列拆分我的表,因此检查是否存在特定的标头,并基于此执行此代码。
请注意splitcolumn子确实创建了新的工作表,并将数据粘贴在那里,以确保工作表不会被打乱,我使用prevheader将新工作表锚定到旧工作表(检查是否存在由prevheader名称的工作表并在其上创建新工作表)
这种情况不发生的一种情况是第一个工作表,我已经硬编码了哪个工作表,新的应该锚定在
- 我希望发生的事情如下
3.1)代码创建一个包含表
中所有头信息的数组代码忽略前8个头3.3)代码将第9个标头的名称和硬编码的表名传递给函数3.4)从第10个报头开始,它将每个报头(第n个)和前(n-1)个报头的名称传递给函数。
这是可能的吗?
请尝试下一个代码:
Sub testIteration()
Dim ws As Worksheet, lastCol As Long, rngH As Range, arrH, El, count As Long
Set ws = ActiveSheet 'use here the necessary sheet
lastCol = ws.cells(1, ws.Columns.count).End(xlToLeft).column
arrH = ws.Range(ws.cells(1, 9), ws.cells(1, lastCol)).Value
For Each El In arrH
count = count + 1
If headerExists("W_Sheet", CStr(El)) Then 'Checking if function needs to be called
Call SplitColumn(count + 8, El, El, IIf(count = 1, "Sheet1", arrH(1, count - 1))) ' actual calling of the function with parameter passing
End If
Next
End Sub
有一些细节不足,所以下面是一些猜测。
使用这样的循环
For Each ColName In Array("BM", "AB", "XY", "XZ")
' Your logic goes here
Next
可以对数组中的每个条目运行一次。将代码放入for循环中,并将每个"BM"
替换为ColName