我正在尝试设计一个数据库,其中选择项目的名称会导致出现包含其他信息的文本框。 我做得很好,直到我介绍过滤。由于过滤会删除过滤器排除的某些行,因此形状不再出现在所选单元格旁边,而是显示在过滤器之前的位置。
我目前的代码是:
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属性,但我从来没有找到适合我的方法。
答案 0 :(得分:0)
尝试
With ActiveSheet.Shapes("txtInputMsg")
.Left = Target.offset,(0,1).left
.Top = target.top
End With
将形状精确定位在所选单元格右上角的位置。更改偏移量或使用固定列(例如.left = column(7).left
),如果这更适合您。