2014-05-14 44 views
0

因此,在运行提供的代码时,我正在收到“期望的语句结束”错误。我知道问题在于Sub Searched函数被写入的方式。我不确定该从哪里出发,但您应该能够从所提供的代码中了解我需要做什么。 Sub Searched作为一个独立工作,而不是初始化函数。使用VLOOKUP信息初始化表单时遇到的问题

初始化

Private Sub UserForm_Initialize() 
TextBox1.Text = Selection.Value 
TextBox2.Text = Searched Sheets("CashHour1").Range("B2:E60"), Selection 
End Sub 

命令自动填充文本框在初始化函数

Sub Searched(Rnge As Range, E_name As String) 
On Error Resume Next 
Sal = Application.WorksheetFunction.VLookup(E_name, Rnge, 2, False) 
Sal1 = Application.WorksheetFunction.VLookup(E_name, Rnge, 3, False) 

If Len(E_name) = 0 Then 
MsgBox "Select an employee" 

ElseIf Len(Sal) < 1 Then 
Hours = "OFF" 

Else 
Hours = Sal & " - " & Sal1 
End If 


End Sub 
+0

变化'Searched'的功能,然后执行'TextBox2.Text =搜索(表( “CashHour1”)范围( “B2:E60”)选择.Value) –

+0

@DavidZemens进行了更改。我再也没有遇到错误,但它没有将任何信息填入TextBox2。 – ryano

+0

,因为你的函数没有返回任何东西。看到我的答案下面我认为它会比使用'Function'更好,只需修改sub直接接受'TextBox'并在'Searched'子例程中操作它。 –

回答

1

Searched是一个子程序,不是一个函数,所以它不能返回一个值。

有两种方法可以处理这个问题,一种方法是将Searched更改为函数,但我可能只是修改Searched子例程以接受TextBox参数。

Searched Sheets("CashHour1").Range("B2:E60"), Selection.Value, TextBox2 

所以修改子接受一个文本框的说法:

Searched(Rnge As Range, E_name As String, tb as MSForms.TextBox) 
On Error Resume Next 
Sal = Application.WorksheetFunction.VLookup(E_name, Rnge, 2, False) 
Sal1 = Application.WorksheetFunction.VLookup(E_name, Rnge, 3, False) 

If Len(E_name) = 0 Then 
MsgBox "Select an employee" 

ElseIf Len(Sal) < 1 Then 
Hours = "OFF" 

Else 
Hours = Sal & " - " & Sal1 
End If 

'## Write to the textbox: 
tb.Text = Hours 
End Sub 

注意你有很多未声明的变量,你的错误处理是不存在的,所以这可能仍然引起一些问题,例如,如果Len(E_Name) = 0那么TextBox1.Text将0 ...

另见这个答案,为什么你应该使用Selection在你的代码:

How to avoid using Select in Excel VBA macros

+0

我打算扩展代码来处理可能出现的特定错误,但我只是需要在继续扩展代码之前完成这些工作。感谢您的选择提示,但对于这种特殊情况,我不确定我能够避免它。用户本质上是从大约60个名称列表中选择一个名称,然后运行该代码以返回相关数据。 – ryano

+1

你总是可以避免它,这样做总是一个好主意。 –

+0

避免使用Inputbox,或者如果绝对需要使用'Selection'作为捕获用户输入的方式,则应该将'Selection.Value'(或'Selection.Address'等)赋值给适当类型的变量。 –