将函数调用从静态更改为动态VBA



我有一个函数,我调用多次,至少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次,(或出现许多头),只有参数改变。有没有办法在某种循环中引入这个??

编辑请原谅我没说清楚,

注意事项

  1. 我根据列拆分我的表,因此检查是否存在特定的标头,并基于此执行此代码。

  2. 请注意splitcolumn子确实创建了新的工作表,并将数据粘贴在那里,以确保工作表不会被打乱,我使用prevheader将新工作表锚定到旧工作表(检查是否存在由prevheader名称的工作表并在其上创建新工作表)

这种情况不发生的一种情况是第一个工作表,我已经硬编码了哪个工作表,新的应该锚定在

  1. 我希望发生的事情如下

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

相关内容

  • 没有找到相关文章