将形状定位在已过滤的工作表中

时间:2016-04-29 11:10:38

标签: excel vba excel-vba

我正在尝试设计一个数据库,其中选择项目的名称会导致出现包含其他信息的文本框。 我做得很好,直到我介绍过滤。由于过滤会删除过滤器排除的某些行,因此形状不再出现在所选单元格旁边,而是显示在过滤器之前的位置。

我目前的代码是:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim strTitle As String
Dim strMsg As String
Dim sTemp As Shape
Dim ws As Worksheet
Dim wsMsg As Worksheet
Dim rngMsg As Range

Application.EnableEvents = False
Set ws = ActiveSheet
Set wsMsg = Sheets("BackEnd")
Set sTemp = ws.Shapes("txtInputMsg")
Set rngMsg = wsMsg.Range("SelInList")
On Error Resume Next

wsMsg.Range("SelCell").Value = Target.Address(0, 0)
If Len(rngMsg.Value) > 0 Then
  strMsg = rngMsg.Value
  sTemp.TextFrame.Characters.Text = strMsg
  With ActiveSheet.Shapes("txtInputMsg")
        .Left = Range("A:O").Width + 1
        .Top = Range("1:iActiveCell.Row").Height + 1
  End With
  sTemp.Visible = msoTrue
Else
  sTemp.TextFrame.Characters.Text = ""
  sTemp.Visible = msoFalse
End If

errHandler:
  Application.EnableEvents = True

End Sub

我尝试了很多方法来分配形状的.Top属性,但我从来没有找到适合我的方法。

1 个答案:

答案 0 :(得分:0)

尝试

With ActiveSheet.Shapes("txtInputMsg")
    .Left = Target.offset,(0,1).left
    .Top = target.top
End With

将形状精确定位在所选单元格右上角的位置。更改偏移量或使用固定列(例如.left = column(7).left),如果这更适合您。