如何在VBA中将find的单元格的值打印到文本框中

我们正在尝试编写一个代码,给定一个网站名称(列)和SKU(行),结果单元格的值显示在文本框中。 我们已经到了我们有单元号码的地步了。 E16,但我们不知道如何将E16的值打印到文本框中。 最后一行中的txtPrice.value应该是在文本框中发布的内容,但它始终是空的

Private Sub btnGO_Click() Dim rowNum, cellNum As Variant rowNum = Application.WorksheetFunction.Match(txtSKU.Value, Worksheets("AllSites").Range("B:B"), 0) If IsError(rowNum) Then MsgBox "SKU not found": Exit Sub If cbxSite.Value = "Fairburn" Then cellNum = "C" & rowNum ElseIf cbxSite.Value = "Aberdeen" Then cellNum = "D" & rowNum ElseIf cbxSite.Value = "University Park" Then cellNum = "E" & rowNum ElseIf cbxSite.Value = "Roanoke" Then cellNum = "F" & rowNum ElseIf cbxSite.Value = "Lathrop" Then cellNum = "G" & rowNum Else: cbxSite.Value = "Redlands" cellNum = "H" & rowNum If IsError(cellNum) Then MsgBox "Site not found": Exit Sub txtPrice.Value = Worksheets("AllSites").Cells(cellNum).Value End If End Sub 

问题是你的If语句的结构。 你的End If陈述是在错误的地方。 这导致Excel在您的Else语句后插入一个冒号。 使用冒号是将两个语句放在同一行上的一种方法。 所以这个效果是,如果没有其他IfElseIf条件满足,那么这个语句cellNum = "H" & rowNum将始终执行,并可能将cellNum指向一个空白单元格。

即使其中一个If条件满足,那么代码也会跳过设置文本框值的部分,因为Else:End If之间的所有内容都是Else:子句的一部分,所以如果任何一个其他If条件评估为真。

因此,您需要更改Else:条件以阻止ElseIf ,并将End If语句移动到该块之下。

另外,你需要改变.Cells到其他人在这里注意到。

 Private Sub btnGO_Click() Dim rowNum, cellNum As Variant rowNum = Application.WorksheetFunction.Match(txtSKU.Value, Worksheets("AllSites").Range("B:B"), 0) If IsError(rowNum) Then MsgBox "SKU not found": Exit Sub If cbxSite.Value = "Fairburn" Then cellNum = "C" & rowNum ElseIf cbxSite.Value = "Aberdeen" Then cellNum = "D" & rowNum ElseIf cbxSite.Value = "University Park" Then cellNum = "E" & rowNum ElseIf cbxSite.Value = "Roanoke" Then cellNum = "F" & rowNum ElseIf cbxSite.Value = "Lathrop" Then cellNum = "G" & rowNum ElseIf cbxSite.Value = "Redlands" Then cellNum = "H" & rowNum End If If IsError(cellNum) Then MsgBox "Site not found": Exit Sub txtPrice.Value = Worksheets("AllSites").Range(cellNum).Value End Sub 

您正尝试使用像“ Cells("H6").Value 。 应该是.Range("H6").Value

 'where cellNum is a string something like "H6" txtPrice.Value = Worksheets("AllSites").Range(cellNum).Value 

尝试这个:

 Textbox.Text = Worksheets("AllSites").Cells(cellNum).Value