【问题标题】:How to use Like operator in VBA?如何在 VBA 中使用 Like 运算符?
【发布时间】:2014-03-05 14:29:02
【问题描述】:

我正在编写一个宏,它计算某个工作表中的列数,然后将此工作表内容复制到同一工作簿中的 Sheet1。

Sub test()
Dim LastCol As Long
Set currentsheet = ActiveWorkbook.Sheets("Sheet1")

LastCol = Sheets("APage").Range("A1").End(xlToRight).Column
Sheets("APage").Range("1:1" & LastCol1).Copy
currentsheet.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

End Sub

特殊之处在于工作表名称可能是:"APage", "BPage", "10Page" 等。所以第一个后者可能不同,但 "Page" 始终保留在工作表名称中。 如何正确使用 * 在 VBA 中使用所有名为 Pages 的工作表,在工作表名称的开头带有任何字母?谢谢!

【问题讨论】:

  • Ale,正如我所见,您尝试将数据从每个工作表“* Page”复制到工作表 Sheet1。但是你想把它们粘贴到哪里?在第一张纸的 A2 中,从第二张纸的 B2 中等等?
  • 这只是一个简短的例子。实际上,我将每个“* Page”复制的内容粘贴到 O2、Q2、S2、..Y2 单元格。
  • 再瘦一点,insted LastCol = Sheets("APage").Range("A1").End(xlToRight).Column 我推荐你使用LastCol = Sheets("APage").Cells(1, Columns.Count).End(xlToLeft).Column - 它更可靠
  • 请先研究 - Excel VBA like operator的副本
  • @simoco 啊谢谢,我会改正的。

标签: vba excel


【解决方案1】:

很遗憾你不能。但是你可以使用类似的代码

Dim ws As Excel.Worksheet
For Each ws In ActiveWorkbook.Worksheets
    If InStr(ws.Name, "Page") > 0 Then
        'ws is a worksheet with the text 'Page' in its name
    End If
Next

【讨论】:

    【解决方案2】:

    为了循环使用通配符名称的所有工作表,您可以执行以下操作:

    Sub LoopThroughWorksheets()
        Dim ws As Worksheet
        For Each ws In ActiveWorkbook.Worksheets
            If ws.Name Like "*Page" Then
                'Do whatever with this particular sheet
            End If
        Next ws
    End Sub
    

    【讨论】:

      【解决方案3】:

      Sheets 集合中没有通配符搜索。您需要遍历它们,例如:

      Dim ws As Worksheet
      For Each ws In ActiveWorkbook.Worksheets
          If InStr(ws.Name, "Page") > 0 Then
              ...
          End If
      Next
      

      【讨论】:

      • @Bathsheba 只是因为您正在编辑问题:)
      • 谢谢!我会试试的。 :)
      • @Joe 你为什么写“没有通配符搜索”。它似乎可以使用 Like 运算符,如 "For Each WS In ThisWorkbook.Worksheets If WS.Name Like "eet" Then ..." 似乎返回名称中带有 eet 的所有工作表?
      • @RonRosenfeld 是的,没错,Like "*Page"InStr(ws.Name,"Page")>0 相同。 “没有通配符搜索”我的意思是你不能做For each ws In ActiveWorkbook.Sheets("*Page"),我相信这是OP所要求的。
      • @Joe 啊,现在我明白你的意思了。谢谢你的澄清。
      猜你喜欢
      • 2019-08-04
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2018-03-09
      相关资源
      最近更新 更多