Есть форма на которой находится SpinButton. К нему был привязан код который выводил записанные данные обратно на форму. Все работало до того момента пока не понадобилось добавить колонки в таблице. Сейчас данные заносятся обратно на форму не в те окошки из которых попали в таблицу. Нужно поправить макрос, чтобы данные которые вносятся через форму в таблицу , заносились обратно на форму в те же окошки при нажатии SpinButton. Помогите пожалуйста . Уже долгое время ничего не получается
Есть форма на которой находится SpinButton. К нему был привязан код который выводил записанные данные обратно на форму. Все работало до того момента пока не понадобилось добавить колонки в таблице. Сейчас данные заносятся обратно на форму не в те окошки из которых попали в таблицу. Нужно поправить макрос, чтобы данные которые вносятся через форму в таблицу , заносились обратно на форму в те же окошки при нажатии SpinButton. Помогите пожалуйста . Уже долгое время ничего не получаетсяand150382
Вот что смог сделать.Но появилась проблема при добавлении данных в уже существующюю строку, перескакивают данные с одного столбца в другой и появляется надпись ЛОЖЬ.
Кто-нибудь помогите сделать пожалуйста.
Вот что смог сделать.Но появилась проблема при добавлении данных в уже существующюю строку, перескакивают данные с одного столбца в другой и появляется надпись ЛОЖЬ.
and150382, ох... что я могу сказать... тяжело )) я такое делал... но что я там делал....я как то на форме создавал отличае с помощью label и что то там выкручивал))) хах...могу скинуть тонну кода.. поковыряетесь
and150382, ох... что я могу сказать... тяжело )) я такое делал... но что я там делал....я как то на форме создавал отличае с помощью label и что то там выкручивал))) хах...могу скинуть тонну кода.. поковыряетесь Матраскин
Private Sub CommandButton1_Click() Dim iLastRow As Long Dim iFoundRng As Range Dim iBazaSht As Worksheet Dim iResponse As Byte
If Me.myColumn3 = "" Then MsgBox "Введите информацию в поле № заказа", vbExclamation, "Ошибка" Exit Sub End If Set iBazaSht = ThisWorkbook.Sheets("База") 'имя листа, куда будем вносить информацию Set iFoundRng = iBazaSht.Columns(3).Find(what:=myColumn3.Text, LookAt:=xlWhole) 'ячейка целиком 'Заливка ячейки при нажатии Checkbox(myColumn18), добовляем переменную х Dim x As Range 'если такая запись уже есть If Not iFoundRng Is Nothing Then iResponse = MsgBox("Такой заказ уже существует.Добавить в заказ данные ?" & vbCr & vbCr & "Да - добавить данные в заказ, Нет - добавить данные на новую строку", vbYesNoCancel + vbExclamation, "Внимание!")
If iResponse = vbYes Then iLastRow = iFoundRng.Row ElseIf iResponse = vbNo Then With Sheets(iBazaSht.Name) iLastRow = .Cells(.Rows.Count, 3).End(xlUp).Row + 1 End With Else Exit Sub End If Else With Sheets(iBazaSht.Name) iLastRow = .Cells(.Rows.Count, 3).End(xlUp).Row + 1 End With End If With Sheets(iBazaSht.Name) .Cells(iLastRow, 2) = Me.myColumn2.Value .Cells(iLastRow, 3) = Me.myColumn3.Value
'Заливка ячейки при нажатии Checkbox(myColumn18),заливаем ячейку зеленым если стоит галочка If myColumn18 Then .Cells(iLastRow, 3).Interior.ColorIndex = 10 'очищаем Checkbox от галочки myColumn18 = False
Private Sub CommandButton1_Click() Dim iLastRow As Long Dim iFoundRng As Range Dim iBazaSht As Worksheet Dim iResponse As Byte
If Me.myColumn3 = "" Then MsgBox "Введите информацию в поле № заказа", vbExclamation, "Ошибка" Exit Sub End If Set iBazaSht = ThisWorkbook.Sheets("База") 'имя листа, куда будем вносить информацию Set iFoundRng = iBazaSht.Columns(3).Find(what:=myColumn3.Text, LookAt:=xlWhole) 'ячейка целиком 'Заливка ячейки при нажатии Checkbox(myColumn18), добовляем переменную х Dim x As Range 'если такая запись уже есть If Not iFoundRng Is Nothing Then iResponse = MsgBox("Такой заказ уже существует.Добавить в заказ данные ?" & vbCr & vbCr & "Да - добавить данные в заказ, Нет - добавить данные на новую строку", vbYesNoCancel + vbExclamation, "Внимание!")
If iResponse = vbYes Then iLastRow = iFoundRng.Row ElseIf iResponse = vbNo Then With Sheets(iBazaSht.Name) iLastRow = .Cells(.Rows.Count, 3).End(xlUp).Row + 1 End With Else Exit Sub End If Else With Sheets(iBazaSht.Name) iLastRow = .Cells(.Rows.Count, 3).End(xlUp).Row + 1 End With End If With Sheets(iBazaSht.Name) .Cells(iLastRow, 2) = Me.myColumn2.Value .Cells(iLastRow, 3) = Me.myColumn3.Value
'Заливка ячейки при нажатии Checkbox(myColumn18),заливаем ячейку зеленым если стоит галочка If myColumn18 Then .Cells(iLastRow, 3).Interior.ColorIndex = 10 'очищаем Checkbox от галочки myColumn18 = False
во...котан перед мной привёл какой то поменьше макрос
[vba]
Код
Sub Edit() If (ActiveCell.Row > 1 And Sheets("Главная").Cells(ActiveCell.Row, 2) <> "") Then ProfPrognoz.lblAddOrEdit = ActiveCell.Row ProfPrognoz.Show Else MsgBox ("Выбирете строку, которую хотите редактировать") End If End Sub
Private Sub cmdSave_Click() Dim myrow As Integer Dim message As String, i As Integer message = "" myrow = CInt(lblAddOrEdit.Caption) If (ProfPrognoz.LastName = "") Then message = message + "Не указана фамилия!" & Chr(13) End If
If (ProfPrognoz.FirstName = "") Then message = message + "Не указано имя!" & Chr(13) End If
If (ProfPrognoz.PatronymicName = "") Then message = message + "Не указано отчество!" & Chr(13) End If
If (ProfPrognoz.man = False And ProfPrognoz.woman = False) Then message = message + "Не указан пол!" & Chr(13) End If
'If (ProfPrognoz.seria = "") Then ' message = message + "Не указана серия паспорта" & Chr(13) 'End If
'If (ProfPrognoz.number = "") Then ' message = message + "Не указан номер паспорта" & Chr(13) 'End If
'If (ProfPrognoz.telefon = "") Then ' message = message + "Не указан номер телефона" & Chr(13) 'End If If (ProfPrognoz.adres = "") Then message = message + "Не указан адрес!" & Chr(13) End If
If (ProfPrognoz.cbxWish.Value = "не выбрано") Then message = message + "Не указаны профессиональные намерения учащегося!" & Chr(13) End If 'не вводили ли раньше этого человека? i = 3 Dim w As Boolean w = True While (w And i < 100) If (Sheets("Главная").Cells(i, 2) = ProfPrognoz.LastName.Text And Sheets("Главная").Cells(i, 3) = ProfPrognoz.FirstName.Text And Sheets("Главная").Cells(i, 4) = ProfPrognoz.PatronymicName.Text And myrow = 0) Then w = False End If i = i + 1 Wend If (w) Then
If (message <> "") Then MsgBox (message) Else 'снять защиту с листа Sheets("Главная").Unprotect password:="openplease" 'редактируется или добавляется запись
If (myrow <> 0) Then 'редактируется Sheets("Главная").Cells(myrow, 2) = ProfPrognoz.LastName.Text Sheets("Главная").Cells(myrow, 3) = ProfPrognoz.FirstName.Text Sheets("Главная").Cells(myrow, 4) = ProfPrognoz.PatronymicName.Text If (ProfPrognoz.man = True) Then Sheets("Главная").Cells(myrow, 5) = "1" Else Sheets("Главная").Cells(myrow, 5) = "2" End If Sheets("Главная").Cells(myrow, 6) = ProfPrognoz.seria.Text Sheets("Главная").Cells(myrow, 7) = ProfPrognoz.number.Text Sheets("Главная").Cells(myrow, 8) = ProfPrognoz.adres.Text Sheets("Главная").Cells(myrow, 9) = ProfPrognoz.telefon.Text Select Case ProfPrognoz.cbxWish.Value Case Is = "Планирую поступление в ВУЗ" Sheets("Главная").Cells(myrow, 15) = 1 Case Is = "Планирую поступление в ВУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(myrow, 15) = 2 Case Is = "Планирую поступление в ССУЗ" Sheets("Главная").Cells(myrow, 15) = 3 Case Is = "Планирую поступление в ССУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(myrow, 15) = 4 Case Is = "Планирую поступление в ПТУ" Sheets("Главная").Cells(myrow, 15) = 5 Case Is = "Планирую поступление в ПТУ, но не определился с выбором специальности" Sheets("Главная").Cells(myrow, 15) = 6 Case Is = "Не планирую поступление в учебное заведение" Sheets("Главная").Cells(myrow, 15) = 7 Case Is = "Планирую дальнейшее обучение в школе, гимназии, лицее" Sheets("Главная").Cells(myrow, 15) = 8 End Select
If (cbxWish.Value <> "Планирую поступление в ВУЗ") Then Dim k As Integer k = 0 Do While k < 50 Sheets("Главная").Cells(myrow, 16 + k) = "" k = k + 1 Loop End If 'поставить защиту на лист Sheets("Главная").Protect password:="openplease", Scenarios:=True, UserInterfaceOnly:=True Unload ProfPrognoz Else 'найти пустую строку i = 3 While (Sheets("Главная").Cells(i, 2) <> "" And Sheets("Главная").Cells(i, 3) <> "" And _ Sheets("Главная").Cells(i, 4) <> "") 'строка пустая i = i + 1 Wend
'записать данные Sheets("Главная").Cells(i, 2) = ProfPrognoz.LastName.Text Sheets("Главная").Cells(i, 3) = ProfPrognoz.FirstName.Text Sheets("Главная").Cells(i, 4) = ProfPrognoz.PatronymicName.Text If (ProfPrognoz.man = True) Then Sheets("Главная").Cells(i, 5) = "1" Else Sheets("Главная").Cells(i, 5) = "2" End If Sheets("Главная").Cells(i, 6) = ProfPrognoz.seria.Text Sheets("Главная").Cells(i, 7) = ProfPrognoz.number.Text Sheets("Главная").Cells(i, 8) = ProfPrognoz.adres.Text Sheets("Главная").Cells(i, 9) = ProfPrognoz.telefon.Text Select Case ProfPrognoz.cbxWish.Value Case Is = "Планирую поступление в ВУЗ" Sheets("Главная").Cells(i, 15) = 1 Case Is = "Планирую поступление в ВУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(i, 15) = 2 Case Is = "Планирую поступление в ССУЗ" Sheets("Главная").Cells(i, 15) = 3 Case Is = "Планирую поступление в ССУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(i, 15) = 4 Case Is = "Планирую поступление в ПТУ" Sheets("Главная").Cells(i, 15) = 5 Case Is = "Планирую поступление в ПТУ, но не определился с выбором специальности" Sheets("Главная").Cells(i, 15) = 6 Case Is = "Не планирую поступление в учебное заведение" Sheets("Главная").Cells(i, 15) = 7 Case Is = "Планирую дальнейшее обучение в школе, гимназии, лицее" Sheets("Главная").Cells(i, 15) = 8 End Select '---------------------------------------------------------- Sheets("Главная").Cells(i, 1) = Sheets("Общие_данные").Cells(1, 2) Sheets("Главная").Cells(i, 10) = Sheets("Общие_данные").Cells(3, 2) Sheets("Главная").Cells(i, 11) = Sheets("Общие_данные").Cells(6, 2) Sheets("Главная").Cells(i, 12) = Sheets("Общие_данные").Cells(5, 2) & "." & Sheets("Общие_данные").Cells(5, 3) & "." & Sheets("Общие_данные").Cells(5, 4) Sheets("Главная").Cells(i, 13) = Sheets("Общие_данные").Cells(2, 2) Sheets("Главная").Cells(i, 14) = Sheets("Общие_данные").Cells(4, 2)
If (cbxWish.Value <> "Планирую поступление в ВУЗ" Or cbxWish.Value <> "Планирую поступление в ССУЗ") Then k = 1 Do While k < 50 Sheets("Главная").Cells(i, 16 + k) = "" k = k + 1 Loop End If
'поставить защиту на лист Sheets("Главная").Protect password:="openplease", Scenarios:=True, UserInterfaceOnly:=True Unload ProfPrognoz End If End If Else MsgBox (ProfPrognoz.LastName.Value & " " & ProfPrognoz.FirstName.Value & " " & ProfPrognoz.PatronymicName.Value & " был(а) введен(а) раннее") 'обнулить все поля End If End Sub
[/vba]
во...котан перед мной привёл какой то поменьше макрос
[vba]
Код
Sub Edit() If (ActiveCell.Row > 1 And Sheets("Главная").Cells(ActiveCell.Row, 2) <> "") Then ProfPrognoz.lblAddOrEdit = ActiveCell.Row ProfPrognoz.Show Else MsgBox ("Выбирете строку, которую хотите редактировать") End If End Sub
Private Sub cmdSave_Click() Dim myrow As Integer Dim message As String, i As Integer message = "" myrow = CInt(lblAddOrEdit.Caption) If (ProfPrognoz.LastName = "") Then message = message + "Не указана фамилия!" & Chr(13) End If
If (ProfPrognoz.FirstName = "") Then message = message + "Не указано имя!" & Chr(13) End If
If (ProfPrognoz.PatronymicName = "") Then message = message + "Не указано отчество!" & Chr(13) End If
If (ProfPrognoz.man = False And ProfPrognoz.woman = False) Then message = message + "Не указан пол!" & Chr(13) End If
'If (ProfPrognoz.seria = "") Then ' message = message + "Не указана серия паспорта" & Chr(13) 'End If
'If (ProfPrognoz.number = "") Then ' message = message + "Не указан номер паспорта" & Chr(13) 'End If
'If (ProfPrognoz.telefon = "") Then ' message = message + "Не указан номер телефона" & Chr(13) 'End If If (ProfPrognoz.adres = "") Then message = message + "Не указан адрес!" & Chr(13) End If
If (ProfPrognoz.cbxWish.Value = "не выбрано") Then message = message + "Не указаны профессиональные намерения учащегося!" & Chr(13) End If 'не вводили ли раньше этого человека? i = 3 Dim w As Boolean w = True While (w And i < 100) If (Sheets("Главная").Cells(i, 2) = ProfPrognoz.LastName.Text And Sheets("Главная").Cells(i, 3) = ProfPrognoz.FirstName.Text And Sheets("Главная").Cells(i, 4) = ProfPrognoz.PatronymicName.Text And myrow = 0) Then w = False End If i = i + 1 Wend If (w) Then
If (message <> "") Then MsgBox (message) Else 'снять защиту с листа Sheets("Главная").Unprotect password:="openplease" 'редактируется или добавляется запись
If (myrow <> 0) Then 'редактируется Sheets("Главная").Cells(myrow, 2) = ProfPrognoz.LastName.Text Sheets("Главная").Cells(myrow, 3) = ProfPrognoz.FirstName.Text Sheets("Главная").Cells(myrow, 4) = ProfPrognoz.PatronymicName.Text If (ProfPrognoz.man = True) Then Sheets("Главная").Cells(myrow, 5) = "1" Else Sheets("Главная").Cells(myrow, 5) = "2" End If Sheets("Главная").Cells(myrow, 6) = ProfPrognoz.seria.Text Sheets("Главная").Cells(myrow, 7) = ProfPrognoz.number.Text Sheets("Главная").Cells(myrow, 8) = ProfPrognoz.adres.Text Sheets("Главная").Cells(myrow, 9) = ProfPrognoz.telefon.Text Select Case ProfPrognoz.cbxWish.Value Case Is = "Планирую поступление в ВУЗ" Sheets("Главная").Cells(myrow, 15) = 1 Case Is = "Планирую поступление в ВУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(myrow, 15) = 2 Case Is = "Планирую поступление в ССУЗ" Sheets("Главная").Cells(myrow, 15) = 3 Case Is = "Планирую поступление в ССУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(myrow, 15) = 4 Case Is = "Планирую поступление в ПТУ" Sheets("Главная").Cells(myrow, 15) = 5 Case Is = "Планирую поступление в ПТУ, но не определился с выбором специальности" Sheets("Главная").Cells(myrow, 15) = 6 Case Is = "Не планирую поступление в учебное заведение" Sheets("Главная").Cells(myrow, 15) = 7 Case Is = "Планирую дальнейшее обучение в школе, гимназии, лицее" Sheets("Главная").Cells(myrow, 15) = 8 End Select
If (cbxWish.Value <> "Планирую поступление в ВУЗ") Then Dim k As Integer k = 0 Do While k < 50 Sheets("Главная").Cells(myrow, 16 + k) = "" k = k + 1 Loop End If 'поставить защиту на лист Sheets("Главная").Protect password:="openplease", Scenarios:=True, UserInterfaceOnly:=True Unload ProfPrognoz Else 'найти пустую строку i = 3 While (Sheets("Главная").Cells(i, 2) <> "" And Sheets("Главная").Cells(i, 3) <> "" And _ Sheets("Главная").Cells(i, 4) <> "") 'строка пустая i = i + 1 Wend
'записать данные Sheets("Главная").Cells(i, 2) = ProfPrognoz.LastName.Text Sheets("Главная").Cells(i, 3) = ProfPrognoz.FirstName.Text Sheets("Главная").Cells(i, 4) = ProfPrognoz.PatronymicName.Text If (ProfPrognoz.man = True) Then Sheets("Главная").Cells(i, 5) = "1" Else Sheets("Главная").Cells(i, 5) = "2" End If Sheets("Главная").Cells(i, 6) = ProfPrognoz.seria.Text Sheets("Главная").Cells(i, 7) = ProfPrognoz.number.Text Sheets("Главная").Cells(i, 8) = ProfPrognoz.adres.Text Sheets("Главная").Cells(i, 9) = ProfPrognoz.telefon.Text Select Case ProfPrognoz.cbxWish.Value Case Is = "Планирую поступление в ВУЗ" Sheets("Главная").Cells(i, 15) = 1 Case Is = "Планирую поступление в ВУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(i, 15) = 2 Case Is = "Планирую поступление в ССУЗ" Sheets("Главная").Cells(i, 15) = 3 Case Is = "Планирую поступление в ССУЗ, но не определился с выбором специальности" Sheets("Главная").Cells(i, 15) = 4 Case Is = "Планирую поступление в ПТУ" Sheets("Главная").Cells(i, 15) = 5 Case Is = "Планирую поступление в ПТУ, но не определился с выбором специальности" Sheets("Главная").Cells(i, 15) = 6 Case Is = "Не планирую поступление в учебное заведение" Sheets("Главная").Cells(i, 15) = 7 Case Is = "Планирую дальнейшее обучение в школе, гимназии, лицее" Sheets("Главная").Cells(i, 15) = 8 End Select '---------------------------------------------------------- Sheets("Главная").Cells(i, 1) = Sheets("Общие_данные").Cells(1, 2) Sheets("Главная").Cells(i, 10) = Sheets("Общие_данные").Cells(3, 2) Sheets("Главная").Cells(i, 11) = Sheets("Общие_данные").Cells(6, 2) Sheets("Главная").Cells(i, 12) = Sheets("Общие_данные").Cells(5, 2) & "." & Sheets("Общие_данные").Cells(5, 3) & "." & Sheets("Общие_данные").Cells(5, 4) Sheets("Главная").Cells(i, 13) = Sheets("Общие_данные").Cells(2, 2) Sheets("Главная").Cells(i, 14) = Sheets("Общие_данные").Cells(4, 2)
If (cbxWish.Value <> "Планирую поступление в ВУЗ" Or cbxWish.Value <> "Планирую поступление в ССУЗ") Then k = 1 Do While k < 50 Sheets("Главная").Cells(i, 16 + k) = "" k = k + 1 Loop End If
'поставить защиту на лист Sheets("Главная").Protect password:="openplease", Scenarios:=True, UserInterfaceOnly:=True Unload ProfPrognoz End If End If Else MsgBox (ProfPrognoz.LastName.Value & " " & ProfPrognoz.FirstName.Value & " " & ProfPrognoz.PatronymicName.Value & " был(а) введен(а) раннее") 'обнулить все поля End If End Sub
Подскажите, а как сделать чтобы при открытии формы показывалась первая незаполненная строка, сейчас код перелистывания такой [vba]
Код
Private Sub SpinButton1_SpinDown() ' прокрутка списка к началу базы If Строка > ПерваяСтрокаБД Then Строка = Строка - 1: RowChanged End Sub Private Sub SpinButton1_SpinUp() ' прокрутка списка к концу базы If Строка < ПоследняяСтрокаБД Then Строка = Строка + 1: RowChanged End Sub
Sub RowChanged() ' вызывается при изменении рабочей строки базы Rows(Строка).Select ЗаполнениеВсехПолейФормы End Sub
Private Sub UserForm_Initialize()
If Строка < ПерваяСтрокаБД Then Строка = ПерваяСтрокаБД ' при запуске формы начинаем просмотр с первой строки БД
'вычисляем номер строки для последней заполненной ячейки в столбце B ПоследняяСтрокаБД = ThisWorkbook.Worksheets("База").Range("b" & ThisWorkbook.Worksheets("База").Rows.Count).End(xlUp).Row
ThisWorkbook.Worksheets("База").Activate ' активируем лист с базой RowChanged ' выделяет активную строку в базе и вызывает макрос ЗаполнениеВсехПолейФормы
[/vba] и показывается первая строка
Подскажите, а как сделать чтобы при открытии формы показывалась первая незаполненная строка, сейчас код перелистывания такой [vba]
Код
Private Sub SpinButton1_SpinDown() ' прокрутка списка к началу базы If Строка > ПерваяСтрокаБД Then Строка = Строка - 1: RowChanged End Sub Private Sub SpinButton1_SpinUp() ' прокрутка списка к концу базы If Строка < ПоследняяСтрокаБД Then Строка = Строка + 1: RowChanged End Sub
Sub RowChanged() ' вызывается при изменении рабочей строки базы Rows(Строка).Select ЗаполнениеВсехПолейФормы End Sub
Private Sub UserForm_Initialize()
If Строка < ПерваяСтрокаБД Then Строка = ПерваяСтрокаБД ' при запуске формы начинаем просмотр с первой строки БД
'вычисляем номер строки для последней заполненной ячейки в столбце B ПоследняяСтрокаБД = ThisWorkbook.Worksheets("База").Range("b" & ThisWorkbook.Worksheets("База").Rows.Count).End(xlUp).Row
ThisWorkbook.Worksheets("База").Activate ' активируем лист с базой RowChanged ' выделяет активную строку в базе и вызывает макрос ЗаполнениеВсехПолейФормы