Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Событие на изменение содержимого ячейки EXCEL Добавлено: 28.04.04 13:14  

Автор вопроса:  AlekseyITN

Я в VBA НОЛЬ. Пишу, вообще-то на делфях. Но приспичило написать к екселю...Столкнулся с проблемой вот такой:

как отловить сообщение от екселя на изменение содержимого конкретной ячейки? (A1 или B1)

меня интересуют ячеки A1, B1, C1. Я хочу чтобы, после внесения пользователем в ячейки A1, B1 данных, считалось C1, как A1+B1.

1. какая ячека редактируется (ловить сообщение на изменение)

2. сделать пересчёт С1

Помогите кодом, пожайлуста.


 

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 dedtolya



Вопросов: 0
Ответов: 39
 Профиль | | #1 Добавлено: 28.04.04 13:38

Может не надо усложнять?

Для данного случая достаточно формулы в [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

"Этот код поместить кликнув правой на имени листа и в контекстном меню выбрать "Исходный текст"

Успехов.

Ответить

Номер ответа: 2
Автор ответа:
 AlekseyITN



Вопросов: 3
Ответов: 3
 Профиль | | #2 Добавлено: 30.04.04 16:14

извиняюсь за корявость кода, НО...оно ни фига не пашет....

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
My (Target.Address)
Range("J2").Value = 3301 * N * k1 * k2 * k3 * k4 * k5 * k6
Exit Sub
End If

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
My (Target.Address)
Range("J3").Value = (1132 + 206.69 * N) * k1 * k2 * k3 * k4 * k5 * k6
Exit Sub
End If

End Sub

 

Private Sub My(ByVal Stroka As String)
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

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
End Sub

------------------------

Почему когда я захожу в ячейку  F3, ничего не изменяю в ней...переключаюсь на E3, то оно считает Бог знает что...перемножает строку 3 и впихивает это всё в результат второй строки J2. ПОЧЕМУ?

Помогите! Заранее благодарен...

Ответить

Номер ответа: 3
Автор ответа:
 dedtolya



Вопросов: 0
Ответов: 39
 Профиль | | #3 Добавлено: 01.05.04 01:30

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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам