Обходной путь для входного сообщения проверки данных 255 символов
Я пытаюсь найти обходной путь для Data Validation Input Message, так как мое входное сообщение содержит более 255 символов. Я пробовал http://contextures.com/xlDataVal12.html, но text box исправлено. Мне нужно, чтобы текстовое поле или метка перемещались вместе с выбранной ячейкой.
На изображении ниже вы можете увидеть проблему. Мы не можем отобразить все сообщение в поле ввода.
Используя код Contextures, вам необходимо установить для свойств .Top и .Left фигуры те же свойства ячейки. Вот переписанный код, который перемещает текстовое поле рядом с ячейкой.
' Developed by Contextures Inc.
' www.contextures.com
' modified by Dick Kusleika 7/21/2015
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim sTitle As String
Dim sMsg As String
Dim sMsgAdd As String
Dim tbxTemp As Shape
Dim lDVType As Long
Dim lRowMsg As Long
Dim ws As Worksheet
Application.EnableEvents = False
Set ws = Target.Parent
Set tbxTemp = ws.Shapes("txtInputMsg")
On Error Resume Next
lDVType = 0
lDVType = Target.Validation.Type
On Error GoTo errHandler
If lDVType = 0 Then
tbxTemp.TextFrame.Characters.Text = vbNullString
tbxTemp.Visible = msoFalse
Else
If Len(Target.Validation.InputTitle) > 0 Or Len(Target.Validation.InputMessage) > 0 Then
sTitle = Target.Validation.InputTitle & vbLf
On Error Resume Next
lRowMsg = 0
lRowMsg = Application.WorksheetFunction.Match(Target.Validation.InputTitle, Sheets("MsgText").Columns(1), 0)
If lRowMsg > 0 Then
sMsgAdd = Me.Parent.Sheets("MsgText").Cells(lRowMsg, 2).Value
End If
On Error GoTo errHandler
sMsg = Target.Validation.InputMessage
With tbxTemp.TextFrame
.Characters.Text = sTitle & sMsg & vbLf & sMsgAdd
.Characters.Font.Bold = False
.Characters(1, Len(sTitle)).Font.Bold = True
End With
tbxTemp.Top = Target.Offset(1, 1).Top
tbxTemp.Left = Target.Offset(1, 1).Left
tbxTemp.Visible = msoTrue
tbxTemp.ZOrder msoBringToFront
Else
tbxTemp.TextFrame.Characters.Text = vbNullString
tbxTemp.Visible = msoFalse
End If
End If
errHandler:
Application.EnableEvents = True
End Sub
personDick Kusleikaschedule21.07.2015
comment
Привет @ Дик, это работает как шарм !! Большое спасибо. Не могли бы вы просто помочь мне вывести текстовое поле на передний план, чтобы оно отображалось в тексте. Действительно ценю это!
- personNiclas; 21.07.2015
comment
В код добавлена строка zOrder, которая выводит текстовое поле на передний план. Автоподгонка немного сложнее. Вы можете исправить высоту и попытаться отрегулировать ширину в зависимости от количества символов .Width = .TextFrame.Characters.Count / 5 * 6:.Height = 100. Вам придется поиграть с цифрами, чтобы увидеть, что работает.
- personDick Kusleika; 21.07.2015
comment
Бах, Excel уже подумал об этом (и вы, вероятно, тоже). Щелкните правой кнопкой мыши текстовое поле, выберите «Свойства», выберите «Текстовое поле» и установите флажок Resize to fit text.
- personDick Kusleika; 21.07.2015