Страницы: 1
RSS
Target для диапазона ячеек
 
В ходе экспериментов написал такое:  
 
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)  
  Target.Value = Target.Value + 1  
End Sub  
 
Нажимаешь на любую ячейку и в ней число увеличивается на единичку.  
А как сделать, чтобы - выделил несколько ячеек - и во всех числа увеличились на единичку?  
Я делал For each - Next в разных комбинациях, не получилось.  
(Это не для работы, это мне просто для эрудиции).  
Спасибо.
 
а еще вопрос: единичка прибавляется только при первом нажатии на ячейку. А как сделать, чтобы прибавлялась и при втором нажатии и при третьем, без перехода на другие ячейки?  
Спасибо.
 
на первый вопрос:  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
For Each tt In Target  
tt.Value = tt.Value + 1  
Next  
End Sub  
По второму:  
События Worksheet_SelectionChange в этом случае, как Вы уже заметили, не происходит.  
Могу порекомедовать события Worksheet_BeforeRightClick или Worksheet_BeforeDoubleClick с тем же кодом.
 
Спасибо! Въехал!
 
а можно отловить движение мышки? Чтобы просто водить мышкой не нажимая на нее, а в ячейках, где прошелся курсор, прибавлялись единички. Наверно есть такая фенька.(Пардон, функция типа MoveMouse или подобная).
 
Через WinAPI (пример дать не могу, т.к. сам не знаю)))
 
{quote}{login=dsapa}{date=03.07.2008 05:46}{thema=}{post}а можно отловить движение мышки? Чтобы просто водить мышкой не нажимая на нее, а в ячейках, где прошелся курсор, прибавлялись единички. Наверно есть такая фенька.(Пардон, функция типа MoveMouse или подобная).{/post}{/quote}:Жесть! Может еще и взглядом? Посмотрел на ячейку, а там - бац и плюсАдин
 
я пробовал с мышиным api работать(выкладывал тут) - поищите.
 
Спасибо, ребята, поищу.
 
Всё не то.  
 
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  
 
отлавливает движение курсора на форме. А мне надо прямо на листе. Короче, пока не нашел.
 
Вот тут - http://msoffice.nm.ru/faq/macros/winapi2.htm - нашел такое:  
 
Как определить, над какой из ячеек рабочего листа находится курсор мышки ?  
 
Private Type POINTAPI    
   X As Long    
   Y As Long    
End Type    
 
Private Declare Function GetCursorPos _    
       Lib "user32.dll" (lpPoint As POINTAPI) As Long    
 
Private Sub GetRangeFromPoint()    
   Dim iPOINT As POINTAPI, iCell As Range    
 
   GetCursorPos iPOINT    
 
   Set iCell = ActiveWindow.RangeFromPoint(X:=iPOINT.X, Y:=iPOINT.Y)    
 
   If Not iCell Is Nothing Then    
      MsgBox "Курсор мышки находится над " & _    
      iCell.Address(External:=True), vbExclamation, ""    
   Else    
      MsgBox "Курсор мышки находится вне ячеек рабочего листа", , ""    
   End If    
End Sub  
 
Только не работает. Может кто знает, как запустить прогу?  
Спасибо.
 
---  
См. приложение  
---  
ZVI
 
Вот, похоже, нашел что искал! Но как применить не знаю. Ручки то кривенькие. Нужно чтоб число в ячейке при каком-либо РукиПальцевМыши(или чего еще)действии увеличивалось на 1, а так же при последующих повторах действия единичка прибавлялась . Желательно чтоб действие было простым типа щелчка мыши или сочетание клавиш. При попытке создать макрос и перенести в него текст из первого поста    
Worksheet_SelectionChange(ByVal Target As Excel.Range)  
Target.Value = Target.Value + 1  
получаю различного рода ошибки, которые описывать нет смысла. Скажу честно то, что написано в этой теме для меня темный лес, но чтоб единичка прибавлялась очень нужно. Пожалуйста, кто понимает, доходчиво объясните, как это сделать своими руками или файл, в котором такой макрос работает, выложите. У меня вроде Office10, если это имеет значение.
 
В модуль листа:  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   If Not Intersect(Target, Range("A1:A10")) Is Nothing Then  
       If Not IsNumeric(Target) Then  
           Exit Sub  
       Else  
           Target = Target + 1  
       End If  
   End If  
End Sub  
Контролируется диапазон А1:А10
 
{quote}{login=Юрий М}{date=03.08.2010 11:30}{thema=}{post}В модуль листа:  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   If Not Intersect(Target, Range("A1:A10")) Is Nothing Then  
       If Not IsNumeric(Target) Then  
           Exit SubB  
       Else  
           Target = Target + 1  
       End If  
   End If  
End Sub  
Контролируется диапазон А1:А10{/post}{/quote}    
 
Спасибо! Только что дальше? Что нужно нажать чтоб макрос сохранился и начал работать? Если просто закрыть Visual Basic, то ничего не происходит. И что значит "Контролируется диапазон А1:А10"? И при каком действии(щелчок,клавиши) будет прибавляться единичка?
 
Просто закройте редактор. Макрос сработает при активации любой ячейки в указанном диапазоне.
 
Увеличение значения ячейки по двойному клику подойдет?
 
ZVI большое спасибо! Это то что нужно. Юрий М и тебе спасибо, но уже больше ничего проверять не буду раз все и так работает. Наверно я что то делал все равно не так.
Страницы: 1
Читают тему
Наверх