2016-10-13 10 views
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 

答えて

0

あなたが複数の質問をしてきました。
これはあなたのすべての質問に対する完全な答えではありません。

アクティビティを列のみの変更に制限する場合は、AまたはBとします。右後

If Intersect(Target,Range("A:B")) is Nothing Then Exit Sub 

興味の列に活動を制限するために、この行を変更します。

strSep = ", " 

は次のような行が含まれています。

+0

ありがとうございます、完璧に動作し、2番目の_if_を_is_ –

+0

に変更しました。@ J.Farmer Good catch!......................私はそれを修正しました。 –

関連する問題