excel - VBA 将用户窗体放在所选范围旁边

标签 excel vba

我需要在选定的单元格旁边放置一个用户表单。这是我的代码。 Excel 2013。

在用户表单模块中:

Private rangePosition As Range 'Property passed to form to set position based on range

'Set userform position to right of range
Property Let PositionToRange(rangeInput As Range)
    Set rangePosition = rangeInput
    Me.Left = rangePosition.Left + rangePosition.Width + 30
    Me.Top = rangePosition.Top + Application.CommandBars("Ribbon").Height + 27
End Property

在标准模块中:

userform.PositionToRange = Selection '(or some specified range)
userform.Show

好的,很好。所以起初这似乎可以解决问题。但是,它似乎只在 Excel 首次加载时在标准 View 中工作,前 30 行左右。但是,如果您尝试在第 4000 行甚至第 40 行使用它,它会将用户窗体置于屏幕之外。 Excel 似乎没有考虑屏幕的位置。要明白我的意思,请尝试使用上面的代码在单元格 A1 旁边放置一个用户窗体。然后向下滚动,使 A1 不再出现在屏幕上,然后再次运行代码。它将用户窗体放在完全相同的位置,就好像您仍在原始位置向上滚动一样。

除了 range.Left 等之外,是否有我可以使用的属性来相对于屏幕上范围的位置放置用户窗体?或者我是否需要做一些奇怪的巫术废话,在考虑到地球的旋转力和与太阳的相对距离之后,找出滚动条的位置并找到单元格相对于它的位置?

哦,微软...

最佳答案

滚动时可以调整表单的位置

ActiveWindow.VisibleRange.Top &
ActiveWindow.VisibleRange.Left

使用它在所有情况下都有效

Me.Left = ActiveCell.Left + ActiveCell.Width  - ActiveWindow.VisibleRange.Left
Me.Top = ActiveCell.Top  - ActiveWindow.VisibleRange.Top

关于excel - VBA 将用户窗体放在所选范围旁边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24636520/

相关文章:

sql - 查询 Excel 2010 时诊断 OLEDB 异常

Excel 将图表导出为 wmf 或 emf?

excel - PHPSpreadsheet 生成带有图表的无效文件

regex - 可以在范围内运行 Regex-Replace 而不是循环遍历 Excel 中的单元格吗?

VBA:对照列表检查日期

excel - 删除 "unioned"非连续范围

Excel - 条件格式 =MOD(ROW(),2)=0

excel - 未找到命名参数

Excel VBA-如何用科学记数法识别单元格

vba - 在 VBA 中将双引号放在字符串中