2016-04-18 11 views
3

私はVisual Basicの初心者です。コンボボックスを最初のインデックスにリセットし、最初のインデックスにドロップダウンリストを作成し、すべてのチェックボックスとテキストボックスをリセットしようとしています。 。VBAすべてのチェックボックス、コンボボックス、テキストボックス、データの有効化ドロップダウンリスト

しかし、データ検証のドロップダウンリストとコンボボックスを最初のインデックス/値に戻すのに問題があります。

シート3

enter image description here DND

enter image description hereコード:

Private Sub CommandButton1_Click() 

Sheets("Sheet5").Range("A2:DE2").Copy 
Sheets("Final").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues 

    Dim Sh As Worksheet 
    For Each Sh In Sheets 
     On Error Resume Next 
      Sh.CheckBoxes.Value = False 
     On Error GoTo 0 
    Next Sh 
    Dim tbx As OLEObject 
    For Each tbx In ActiveSheet.OLEObjects 
     If TypeName(tbx.Object) = "TextBox" Then 
     tbx.Object.Text = "" 
     End If 
    Next 

    Range("Sheet3!C2").Value = "" 
    Sheets("DND").Range("A17").Value = 0 
    Sheets("DND").Range("C17").Value = 0 


End Sub 
+0

私のこの回答は、あなたにいくつかのアイデアを与えるかもしれません:http://stackoverflow.com/a/8458711/293078 –

+0

@DougGlancy私は非常にExcelのVBAの新しいですので、コード。 'Private Sub Workbook_SheetChange'メソッドの最初のコードをコピーしましたが、' CommandButton1_Click() 'ボタンを押したときにコードを統合する方法は、データ検証ドロップダウンリストを最初のインデックスに設定します(これは空白です) – TykiMikk

+0

私は何かを働かせるかどうかを見ます。 –

答えて

1

これは、アクティブシートのL6におけるデータ検証がハードコードリストまたは範囲の参照であるかどうかをチェックします。その後、最初のリスト項目や範囲参照の最初のセルへのセルをリセットし、次のいずれか

Sub ResetCellValidation() 
Dim cell As Excel.Range 
Dim rngTest As Excel.Range 
Dim ErrNumber As Long 

Set cell = ActiveSheet.Range("L6") 
With cell.Validation 
    If .Type = xlValidateList Then  
     On Error Resume Next 
     Set rngTest = Application.Range(.Formula1) 
     'I do this goofy thing with ErrNumber to keep my indenting and flow pretty 
     ErrNumber = Err.Number 
     On Error GoTo 0 
     'if the Validation is defined as a range 
     If ErrNumber = 0 Then 
      cell.Value = Application.WorksheetFunction.Index(rngTest, 1) 
     'if the validation is defined by comma-separated values 
     Else 
      cell.Value = Split(.Formula1, ",")(0) 
     End If 
    End If 
End With 
End Sub 

エラーチェック、そのセル内のすべてのデータの検証があることを確認するために、それは可能性がわからない何がありませんあなたがそれを使用している方法を発行します。

EDIT:Activecell.Parent.Range(.Formula1)からApplication.Range(.Formula1)に変更されました。興味深いことに、たとえば、Formula1がSheet2!E6の場合、上記は完全なアドレスを評価します。私がそれを知っていたかどうかわからない。

編集2:私はこれを実際に考えすぎたと思うし、もっと明確になったので事実に適応していないと思う。あなただけのバック空白にセルの値を設定したい場合は、このコードの1行がそれを行います。

ActiveSheet.Range("L6").Value = ""

しかし、ここでの楽しみはそれでですか?

+0

'Sub ResetCellValidation()'と 'End Sub'以外のコード全体を私のPrivate Sub CommandButton1_Click()にコピーしましたが、何もしません。ボタンは動作しますが、私のデータ検証ドロップダウンリストは変わりません。注: "C17"で "L6"でなければなりませんか?私のデータ検証ドロップダウンリストはL6にあるので – TykiMikk

+0

はい、L6に変更する必要があります。これを実行すると、データ検証付きのシートがアクティブなシートですか?あなたが 'cell.Value ='で始まる行のどれかにF8を使って進むと(それがどうかわからない場合はそれを調べます) –

+0

私のデータ検証はSheet3にありますが、私の値のリスト(Spray Operator、Edger、Office)はB2からB15までの "DND"というシート上にあります。はい私のボタンが私のデータ検証ドロップダウンリストがあるSheet3にあります。 – TykiMikk

関連する問題