【问题标题】:IF-THEN w/ strings in VBAIF-THEN 带 VBA 中的字符串
【发布时间】:2015-08-11 13:51:01
【问题描述】:

我试图通过用字符串读取值来检查两个单元格的值是否彼此相等。使用 for 循环逐步查找 IF-THEN 语句的匹配项。

当单步执行程序时,它显示值在某一点相等,但 IF-THEN 比较只是继续运行我不知道为什么当它们相等时它不会停止。

Dim ws As Worksheet
Dim lcol As Long
Dim Val As String
Dim Check As String

'Read in value for audit to continue

Val = ContTextBox.Value

'Make Master Sheet Active
 Worksheets("Master").Activate

Set ws = ThisWorkbook.Sheets("Master")


'Finds next empty column

  With ws
        lcol = .Cells(11, .Columns.Count).End(xlToLeft).Column + 1
  End With


'i needs to be set to minimum limit
'Begin loop of search

For j = 1 To lcol
    Check = Cells(11, j).Value

   If Check = Val Then

       Unload Me
       Assetlookup.Show

    End If

  Next j

Unload Me

【问题讨论】:

  • 字符串真的完全一样吗?有时,您会与其他人一起获得“隐形”字符。例如,\r\n 不会显示,而是字符串的一部分
  • 正如@EngJon 所说的字符串不相等。您可以停止代码并将两个字符串转换为 ascii 代码或其他任何内容,然后再次检查它们。
  • 您可能希望从两个单元格中修剪字符串,然后进行比较。
  • 这些值是日期。所以工作表中有一个日期是 "07/29/91" ,然后当用户窗体出现时,它会询问要搜索的日期,所以我会输入相同的日期 "07/29/91" 。我在“Locals”工具栏中逐步查看它,它显示它们在视觉上是相同的,但我不确定它是否带有额外的字符。

标签: excel vba if-statement for-loop


【解决方案1】:

这两个字符串有多“相同”?一个是大写的,另一个不是吗?是否有前导/尾随零?是否有不可打印的字符?

试试这个,它会在比较之前清除每个术语:

If AllCleanedUp(Check) = AllCleanedUp(Val) Then

...

指的是以下函数:

Function AllCleanedUp (DirtyString byVal) As String

    AllCleanedUp = Trim(Application.Clean(Lcase(DirtyString)))

End Function

【讨论】:

  • 字符串应该相同,因为它们只是使用日期。所以工作表中有一个日期是“07/29/91”,然后当用户表单出现时它会询问要搜索的日期,所以我会输入相同的日期“07/29/91”
  • 我最终只使用了 If Trim(check) = Trim(Val) Then 并且有效
猜你喜欢
  • 1970-01-01
  • 2023-01-14
  • 2018-01-08
  • 2013-01-13
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
相关资源
最近更新 更多