【问题标题】:Declare const variable using wildcard使用通配符声明 const 变量
【发布时间】:2021-12-22 21:03:34
【问题描述】:

我想知道是否有可能在 Excel VBA 中使用通配符声明 const 变量,如下例所示:

const myVariable As String Like "UP field*"

我需要它,因为我有一个可以有多个值的单元格字段,但它总是包含子字符串“UP field”,但有时它就像“UP field 5”或“UP field 3”之类的。

我只需要 Excel 来查找一个表的第一行,并且该变量是该行开头的单元格的名称。它就像我的A1 单元格,但它可以位于 Excel 工作表中的任何位置,因此我使用 while 循环来查找该单元格:

i = 1 
While ActiveSheet.Cells(i, 1) <> myVariable 'Looking for the first row     
  i = i + 1 
Wend

【问题讨论】:

  • 我认为您误解了常量(declared 并分配了一个永不改变的值,使用 const)与变量(declared 和特定的 data type,使用 dim )。在这两种情况下,您都不能“自动”限制某个自定义值范围,但您可以通过编程方式完成同样的事情。
  • 我明白了,我理解 constdim 但我认为它也可以像在其他编程语言中一样用通配符声明。谢谢。

标签: excel vba variable-declaration


【解决方案1】:

你不需要一个常数。 Range.Find 是一种快速查找第一个事物的方法,将 xlPart 传递给 LookIn 参数将满足通配符要求。例如:

Public Sub FindFirst()
    Dim rng As Range
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A:A").Find(What:="UP Field", LookAt:=xlPart)
    
    If Not rng Is Nothing Then
        MsgBox rng.Address
    End If
End Sub

如果将 while 循环与 InStr 结合使用,它可能会起作用。我不会推荐它,但为了完整起见,我在这里添加:

Public Sub FindFirst2()
    Dim str As String, i As Long, rng As Range
    str = "UP field"
    i = 1
    Do
        Set rng = ActiveSheet.Cells(i, 1)
        i = i + 1
        If i > ActiveSheet.Rows.Count Then Exit Sub
    Loop While InStr(rng.Value, str) = 0

    MsgBox rng.Address
End Sub

【讨论】:

  • 第二个If i &gt; ActiveSheet.Rows.Count Then Exit Sub 怎么样?
  • 谢谢@braX。我对第二个解决方案不太投入,所以我最初没有添加,但我感谢你的彻底性。我已经相应地更新了(虽然如果你想自己更新我也不会被推迟):)
  • 谢谢,我使用了您发布的第一个解决方案。我以为我可以用另一种方式来做,但它很有帮助:)
【解决方案2】:

我认为这可能对你有用:

Const myVariable As String = "UP field"

i = 1
Do Until ActiveSheet.Cells(i, 1) Like myVariable & "*" 'Looking for the first row
  i = i + 1
Loop

这将退出第一个单元格的循环开始与文本UP field

【讨论】:

  • 我认为这个解决方案也可以,我使用了上面的 range.find 解决方案,但非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
相关资源
最近更新 更多