0
EXCELスプレッドシートの特定のセルに入力された制御された用語リストから複数の単語を選択できるようにVBAスクリプトを実装しました。これはデータ検証リストに基づいています。スクリプトを開始するためのショートカット(データ検証によるExcel VBAドロップダウンリスト)
以下の通りです問題:
- 私はスクリプトを使用する必要はありません(データの検証が、ここで必要とされているので、私はコメントを追加することができたために列のデータ検証を使用する場合ユーザがセルが選択されているとき、コメントボックスが助けにならない)、用語の上書きまたはセル内削除が正しく機能しない。 私は、別のセル/列でのみ動作するようにスクリプトを改良できると考えました。どうやってやるの?
- 私は、ダブルクリックではなく(またはそれに加えて)スクリプトを開始するためのショートカットを持っていたいと思います。
これらの問題を解決するためにコードを変更するにはどうすればよいでしょうか非常に感謝します!
これは使用されるコードです:
Option Explicit
' ...
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
Dim lType As Long
Dim strList As String
Application.EnableEvents = False
On Error Resume Next
lType = Target.Validation.Type
On Error GoTo exitHandler
If lType = 3 Then
'if the cell contains a data validation list
Cancel = True
strList = Target.Validation.Formula1
strList = Right(strList, Len(strList) - 1)
strDVList = strList
frmDVList.Show
End If
exitHandler:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
Dim strSep As String
strSep = ", "
Application.EnableEvents = False
On Error Resume Next
If Target.Count > 1 Then GoTo exitHandler
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
'do nothing
Else
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If newVal = "" Then
'do nothing
Else
If oldVal = "" Then
Target.Value = newVal
Else
Target.Value = oldVal & strSep & newVal
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub
ありがとうございます、完璧に動作し、2番目の_if_を_is_ –
に変更しました。@ J.Farmer Good catch!......................私はそれを修正しました。 –