#c# #excel #excel-2003
#c# #excel #excel-2003
Вопрос:
Как я могу найти абсолютное положение ячейки в Excel 2003 (например, относительно экрана [ов]) при написании надстройки C # Excel 2003.
Кажется, что свойства Top и Left диапазона (такого как ActiveCell) задают X и Y относительно верхней левой ячейки. Окно.Слева и сверху указаны X и Y окна, но я не могу найти способ получить размер бита в середине (состоящий из панелей инструментов и тому подобного).
Цель здесь состоит в том, чтобы отобразить форму WPF, которая относится к выбранной ячейке и расположена рядом с ней.
Я чувствую, что мне здесь не хватает чего-то основного. Любая помощь с благодарностью!
Комментарии:
1. Я не уверен, что вы сможете это сделать. Самое близкое, что вы можете получить, — это
UsableHeight
иUsableWidth
активного окна (Application.Windows
коллекции) вместе сTop
иLeft
указанного окна иWidth
иHeight
главного окна Excel. Таким образом, вы можете в некоторой степени получить не клиентскую область. Но я не знаю способа узнать, сколько неклиентной области находится над вашим окном (строки меню, строка заголовка окна и т.д.) И сколько ниже (строка состояния)2. Спасибо за вашу помощь, между делом! Я не изучал
UsableHeight
иUsableWidth
, но это хорошее предложение. Возможно, можно определить, сколько занимает строка состояния, определив, отображается она или нет (при условии, что строка состояния всегда имеет фиксированную высоту). Немного «хакерский», но если это лучшее, что я могу сделать…
Ответ №1:
Следующая ссылка содержит некоторый код VBA, который может указать вам правильное направление: Form Positioner .
Это сложнее, чем я думал, но если вам нужно определить высоту некоторых командных панелей Excel, следующий код VBA в их примере может помочь:
'
' we'll assume that the application's caption bar and the formula
' bar are the same height as the menu bar. If we can't figure that out, use 26 as a default.
'
If Application.CommandBars.ActiveMenuBar.Visible = True Then
DefaultCmdBarHeight = Application.CommandBars.ActiveMenuBar.Height
Else
DefaultCmdBarHeight = cDefaultCmdBarHeight
End If
'
' We have to have a compenstating factor for command bars. Load an array
' with the heights of visible command bars. The index into the array is
' the RowIndex of the command bar, so we won't "double dip" if two or more
' command bars occupy the same row.
'
For Each CmdBar In Application.CommandBars
With CmdBar
If (.Visible = True) And (.Position = msoBarTop) Or (.Position = msoBarMenuBar) Then
If .RowIndex > 0 Then
VCmdArr(.RowIndex) = .Height
End If
End If
If (.Visible = True) And (.Position = msoBarLeft) Then
If .RowIndex > 0 Then
HCmdArr(.RowIndex) = .Width
End If
End If
End With
Next CmdBar