2016-07-21 4 views
1

# 更新コード設定検証

Function condition(ByRef objCmb As ComboBox) 
    If objCmb.Value ="" And objCmb.Value = "g" Then 
     Call MsgBox("gg", vbOKOnly, "error") 
    End If 
End Function 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition (ComboBox1) 
End Sub 

'other codes for reference: 
Private Sub CommandButton1_Click() 
    Dim lastrow As Integer 
    lastrow = Cells(Rows.Count, "A").End(xlUp).Row 


    For i = 1 To 3 
     For j = 1 To 5 
      With Me.Controls("ComboBox" & (i - 1) * 5 + j) 
       If .Text <> "" Then 
       Cells(lastrow + i, j) = .Text 
       Else 

       Exit Sub 

       End If 

      End With 
     Next j 
    Next i 


End Sub 

私は、VBAのユーザーパネルで50のコンボやテキストボックスを持っています。すべてのコンボボックスまたはテキストボックスに制約を設定するのは面倒ですので、すべてのコンボボックスおよびテキストボックスに適用する関数が必要です。上記のコードについて

、それが解決するためにどのようにcant find objectエラー

を示して?

Btw、テキストボックスの関数ステートメントを設定する方法は? is Function condition2(ByRef objCmb As textbox)...

+0

あなたはあなたの関数で 'objCmb'を受けています。 'ComboBox'ではなく、それを使用してください。 –

+0

Kenが言っていることは、If ComboBox.Value <> "" ComboBox.Value = "g" Then'を 'If objCmb.Value <>" "と置き換え、objCmb.Value =" g "Then' –

+0

i試してみましたが、 'condition(ComboBox1)'にオブジェクトエラーが見つかりません。 – Monchhichi

答えて

1

ComboBoxがByRef objCmb As ComboBoxではないため、エラーが発生しています。サブ関数を呼び出すときは、括弧を使用しないでください。関数の戻り値を使用していない場合は、関数を呼び出すときに括弧を使用しないでください。関数が値を返さない場合、それはサブでなければなりません。

Sub condition(ByRef objCmb As MSForms.ComboBox) 
    If objCmb.Value <> "" And objCmb.Value = "g" Then 
     MsgBox "gg", vbOKOnly, "error" 
     objCmb.Value = "" 
    End If 
End Sub 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

私はあなたがすべてのあなたのテキストとコンボボックスのExitイベントコードを生成を支援する機能を書きました。

Sub AddCodeToCipBoard(frm As UserForm) 

    Const BaseCode = " Private Sub @Ctrl_Exit(ByVal Cancel As MSForms.ReturnBoolean)" & vbCrLf & _ 
      "  condition ComboBox1" & vbCrLf & _ 
      " End Sub" & vbCrLf & vbCrLf 

    Dim s As String 
    Dim ctrl 
    Dim clip As DataObject 
    Set clip = New DataObject 

    For Each ctrl In frm.Controls 
     If TypeName(ctrl) = "ComboBox" Or TypeName(ctrl) = "TextBox" Then 
      s = s & Replace(BaseCode, "@Ctrl", ctrl.Name) 
     End If 
    Next 

    clip.SetText s 

    clip.PutInClipboard 

End Sub 

は、モジュールにこのコードを入れて、このようにそれを呼び出す:

AddCodeToCipBoard Userform1 

今、すべてのExitイベントコードは、Windowsのクリップボードにコピーされます。 Userformsコードモジュールに移動し、新しいコードを貼り付けます。

出力例:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 

Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    condition ComboBox1 
End Sub 
関連する問題