Excel VBA 匹配函数将字符串或整数变量作为 Arg1



以下是较长代码的一部分。 如何在Application.WorksheetFunction.Match中将 Arg1 声明为整数或字符串?

我在 A 列中有数据(数字(,B 列中有带下划线的数字。

用户将在输入框中输入数字或字符串,match 函数将尝试匹配 A 列中的用户输入,但如果不匹配,则它将尝试在 B 列中匹配它并返回匹配行。

但是,仅当我使用Dim userinput As Integer并且只能在 A 列中匹配时,匹配才会起作用;或者使用Dim userinput As String并且只能在 B 列中匹配它。声明Dim userinput As Variant的工作方式与Dim userinput As String类似。

我可以做一些解决方法,但我想先了解为什么在将其声明为 Variant 时无法在 A 列中匹配它?

以下是我分别在 A 列和 B 列中的数据。

W   WB
25  25_0
25  25_1
25  25_2
25  25_2
25  25_3
25  25_3
25  25_3
26  26_0
26  26_0
26  26_0
26  26_1
26  26_1

以下是代码:

Sub Return_Row()
Dim userinput As Variant, search_rng As Range
userinput = InputBox("Enter your number")
Set search_rng = ActiveSheet.Range("A:A")
On Error Resume Next
N = Application.WorksheetFunction.Match(userinput, search_rng, 0)
On Error GoTo 0
If N = 0 Then
Set search_rng = ActiveSheet.Range("B:B")
N = Application.WorksheetFunction.Match(userinput, search_rng, 0)
End If
MsgBox N
End Sub

谢谢斯科特·克兰,它奏效了!这是我第一次了解 CDec 功能。

这种方式(使用 Val 函数(也可以工作。

Sub Return_Row()
Dim search_rng As Range
userinput = InputBox("Enter your number")
On Error Resume Next
If IsNumeric(userinput) Then
userinput = Val(userinput)
Set search_rng = ActiveSheet.Range("A:A")
N = Application.WorksheetFunction.Match(userinput, search_rng, 0)
Else
Set search_rng = ActiveSheet.Range("B:B")
N = Application.WorksheetFunction.Match(userinput, search_rng, 0)
End If
On Error GoTo 0

MsgBox N
End Sub

这是另一种方法:

Sub foo()
Dim userinput
userinput = Application.InputBox("your value", Type:=3)
Select Case TypeName(userinput)
Case "Double"
'do the numeric match
Case "String"
'do the string match
Case Boolean
'Cancel button routine
End Select
End Sub

Application.InputBoxInputBox(实际上是VBA.InputBox(不同,允许您指定返回类型。

正如@MathieuGuindon指出的那样,使用VarType而不是TypeName有一些好处。 下面是使用后者的代码:

Option Explicit
Sub foo()
Dim userinput
userinput = Application.InputBouserinput("your value", Type:=3)
Select Case VarType(userinput)
Case vbDouble
'do the numeric match
Case vbString
'do the string match
Case vbBoolean
'Cancel button was pressed
Stop
End Select
End Sub

相关内容

  • 没有找到相关文章

最新更新