Страница: 1 |
Я в VBA НОЛЬ. Пишу, вообще-то на делфях. Но приспичило написать к екселю...Столкнулся с проблемой вот такой: как отловить сообщение от екселя на изменение содержимого конкретной ячейки? (A1 или B1) меня интересуют ячеки A1, B1, C1. Я хочу чтобы, после внесения пользователем в ячейки A1, B1 данных, считалось C1, как A1+B1. 1. какая ячека редактируется (ловить сообщение на изменение) 2. сделать пересчёт С1 Помогите кодом, пожайлуста.
Может не надо усложнять? Для данного случая достаточно формулы в [c1]"=A1+B1" Ну а если уж больно хоцца в VBA -прошу: Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Or Target = Range("B1") Then Range("C1").Value = Range("A1").Value + Range("B1").Value End If End Sub "Этот код поместить кликнув правой на имени листа и в контекстном меню выбрать "Исходный текст" Успехов. извиняюсь за корявость кода, НО...оно ни фига не пашет.... Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("B2") Or Target = Range("C2") Or Target = Range("D2") Or Target = Range("E2") Or Target = Range("F2") Or Target = Range("H2") Or Target = Range("G2") Then If Target = Range("B3") Or Target = Range("C3") Or Target = Range("D3") Or Target = Range("E3") Or Target = Range("F3") Or Target = Range("H3") Or Target = Range("G3") Then End Sub Private Sub My(ByVal Stroka As String) If Range("B" + NomerStroki).Value <> 0 Then If Range("D" + NomerStroki).Value = 0 Then If Range("E" + NomerStroki).Value = 0 Then If Range("F" + NomerStroki).Value = 0 Then If Range("G" + NomerStroki).Value = 0 Then If Range("H" + NomerStroki).Value = 0 Then ------------------------ Почему когда я захожу в ячейку F3, ничего не изменяю в ней...переключаюсь на E3, то оно считает Бог знает что...перемножает строку 3 и впихивает это всё в результат второй строки J2. ПОЧЕМУ? Помогите! Заранее благодарен... Private Sub Worksheet_Change(ByVal Target As Range) Set isect2 = Application.Intersect(Range("B2:H2"), Target) Set isect3 = Application.Intersect(Range("B3:H3"), Target) If Not isect2 Is Nothing Or Not isect3 Is Nothing Then MySub Target.Row End If End Sub Private Sub MySub(NomerStroki As Integer) MsgBox NomerStroki If Range("B" & NomerStroki).Value <> 0 Then N = Range("B" & NomerStroki).Value Else Range("J" & NomerStroki).Value = "введите число" End If If Range("C" & NomerStroki).Value = 0 Then k1 = 1 Else: k1 = Range("C" & NomerStroki).Value End If If Range("D" & NomerStroki).Value = 0 Then k2 = 1 Else: k2 = Range("D" & NomerStroki).Value End If If Range("E" & NomerStroki).Value = 0 Then k3 = 1 Else: k3 = Range("E" & NomerStroki).Value End If If Range("F" & NomerStroki).Value = 0 Then k4 = 1 Else: k4 = Range("F" & NomerStroki).Value End If If Range("G" & NomerStroki).Value = 0 Then k5 = 1 Else: k5 = Range("G" & NomerStroki).Value End If If Range("H" & NomerStroki).Value = 0 Then k6 = 1 Else: k6 = Range("H" & NomerStroki).Value End If If NomerStroki = 2 Then On Error GoTo Oshibka Range("J2").Value = 3301 * N * k1 * k2 * k3 * k4 * k5 * k6 Else Range("J3").Value = (1132 + 206.69 * N) * k1 * k2 * k3 * k4 * k5 * k6 End If Exit Sub Oshibka: MsgBox "Not Numeric" End Sub Страница: 1 |
Вопрос: Событие на изменение содержимого ячейки EXCEL
Добавлено: 28.04.04 13:14
Автор вопроса: AlekseyITN
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
dedtolya
Вопросов: 0
Ответов: 39
Профиль | | #1
Добавлено: 28.04.04 13:38
Номер ответа: 2
Автор ответа:
AlekseyITN
Вопросов: 3
Ответов: 3
Профиль | | #2
Добавлено: 30.04.04 16:14
My (Target.Address)
Range("J2").Value = 3301 * N * k1 * k2 * k3 * k4 * k5 * k6
Exit Sub
End If
My (Target.Address)
Range("J3").Value = (1132 + 206.69 * N) * k1 * k2 * k3 * k4 * k5 * k6
Exit Sub
End If
NumberOfLetters = Len(Stroka)
MsgBox Stroka
If NumberOfLetters = 4 Then
NomerStroki = Right(Stroka, 1)
End If
If NumberOfLetters = 5 Then
NomerStroki = Right(Stroka, 2)
End If
If NumberOfLetters = 6 Then
NomerStroki = Right(Stroka, 3)
End If
N = Range("B" + NomerStroki).Value
Else
Range("J" + NomerStroki).Value = "введите число"
End If
If Range("C" + NomerStroki).Value = 0 Then
k1 = 1
Else: k1 = Range("C" + NomerStroki).Value
End If
k2 = 1
Else: k2 = Range("D" + NomerStroki).Value
End If
k3 = 1
Else: k3 = Range("E" + NomerStroki).Value
End If
k4 = 1
Else: k4 = Range("F" + NomerStroki).Value
End If
k5 = 1
Else: k5 = Range("G" + NomerStroki).Value
End If
k6 = 1
Else: k6 = Range("H" + NomerStroki).Value
End If
End Sub
Номер ответа: 3
Автор ответа:
dedtolya
Вопросов: 0
Ответов: 39
Профиль | | #3
Добавлено: 01.05.04 01:30