Вопрос:
Я хочу иметь возможность создать график, верхний левый из которого находится на моей позиции курсора. Это возможно? Можно ли преобразовать (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»). для любого имени/номера графика, на котором вы находитесь. Или итерации через них.