а ведь ты даже не проверял ничего, а написал этот "код" прям здесь, на форуме...
Чесс слово проверял. Я вставил сначала твой код, где макрос работал только с ячейками А1 и В1, затем, так как мне нужен весь столбец, я и указал как в формулах А:А, В:В. Работать макрос отказывался, но и не ругался. Сейчас попробовал вставить - ругается. Причем так громко... и матом! )))
Quote (Саня)
а ведь ты даже не проверял ничего, а написал этот "код" прям здесь, на форуме...
Чесс слово проверял. Я вставил сначала твой код, где макрос работал только с ячейками А1 и В1, затем, так как мне нужен весь столбец, я и указал как в формулах А:А, В:В. Работать макрос отказывался, но и не ругался. Сейчас попробовал вставить - ругается. Причем так громко... и матом! )))light26
Саня, и еще вопрос: Почему при использовании этого макроса
Quote (Саня)
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
когда в ячейке А1 я использую ссылку на другую ячейку (=С1) или любую формулу (например, =СУММ(С:С)), значение в В1 не меняется?
Саня, и еще вопрос: Почему при использовании этого макроса
Quote (Саня)
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
когда в ячейке А1 я использую ссылку на другую ячейку (=С1) или любую формулу (например, =СУММ(С:С)), значение в В1 не меняется?light26
Саня, Worksheet_Change - это изменения на рабочем листе. Правильно? тогда почему же не происходят, если я ввожу данные, пусть и в другие ячейки? или контроль изменений событий на листе ограничен этой строкой: If Target.Address = Range("A1").Address Then ? И, опять же, в ячейке А1 изменения тоже происходят.
Саня, Worksheet_Change - это изменения на рабочем листе. Правильно? тогда почему же не происходят, если я ввожу данные, пусть и в другие ячейки? или контроль изменений событий на листе ограничен этой строкой: If Target.Address = Range("A1").Address Then ? И, опять же, в ячейке А1 изменения тоже происходят.light26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Воскресенье, 19.02.2012, 12:16
тогда почему же не происходят, если я ввожу данные, пусть и в другие ячейки?
вот так попробуй [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) msgbox target.address If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
[/vba]
Quote (light26)
И, опять же, в ячейке А1 изменения тоже происходят.
ексель считает по-другому - ячейка не изменилась, просто изменилось значение, которое возвратила формула (формула тоже не изменилась) а вот если ты просто зайдешь в ячейку, ничего не изменишь и нажмешь Enter, тогда ексель посчитает, что с ячейкой произошли изменения...
с событиями не так просто, а иногда, совсем не очевидно почитай лучше книжки, больше пользы.
Quote (light26)
тогда почему же не происходят, если я ввожу данные, пусть и в другие ячейки?
вот так попробуй [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) msgbox target.address If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
[/vba]
Quote (light26)
И, опять же, в ячейке А1 изменения тоже происходят.
ексель считает по-другому - ячейка не изменилась, просто изменилось значение, которое возвратила формула (формула тоже не изменилась) а вот если ты просто зайдешь в ячейку, ничего не изменишь и нажмешь Enter, тогда ексель посчитает, что с ячейкой произошли изменения...
с событиями не так просто, а иногда, совсем не очевидно почитай лучше книжки, больше пользы.Саня
Private Sub Worksheet_Change(ByVal Target As Range) msgbox target.address If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
[/vba]
Ну, попробовал. Постоянно окно вылазит с адресом ячейки. Виной тому, как я понял, msgbox target.address.
Цитата (Саня)
вот так попробуй
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) msgbox target.address If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
[/vba]
Ну, попробовал. Постоянно окно вылазит с адресом ячейки. Виной тому, как я понял, msgbox target.address.light26
Привет) Ребят помогите, пожалуйста. Нужно Удалить все нечетные элементы массива, расположенные левее максимального Нашел 2 макроса, но собрать один рабочий не могу
[vba]
Код
Sub Êíîïêà5_Ùåë÷îê() 'Äàíà êâàäðàòíàÿ ìàòðèöà ðàçìåðíîñòüþ 10Õ10, çàìåíèòü âñå ìàêñèìàëüíûå ýëåìåíòû íóëÿìè Dim n As Integer 'i, j - ðàçìåðíîñòü ìàññèâà Dim i As Long, j As Long, Max As Long For i = 1 To 10 'çàäà¸ì íîìåðà ñòðîê Max = Cells(i, 1) 'ïðèìåì çà ìàêñèìàëüíûé ñàìûé ïåðâûé ýëåìåíò ñòðîêè For j = 1 To 10 'çàäà¸ì íîìåðà ñòîëáöîâ If Cells(i, j) > Max Then Max = Cells(i, j) 'åñëè ýëåìåíò áîëüøå ìàêñèìàëüíîãî, òî îí è áóäåò ìàêñèìàëüíûì 'Âûâîä îòâåòà' Cells(i, 12) = "Max:" Cells(i, 13) = Max Next j 'çàêðûòèå öèêëà äëÿ ñòîëáöîâ Next i 'çàêðûòèå öèêëà äëÿ ñòðîê End Sub
Sub Êíîïêà4_Ùåë÷îê() Dim i, j, k, A(10, 10) As Integer For i = 1 To 10 'ââîäèì ìàòðèöó èç ëèñòà Excel: For j = 1 To 10 A(i, j) = Cells(i, j) Next j Next k = 0 'îáíóëÿåì ñ÷åò÷èê ÷åòíûõ ÷èñåë For i = 1 To 10 'íà÷èíàåì ïåðåáîð ýëåìåíòîâ ìàòðèöû: For j = 1 To 10 If A(i, j) Mod 2 <> 0 Then 'ïðîâåðÿåì íà ÷åòíîñòü Cells(i, j) = Clear End If Next Next End Sub
[/vba]
[admin] Ivan2905, оформляйте длинные коды тегами VBA и спойлера, а сам код, копируйте из VBE при русской раскладке клавиатуры! Так как Ваш вопрос не имеет отношения к данной теме - эту тему закрываю[/admin]
Привет) Ребят помогите, пожалуйста. Нужно Удалить все нечетные элементы массива, расположенные левее максимального Нашел 2 макроса, но собрать один рабочий не могу
[vba]
Код
Sub Êíîïêà5_Ùåë÷îê() 'Äàíà êâàäðàòíàÿ ìàòðèöà ðàçìåðíîñòüþ 10Õ10, çàìåíèòü âñå ìàêñèìàëüíûå ýëåìåíòû íóëÿìè Dim n As Integer 'i, j - ðàçìåðíîñòü ìàññèâà Dim i As Long, j As Long, Max As Long For i = 1 To 10 'çàäà¸ì íîìåðà ñòðîê Max = Cells(i, 1) 'ïðèìåì çà ìàêñèìàëüíûé ñàìûé ïåðâûé ýëåìåíò ñòðîêè For j = 1 To 10 'çàäà¸ì íîìåðà ñòîëáöîâ If Cells(i, j) > Max Then Max = Cells(i, j) 'åñëè ýëåìåíò áîëüøå ìàêñèìàëüíîãî, òî îí è áóäåò ìàêñèìàëüíûì 'Âûâîä îòâåòà' Cells(i, 12) = "Max:" Cells(i, 13) = Max Next j 'çàêðûòèå öèêëà äëÿ ñòîëáöîâ Next i 'çàêðûòèå öèêëà äëÿ ñòðîê End Sub
Sub Êíîïêà4_Ùåë÷îê() Dim i, j, k, A(10, 10) As Integer For i = 1 To 10 'ââîäèì ìàòðèöó èç ëèñòà Excel: For j = 1 To 10 A(i, j) = Cells(i, j) Next j Next k = 0 'îáíóëÿåì ñ÷åò÷èê ÷åòíûõ ÷èñåë For i = 1 To 10 'íà÷èíàåì ïåðåáîð ýëåìåíòîâ ìàòðèöû: For j = 1 To 10 If A(i, j) Mod 2 <> 0 Then 'ïðîâåðÿåì íà ÷åòíîñòü Cells(i, j) = Clear End If Next Next End Sub
[/vba]
[admin] Ivan2905, оформляйте длинные коды тегами VBA и спойлера, а сам код, копируйте из VBE при русской раскладке клавиатуры! Так как Ваш вопрос не имеет отношения к данной теме - эту тему закрываю[/admin]Ivan2905