VBA代码使用Data表填充userform

时间:2016-06-12 22:16:19

标签: excel-vba vba excel

所以我正在为工资单应用程序做一些编码。当我运行宏并在textbox1中输入EmployeeNumber时,我被发送到调试,第三行代码“c = application.worksheet ....”以黄色突出显示。基本上,当我在文本框1中输入员工编号时,该员工的后续信息应自行填充。有人可以告诉我在下面的代码中我做错了吗?

Private Sub CommandButton1_Click()
Me.TextBox2.Enabled = True
Me.TextBox3.Enabled = True
Me.TextBox4.Enabled = True
Me.TextBox5.Enabled = True
Me.TextBox6.Enabled = True
Me.CommandButton2.Visible = True
Me.CommandButton1.Visible = False
End Sub

Private Sub CommandButton2_Click()
m = MsgBox("Do You Want To Update Employee Information?", vbQuestion + vbYesNo, "Confirm Update")

If m = vbNo Then Exit Sub


EmployeeNumber = Val(Me.TextBox1.Value)

c = Application.WorksheetFunction.CountIf(MasterData.Range("A:A"),  EmployeeNumber)
If c = 0 Then Exit Sub

r = Application.WorksheetFunction.Match(EmployeeNumber,   MasterData.Range("A:A"), 0)
MasterData.Range("B" & r).Value = Me.TextBox2.Value
MasterData.Range("C" & r).Value = Me.TextBox3.Value
MasterData.Range("D" & r).Value = Me.TextBox4.Value
MasterData.Range("E" & r).Value = Me.TextBox5.Value
MasterData.Range("F" & r).Value = Me.TextBox6.Value

Me.TextBox2.Enabled = False
Me.TextBox3.Enabled = False
Me.TextBox4.Enabled = False
Me.TextBox5.Enabled = False
Me.TextBox6.Enabled = False
Me.CommandButton2.Visible = False
Me.CommandButton1.Visible = True
End Sub

Private Sub CommandButton3_Click()
Unload.Me
End Sub

Private Sub Label1_Click()

End Sub

Private Sub Label2_Click()

End Sub

Private Sub Label5_Click()

End Sub

Private Sub TextBox1_Change()
Dim wks As Worksheet
Set wks = Worksheets("MasterData")

EmployeeNumber = Val(Me.TextBox1.Value)

c = Application.WorksheetFunction.CountIf(MasterData.Range("A:A"), EmployeeNumber)

If c = 0 Then
Me.TextBox2.Value = ""
Me.TextBox3.Value = ""
Me.TextBox4.Value = ""
Me.TextBox5.Value = ""
Me.TextBox6.Value = ""
Exit Sub
End If
r = Application.WorksheetFunction.Match(EmployeeNumber, MasterData.Range("A:A"), 0)

Me.TextBox2.Value = MasterData.Range("B" & r).Value
Me.TextBox3.Value = MasterData.Range("C" & r).Value
Me.TextBox4.Value = MasterData.Range("D" & r).Value
Me.TextBox5.Value = MasterData.Range("E" & r).Value
Me.TextBox6.Value = MasterData.Range("F" & r).Value


End Sub

Private Sub UserForm_Click()

End Sub

3 个答案:

答案 0 :(得分:1)

这一定不能编译 - 首先修复:

中的语法错误
r = Application.worksheerfunction.Match

修正:

r = Application.WorksheetFunction.Match
  

编辑:修复更多语法错误

MasaterData 替换为 MasterData

MasaterData.Range("B" & r).Value = Me.TextBox2.Value
MasaterData.Range("C" & r).Value = Me.TextBox3.Value
MasaterData.Range("D" & r).Value = Me.TextBox4.Value
MasaterData.Range("E" & r).Value = Me.TextBox5.Value
MasaterData.Range("F" & r).Value = Me.TextBox6.Value

答案 1 :(得分:0)

您可以自行进行简单的故障排除,通过简化代码以使一个项目起作用来找到问题 - 然后扩展有效的代码。

自己解决VBA问题的最简单方法是在代码中添加MSGBOX或DEBUG.PRINT语句以跟踪发生的事情

目前您遇到的问题是,您有两个处理文本框的位置 - 现在导致问题的位置在TextBox_Change中 - 对于您输入的每个字符,它将触发一次。

您要么完全删除它,要么将其移动到TextBox AfterUpdate事件 - 然后决定是否要删除Command Click事件中的重复代码

答案 2 :(得分:0)

Well Apparently, the userform wasn't enabled "True/False" from properties. That was the reason, I couldn't type anything in textbox 1. I'd like to thanks DbMitch for teaching me the step by step debug approach. The form does its intended function now.