VBA将Userform放在选定范围旁边

时间:2014-07-08 15:59:49

标签: excel excel-vba vba

我需要在所选单元格旁边放置一个userform。这是我的代码。 Excel 2013。

在userform模块中:

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首次加载时,它似乎只能在标准视图中工作,前30行左右。但是,如果您尝试在行4000或甚至40上使用它,它会将userform WAY从屏幕上移开。 Excel似乎没有考虑到屏幕的位置。要查看我的意思,请尝试使用上面的代码将用户窗体放在单元格A1旁边。然后向下滚动,以便A1不再出现在屏幕上并再次运行代码。它将用户表单放在完全相同的位置,就像您仍然在原始位置向上滚动一样。

我是否可以使用除range.Left之外的其他属性来将userform相对于屏幕上的范围放置?或者我需要做一些奇怪的伏都教废话,当我弄清楚滚动条的位置并找出相对于那个细胞的位置,当然考虑到地球的旋转力和相对距离的距离,当然?

哦,微软......

1 个答案:

答案 0 :(得分:0)

使用

滚动窗体时,可以调整窗体的位置
ActiveWindow.VisibleRange.Top &
ActiveWindow.VisibleRange.Left

使用它可以在所有情况下使用

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