Excel определить координаты на экране

95 / 91 / 16

Регистрация: 13.04.2015

Сообщений: 545

1

20.04.2017, 18:37. Показов 5019. Ответов 10


Студворк — интернет-сервис помощи студентам

Всем привет! Помогите. пожалуйста. Есть ли способ определить координаты ячейки Excel? Абсолютные относительно монитора.
Можно определить ячейку под мышкой с помощью ActiveWindow.RangeFromPoint.
А есть ли способ определить ту самую Point из активной ячейки?



0



ovva

4273 / 3414 / 825

Регистрация: 02.02.2013

Сообщений: 3,304

Записей в блоге: 2

21.04.2017, 00:27

2

Речь, вероятно, идет о VBA. Попробуйте так

Visual Basic
1
2
3
4
5
6
7
8
Dim rr As Range
Set rr = Worksheets("Лист1").Range("A5")
Dim x As Integer, y As Integer
Dim xx As Integer, yy As Integer
x = rr.Left
y = rr.Top
xx = ActiveWindow.PointsToScreenPixelsX(x)
yy = ActiveWindow.PointsToScreenPixelsY(y)



0



Aleks777

95 / 91 / 16

Регистрация: 13.04.2015

Сообщений: 545

21.04.2017, 09:16

 [ТС]

3

ovva, нет, нет речь идет именно о VB.net в VS2015 пишу.
этот вариант пробовал он возвращает относительные координаты (относительно рабочей области)
можно попробовать этот вариант, но в связке с GetClientRect, только не получается никак определить ClientRect для окна Excel’я

Добавлено через 6 минут
ovva, пытаюсь определить ClientRect но выдает ошибку:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Module Module1
    Private Structure RECT
        Dim Left As Long
        Dim Top As Long
        Dim Right As Long
        Dim Bottom As Long
    End Structure
 
    Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
    Private Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long
    Sub GetWindowClientSize(ByVal hWnd As Long) ', Width As Long, Height As Long)
        Dim rc As RECT
        Dim Width As Integer, Height As Integer
        GetClientRect(hWnd, rc) ' тут ошибка
        Width = rc.Right - rc.Left
        Height = rc.Bottom - rc.Top
        MsgBox(Width)
        MsgBox(Height)
    End Sub
    Public Sub test()
        Dim hWnd As IntPtr = GetForegroundWindow()
        GetWindowClientSize(hWnd) 
    End Sub
End Module



0



SoftIce

es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

21.04.2017, 09:25

4

А так?

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Private Structure RECT
        Dim Left As Integer
        Dim Top As Integer
        Dim Right As Integer
        Dim Bottom As Integer
    End Structure
 
    Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Integer, ByRef lpRect As RECT) As Integer
    Private Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Integer
    Sub GetWindowClientSize(ByVal hWnd As Integer) ', Width as integer, Height as integer)
        Dim rc As RECT
        Dim Width As Integer, Height As Integer
        GetClientRect(hWnd, rc) ' тут ошибка
        Width = rc.Right - rc.Left
        Height = rc.Bottom - rc.Top
        MsgBox(Width)
        MsgBox(Height)
    End Sub
    Public Sub test()
        Dim hWnd As IntPtr = GetForegroundWindow()
        GetWindowClientSize(hWnd)
    End Sub



0



95 / 91 / 16

Регистрация: 13.04.2015

Сообщений: 545

21.04.2017, 09:27

 [ТС]

5

SoftIce, забыл написать, с типами игрался тоже. При Integer ошибка та же.
что вообще должно заходить в GetClientRect? мне кажется на rc ругается.



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

21.04.2017, 09:33

6

Цитата
Сообщение от Aleks777
Посмотреть сообщение

При Integer ошибка та же

А это — ByRef lpRect As RECT ?



1



95 / 91 / 16

Регистрация: 13.04.2015

Сообщений: 545

21.04.2017, 09:34

 [ТС]

7

SoftIce, прошу прощения, сразу не заметил.
Огромнейшее!!!!!!!!!!!!!!!!!!!!!СПАСИБО) Заработал RECT



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

21.04.2017, 09:34

8

Цитата
Сообщение от Aleks777
Посмотреть сообщение

что вообще должно заходить в GetClientRect?

Да ничего не должно заходить, передаете пустую структуру по ссылке в GetClientRect.



0



95 / 91 / 16

Регистрация: 13.04.2015

Сообщений: 545

21.04.2017, 09:35

 [ТС]

9

SoftIce, сейчас в Paint’е проверю как отрабатывает))



0



95 / 91 / 16

Регистрация: 13.04.2015

Сообщений: 545

21.04.2017, 09:44

 [ТС]

10

SoftIce, либо оно криво отрабатывает, либо я не понимаю что есть ClientRect. Правильно понимаю (на картинке)?

Миниатюры

Координаты ячейки Excel относительно экрана
 



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

21.04.2017, 09:57

11

Мне кажется, ABCDEF…. и 123456… туда тоже должны входить. А что не так?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

21.04.2017, 09:57

Помогаю со студенческими работами здесь

Вывести координаты курсора относительно экрана
Задача состоит в том, чтобы выводить координаты курсора относительно экрана. Возможно ли заменить…

Получить координаты мышки относительно формы, но не экрана
MousePosition показывает координаты мышки относительно монитора, но мне нужно относительно формы,…

Почему в Opera v12.0 координаты окна браузера относительно экрана window.screenX или window.screenY выдает 0?
Здравствуйте, подскажите пожалуйста почему в Opera v 12.0, координаты окна браузера относительно…

Вывести поточные координаты курсора мыши относительно формы и экрана, при нажатии на кнопку-реверсное изменение кнопок мыши C++
доброй ночи, уважаемые программисты, умные школьники, преуспевающие студенты, а также все участники…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

11

Хочу получить координаты ячейки экселя на экране компьютера, написал маркос:

[SRC vba]Sub Position()
  Dim t As Integer
  Dim l As Integer

    t = Range(«T56»).Top
  l = Range(«T56»).Left

     Range(«T56»).Value = Str(t) + «:» + Str(l)
End Sub[/SRC]

загнал T56 в самый нижний правый угол и вижу результат 756 на 912

у меня же разрешение монитора 1280 на 1024 те врет примерно  в 1.4 раза интересно с чем это связано?

Положение верхнего левого угла Экселя 0,0 учет высоты ленты и статусной строки сделан.


Если нужно разрешение, то см. функции АПИ

почти по Уокенбаху

'объявление функции API
Declare Function GetSystemMetrics Lib "user32" (ByVal nindex As Long) As Long
Public Const x_ = 0
Public Const y_ = 1

Sub razr_()
l_ = GetSystemMetrics(x_)
h_ = GetSystemMetrics(y_)
[a1] = l_ & "x" & h_
End Sub

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Может это связано с другим?

Как правило координаты ячеек задаются в Points (см. хелп)
1 point = 20 твипов = 1/72 дюйма
Масштаб экрана по умолчанию 96 точек(пикселей) на дюйм
Получается: 1 point = 96 / 72 пикселей = 4/3 пикселя

Т.е. теоретически, если домножить пиксели на 3/4 вы получите те самые Point-ы.

t = Range("T56").Top*3/4Эта формула будет работать при условии, что Вы не поменяете масштаб экрана (Экран-Параметры — Дополнительно)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453


так и решил через  соотношение 72/96


 

VovaK

Пользователь

Сообщений: 1716
Регистрация: 01.01.1970

В VBA есть возможность выдать координаты окна относительно экрана монитора, типа Window.Top. Есть координаты листа относительно его начала, которые можно вернуть через Cells или Range (типа .Cells(23,45).Left). В окне находится видимая часть листа.    

  Вопрос: Есть ли возможность связать координаты окна и видимой части листа.

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

надо пройтись по всем видимым меню и найти суммарные значения ширин или высот для прилепленных к верху или слева..  

  как-то так

 

VovaK

Пользователь

Сообщений: 1716
Регистрация: 01.01.1970

Кто ищет тот всегда найдет. Ответ неожиданно прост:  

  Windows.VisibleRange.Top

 

GWolf

Пользователь

Сообщений: 153
Регистрация: 01.01.1970

Добрый вечер!  
Что бы не создавать новую тему, спрошу здесь.  
Нужно создать кнопку величиной с активное окно листа таблицы. А вот как определить координаты правого -нижнего угла этого окна?

 

GWolf

Пользователь

Сообщений: 153
Регистрация: 01.01.1970

#5

13.04.2012 17:22:10

Ага! Если немного подумать, то и ответ нашел:  

  Sub wTop()  
   Worksheets(«LLL»).Activate  

         With Windows(1).VisibleRange  
       countCellsVisible = .Cells.Count  
       cellsDn = .Rows.Count  
       cellsLt = .Columns.Count  
   End With  

         MsgBox «В активном окне » & countCellsVisible & » ячеек видимых.» & Chr(10) & _  
          «нижняя ячейка » & cellsDn & Chr(10) & _  
          «правая ячейка » & cellsLt  
End Sub  

  может кому сгодится.


Если Вам нужно отобразить широту или долготу в формате 56°54’31» (56 градусов 54 минуты 31 секунда), то этот пример для Вас.

В зависимости от желаемого результата и исходных данных существуют разные способы отображения широты и долготы в формате 56°54’31» (56 градусов 54 минуты 31 секунда).

Применение пользовательского формата

Если в ячейке содержится число вида 565431, то применение

пользовательского формата

позволит только правильно отобразить формат широты и долготы (56°54’31»), арифметические же операции с долготой или шириной произвести не удастся (при прибавлении 30 секунд будем иметь 56°54’61», а не 56°55’01»). Тем не менее, применим пользовательский формат.

Пользовательский формат вводим через диалоговое окно

Формат ячеек

. Для вызова окна нажмите

CTRL

+

1

. Выберите (

все форматы

), удалите все из поля

Тип

.

  • в поле

    Тип

    введите ###;
  • затем введите туда же знак градуса (°), скопировав из Буфера обмена, в который его заранее туда вставили командой

    Символ

    (

    )

    . Или удерживая

    ALT

    , наберите на цифровой клавиатуре 0176 и отпустите

    ALT

    (Подробнее о вводе нестандартных символов читайте в статье

    Ввод символов с помощью клавиши ALT

    );

  • введите пробел, два нуля, апостроф (‘) и еще пробел;
  • введите еще два нуля и еще 2 апострофа (‘) (двойная кавычка не подойдет или ее придется вводить вместе с обратным слешем «);
  • нажмите ОК.

Теперь введите в ячейку 565431 и нажмите

ENTER

, в ячейке отобразится 56°54’31».

Преобразование из десятичного формата

Часто долготу и широту представляют в десятичном формате. Например, число 122,44 соответствует 122 градусам 26 минутам и 24 секундам. Проверить это не составляет труда: целая часть соответствует градусам, 1 градус соответствует единице, минута– 1/60 градуса, секунда – 1/60 минуты или 1/3600 градуса. Получаем: 122+26*(1/60)+24*(1/3600)=122,44.

С десятичным представлением можно производить необходимые вычисления, например, можно прибавить 2 минуты и 10 секунд: +2*(1/60)+10*(1/3600).

Представить 122,44 в формате долготы и широты с помощью простого форматирования не удастся, нужно использовать формулу для преобразования из десятичного формата. Если значение долготы 122,44 находится в ячейке

А1

, то для преобразования в нужный формат запишем формулу:

=ТЕКСТ(ОТБР(A1);»0″&СИМВОЛ(176)) &ТЕКСТ(ЦЕЛОЕ(ОСТАТ(A1;1)*60);»0′») &ТЕКСТ(60*ОСТАТ((ОСТАТ(A1;1)*60);1);»0′ «)

Результат:

122°26’24»

– значение в текстовом формате.

  • #1

Утро доброе. Помогите решить задачу.

У меня есть скрипт, определяющий в файле эксель, на листе — координаты определенной фигуры.
Работает этот скрипт — при запуске через консоль (по F5).

Скрипт определяет координаты этой фигуры — на листе эксель.
То есть — это относительные координаты (координаты листа эксель), а не реальные координаты монитора.

Скажите — можно ли заставить скрипт каким-то путем — определить реальные координаты фигуры, которые та имеет — в отношении монитора, а не листа ?

(Лист экселя не прокручивается вниз или вправо)

#include <Excel.au3>

$oExcel = _Excel_Open()
$oBook = _Excel_BookOpen($oExcel, @ScriptDir & "64573.xls")

$oBook.Sheets('Лист3').Select
$oShape = $oBook.ActiveSheet.Shapes("Ромб 7")

ConsoleWrite("X = " & $oShape.Left & @CRLF)
ConsoleWrite("Y = " & $oShape.Top & @CRLF)
ConsoleWrite("W = " & $oShape.Width & @CRLF)
ConsoleWrite("H = " & $oShape.Height & @CRLF)

_Excel_Close($oExcel)
  • 64573.rar

    18.4 КБ · Просмотры: 1

Alofa

Гость


  • #3

Alofa, подскажите — куда именно эту функцию добавить в мой код ?

Alofa

Гость


  • #4

OffTopic:

OlegSmirnov сказал(а):

К сожалению сейчас на телефоне, проверю позже.

Добавлено:

Сообщение автоматически объединено: 6 Дек 2017


Проверил, не катит :shok:ops:

  • #5

Alofa, так все-таки — куда именно эту функцию добавить в мой код ?

Like this post? Please share to your friends:
  • Excel определить количество знаков в ячейке excel
  • Excel определить код символа
  • Excel определить картинку в ячейке
  • Excel определить значение это число
  • Excel определить значение по диапазону значений