VBA – 使用SearchRange查找variables值

我正在从一个Excel电子表格工作,从SQL数据库拉select列表,并填充工作表。 然后提示用户扫描零件号码。 我正在尝试在列A中find部件号,并返回部件号的行。

部件号开始作为一个Varianttypes,但认为这种types是问题,我把它转换为string通过将其值设置为另一个variables。

最后,我find了这段代码(我已经尝试了很多,但目前为止还没有任何工作),并且当您在下面的代码中指定一个数字(123456789012)时,它会工作。 如果使用variablessPart或scanPartreplace该数字,则不起作用。

我需要它来findvariablessPart(String)或scanPart(Variant)的行。 我究竟做错了什么?

Function ReturnRowNumber() Dim ws As Excel.Worksheet Set ws = ActiveSheet Dim scanPart As Variant Dim sPart As String Dim FoundRow As String scanPart = InputBox("Scan the first part number", "Part Number") 'Get Part Number sPart = scanPart MsgBox sPart Dim SearchRange As Range Dim FindRow As Range Set SearchRange = Range("A1", Range("A65536").End(xlUp)) Set FindRow = SearchRange.Find(123456789012#, LookIn:=xlValues, lookat:=xlWhole) MsgBox FindRow.Row End Function 

提前感谢任何帮助!

达纳

在你的文章中写的代码永远不会工作,因为语法是不正确的,尤其是在.Find语句。 也许这个问题是把你扔在一个错误的方向,认为这是一个数据types的问题。

请看这个代码。 testingstring和数值。

 Option Explicit Sub Test() Dim sPart As String sPart = InputBox("Scan the first part number", "Part Number") 'Get Part Number MsgBox ReturnRowNumber(sPart) End Sub Function ReturnRowNumber(sPart As String) As Long Dim ws As Worksheet Set ws = Worksheets("Sheet1") 'be more explicit than 'ActiveSheet Dim SearchRange As Range Dim FindRow As Range Set SearchRange = ws.Range("A1", ws.Range("A65536").End(xlUp)) Set FindRow = SearchRange.Find(sPart, LookIn:=xlValues, lookat:=xlWhole) If Not FindRow Is Nothing Then ReturnRowNumber = FindRow.Row End Function 

从你的代码和你的问题的描述来看,你正在将variables定义为Variant ,但是Varian实际上是一个String (因此,除非你有一个非常具体的理由,否则不要使用Variant )。

就像是:

 Dim Foo as Variant Dim Bar as Long Foo = "123" Bar = "123" 

基本上就是这样说:

 Dim Foo as String Dim Bar as Long Foo = "123" Bar = CLng("123") 

这是重要的原因是因为:

 12345 <> "12345" 

他们是不同的价值观。 一个是Long表示,另一个是String表示。

解决你的问题? 这取决于你的初始值如何存储。 如果您使用的是条形码的String表示forms,那么您希望将条形码声明为String ,然后使用该String进行search。 似乎你实际上是在存储整个数字,如果是这种情况,你会想要将你的条形码声明为Long

如果由于某种诅咒,将条码存储为Strings和整数,那么您将需要select一个或另一个,或者您将需要使用更强大的查找方法(我推荐字典)。

 Function ReturnRowNumber() Dim ws As Excel.Worksheet Set ws = ActiveSheet Dim scanPart As Variant Dim sPart As String Dim FoundRow As String Dim xlCell as Range scanPart = InputBox("Scan the first part number", "Part Number") 'Get Part Number sPart = scanPart Dim SearchRange As Range Dim FindRow As Range Set SearchRange = Range(Range("A1"), Range("A1").End(xlDown)) Set xlCell = ActiveCell Application.ScreenUpdating = False SearchRange.Select Set FindRow = SearchRange.Find(What:=sPart, After:=ActiveCell, SearchOrder:=xlByRows) xlCell.Select Application.ScreenUpdating = True MsgBox FindRow.Row End Function 

它看起来像你的查找function没有正确的格式。 上面的代码完全适合我