Страницы: 1
RSS
Узнать координаты ячейки
 
Как привязать форму к определенной ячейке?  
 
Раньше уже рассматривали подобный вопрос: http://www.planetaexcel.ru/forum.php?thread_id=9786, но то что предложил ZVI не совсем то, потому что фактически привязка идет к курсору. В итоге, если идет работа с ячейками, а курсор находится в это время в другом месте экрана, то форма выскакивает не там где нужно.
 
Про вывод UserForm в определенном месте экрана с привязкой к координатам ячеек  
можно ещё почитать здесь:  
 
http://forum.developing.ru/showpost.php?p=20187&postcount=5
 
{quote}{login=EducatedFool}{date=01.12.2009 11:48}{thema=}{post}Про вывод UserForm в определенном месте экрана с привязкой к координатам ячеек  
можно ещё почитать здесь:  
 
http://forum.developing.ru/showpost.php?p=20187&postcount=5{/post}{/quote}  
 
спасибо, но там вроде тоже привязка к курсору через Target, а как сделать чтобы привязка осуществлялась к ячейке без указания на нее курсором?
 
{quote}{login=Валерий}{date=01.12.2009 12:10}{thema=Re: }{post} а как сделать чтобы привязка осуществлялась к ячейке без указания на нее курсором?{/post}{/quote}А как эксель должен узнать об этой ячейке? Силой мысли?  
И можно ли понятнее расписать: "идет работа с ячейками, а курсор находится в это время в другом месте экрана, то форма выскакивает не там где нужно"
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=01.12.2009 01:58}{thema=Re: Re: }{post}{quote}{login=Валерий}{date=01.12.2009 12:10}{thema=Re: }{post} а как сделать чтобы привязка осуществлялась к ячейке без указания на нее курсором?{/post}{/quote}А как эксель должен узнать об этой ячейке? Силой мысли?  
И можно ли понятнее расписать: "идет работа с ячейками, а курсор находится в это время в другом месте экрана, то форма выскакивает не там где нужно"{/post}{/quote}  
 
Действительно, нужно было уточнить. Я имел ввиду указатель мыши. К примеру, я заполняю таблицу не выделяя ячейки мышкой, а переходя от одной к другой стрелками на клавиатуре. Указатель мыши в это время находится хрен знает где. В приведенных примерах форма привязана к координатам курсора мышиного и выскакивает рядом с ним.
 
В этом примере форма привязана к событию Workbook_SheetBeforeDoubleClick - т.е. ПередДвойнымКликомМышки. Если "Указатель мыши в это время находится хрен знает где", то как Вы вызываете календарь? Даблкликом "хрен знает где"?
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=01.12.2009 02:47}{thema=}{post}В этом примере форма привязана к событию Workbook_SheetBeforeDoubleClick - т.е. ПередДвойнымКликомМышки. Если "Указатель мыши в это время находится хрен знает где", то как Вы вызываете календарь? Даблкликом "хрен знает где"?{/post}{/quote}  
 
Видимо, я не совсем ясно выражаюсь. Мне необходимо, чтобы форма появлялась под ячейкой по событию Worksheet_Change. Неважно, появится она там по даблклику, райтклику, либо вообще без клика, но по событию и под ячейкой (что-то наподобии раскрывающегося списка по Alt+ стрелка вниз). В примерах, которые Вы могли видеть, привязка осуществлена, насколько я понимаю, к указателю мыши.
 
Конечно не совсем ясно: "Неважно, появится она там по даблклику, райтклику, либо вообще без клика, но по событию и под ячейкой". Это всё разные события. Если же всё же Вам нужно по событию Worksheet_Change, то кто Вам мешает код, ссылку на который Вам EducatedFool, применить к нужному событию?  
Private Sub Worksheet_Change(ByVal Target As Range)  
Cancel = True  
 Dim b As CommandBar  
 dx = 0: dy = 0  
 For Each b In Application.CommandBars  
   If b.Visible Then  
     Select Case b.Position  
      Case msoBarLeft: dx = dx + b.Width  
      Case msoBarMenuBar, msoBarTop: dy = dy + b.Height  
     End Select  
   End If  
 Next  
 With Target.Application.ActiveWindow  
   UserForm1.Left = (Target.Left - .VisibleRange.Left) * .Zoom / 100 + .Application.Left + dx  
   UserForm1.Top = (Target.Top - .VisibleRange.Top) * .Zoom / 100 + .Application.Top + dy  
   UserForm1.Show  
 End With  
End Sub
 
координаты ячейки    
на вскидку  
Range("G6").Top - отступ сверху  
Range("G6").Left - отступ слева.
 
{quote}{login=Юрий М}{date=01.12.2009 08:59}{thema=}{post}Конечно не совсем ясно: "Неважно, появится она там по даблклику, райтклику, либо вообще без клика, но по событию и под ячейкой". Это всё разные события. Если же всё же Вам нужно по событию Worksheet_Change, то кто Вам мешает код, ссылку на который Вам EducatedFool, применить к нужному событию?  
Private Sub Worksheet_Change(ByVal Target As Range)  
Cancel = True  
 Dim b As CommandBar  
 dx = 0: dy = 0  
 For Each b In Application.CommandBars  
   If b.Visible Then  
     Select Case b.Position  
      Case msoBarLeft: dx = dx + b.Width  
      Case msoBarMenuBar, msoBarTop: dy = dy + b.Height  
     End Select  
   End If  
 Next  
 With Target.Application.ActiveWindow  
   UserForm1.Left = (Target.Left - .VisibleRange.Left) * .Zoom / 100 + .Application.Left + dx  
   UserForm1.Top = (Target.Top - .VisibleRange.Top) * .Zoom / 100 + .Application.Top + dy  
   UserForm1.Show  
 End With  
End Sub{/post}{/quote}  
 
Спасибо за пример. Наиболее точного позиционирования получилось достичь при помощи OLEObject. Пожалуй, остановлюсь на нем.
Страницы: 1
Читают тему
Наверх