【发布时间】:2021-01-18 14:44:53
【问题描述】:
我的宏应该将标题名称与名称数组匹配。
- 如果为真,则省略
- 如果不是,则将第二行到最后一行的值设置为客户
最初,我在“Else”部分设置了客户值,但宏却按照预期的方式反其道而行之 - 仅更改了数组值上的单元格。这对我来说没有意义,因为我已经将我的 InStr 函数设置为正输出但是我已经将指令放在匹配部分
在 70 个变量中,有 67 个变量符合预期,3 个变量被命名为 Customer,其中少数变量没有从第二个到最后一个,例如只有第二个,或者只有少数几个。
Sub test2()
Dim HeaderRow As Range
Dim HeaderName As String
HeaderName = Join(Array("ID", "GENDER", "REVENUE"))
Set HeaderRow = Range(Cells(1, 1), Cells(1, 1).End(xlToRight))
For Each Header In HeaderRow
Debug.Print Header
Debug.Print HeaderName
If InStr(1, HeaderName, Header.Value, vbTextCompare) = 0 Then
Range(Cells(2, Header.Column).Address, Cells(Cells(Rows.Count, Header.Column).End(xlUp).Row, Header.Column).Address).Value2 = "Customer"
Else
End If
Next Header
End Sub
例如,BD 列是它应该是的,所有这些列都有间隙,但 BD、BF、BG、BO 是好的(该特定文件上的 1-59 行,其余的则不是)。
加上前面提到的一些内容 - 有时标题设置为客户和第一行,仅此而已。
新的 HeaderRow 给了我不匹配,当我更改为 ws.Range 最初它只获得第一列,就像那不是拖动 xlToLeft
【问题讨论】:
-
这个
InStr(1, HeaderName, Header.Value, vbTextCompare) = 0表示不匹配。Instr返回找到字符串的位置,如果返回0,则表示未找到该字符串。所以你的代码看起来像 "Ifstring not foundThenreplace dataElsedo nothingEnd If"。 • 对我来说,代码运行完美,没有问题。 -
谢谢。我对它进行了一些修改,它变得一致了!但是,任何想法如何将它循环到所有工作表,因为我的标准解决方案不起作用?我已将 ws 设置为工作表,然后在 Thisworkbook.Worksheets 中为每个 ws 设置的每个 Header 以及在 Next Header 之后的最后我得到 Next ws,但它并没有遍历所有 WS,只有一个活跃
-
您需要使用工作表
ws引用您的区域和单元格。请参阅下面的答案。