2016-06-12 3 views
0

Так что я делаю некоторую кодировку для приложения для расчета заработной платы. Когда я запускаю макрос и вводим EmployeeNumber в textbox1, я отправляю его на отладку, а третья строка кода «c = application.worksheet ....» выделяется желтым цветом. В принципе, когда я ввожу номер сотрудника в текстовое поле 1, последующая информация этого сотрудника должна заселяться сама по себе. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно в коде ниже?Код VBA Использование таблицы данных для заполнения пользовательской формы

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 
+0

Как определяется 'MasterData'? –

+0

Привет, не понимаю, что вы подразумеваете под этим. MasterData - это рабочий лист со всеми данными. – Jeff

+0

Dim wks As Worksheet Установить wks = Рабочие листы («MasterData») – Jeff

ответ

1

Это не должно составить - исправить эту первую: Синтаксическая ошибка в

r = Application.worksheerfunction.Match 

Исправлено:

r = Application.WorksheetFunction.Match 

EDIT: исправить больше ошибок синтаксиса

заме е MasaterData с Мастердат

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 
+0

Это обновление. Теперь появляется форма, но она ничего не делает. – Jeff

+0

Я добавил полный код для пользовательской формы. Пользовательская форма появляется, но не реагирует. Я добавил код в текстовое поле 1, но когда я начинаю вводить UserForm, я просто слышу звук excel, а затем пользовательская форма даже закрывается. Я должен заставить замолчать превосходство. Пожалуйста помоги. – Jeff

+0

Пожалуйста, помогите, я видел ваш профиль, который вы также живете в BC? Я живу в Суррее. – Jeff

0

Вы можете сделать простой поиск неисправностей самостоятельно, чтобы найти проблему путем упрощения кода, чтобы получить один элемент для работы - то расширяя код, который работает.

Самый простой способ устранения проблем VBA себя является добавление MsgBox или Debug.Print заявления в свой код, чтобы проследить, что происходит

В настоящее время проблема у вас есть то, что у вас есть два места, которые обрабатывают свой текст BOX - тот, который вызывает у вас проблему прямо сейчас, находится в TextBox_Change - это будет срабатывать один раз для каждого вводимого вами символа.

Вы либо хотите полностью удалить это или перенести его в событие TextBox AfterUpdate, а затем решить, хотите ли вы для удаления дубликата кода в событии Command Click

0

Ну, видимо, пользовательская форма не была включена «Истина/Ложь» из свойств. Именно по этой причине я не мог вводить ничего в текстовое поле 1. Я хотел бы поблагодарить DbMitch за то, что вы научили меня пошаговому отладочному подходу. Теперь форма выполняет свою предназначенную функцию.

Смежные вопросы