Как получить координату (X, Y) моего курсора на листе?

Вопрос:Я хочу иметь возможность создать график, верхний левый из которого находится на моей позиции курсора. Это возможно? Можно ли преобразовать (X, Y) моей мыши в формат диапазона? Лучший ответ: Не уверен насчет мыши x y, но вы можете получить диапазон изменения рабочего листа. Поместите диаграмму в это место. Private Sub Worksheet_SelectionChange(ByVal Target As Range) Chart.Left

Вопрос:

Я хочу иметь возможность создать график, верхний левый из которого находится на моей позиции курсора. Это возможно? Можно ли преобразовать (X, Y) моей мыши в формат диапазона?

Лучший ответ:

Не уверен насчет мыши x y, но вы можете получить диапазон изменения рабочего листа. Поместите диаграмму в это место.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Chart.Left = Target.column Chant.Top = Target.row End Sub Ответ №1

Hm, он не точно построен в AFAIK, но я нашел эту страницу, в котором содержится предложение, которое сработало для меня:

В модуле поместите это вверху:

Private Declare Function GetCursorPos Lib «user32» (lpPoint As POINTAPI) As Long Private Declare Function ScreenToClient Lib «user32» (ByVal hWnd As Long, _ lpPoint As POINTAPI) As Long Private Type POINTAPI X As Long Y As Long End Type

Затем для подпрограмм, чтобы получить mouseX и mouseY, поставьте это ниже:

Function MouseX(Optional ByVal hWnd As Long) As Long ‘ Get mouse X coordinates in pixels ‘ ‘ If a window handle is passed, the result is relative to the client area ‘ of that window, otherwise the result is relative to the screen Dim lpPoint As POINTAPI Application.Volatile(false) GetCursorPos lpPoint If hWnd Then ScreenToClient hWnd, lpPoint MouseX = lpPoint.X End Function

и

Function MouseY(Optional ByVal hWnd As Long) As Long ‘ Get mouse Y coordinates in pixels ‘ ‘ If a window handle is passed, the result is relative to the client area ‘ of that window, otherwise the result is relative to the screen Dim lpPoint As POINTAPI Application.Volatile(false) GetCursorPos lpPoint If hWnd Then ScreenToClient hWnd, lpPoint MouseY = lpPoint.Y End Function

Затем, в Excel, если вы просто войдете в ячейку =mouseX(), она вернет позицию mouseX, когда вы нажмете ENTER. То же самое с =mouseY().

Пробуя это, я сделал:

Sub chart_Test() ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveSheet.Shapes(«Chart 1»).Top = MouseY() ActiveSheet.Shapes(«Chart 1»).Left = MouseX() End Sub

и заставить его работать.

edit: Заметьте, я не так хорош в диаграммах, как и другие вещи в VBA, так как вы создаете диаграммы, вам нужно отредактировать часть .Shapes(«Chart 1»). для любого имени/номера графика, на котором вы находитесь. Или итерации через них.

Оцените статью
Добавить комментарий