2016-10-17 10 views
0

コマンドボタン(この場合は「GO」ボタン)を押した後でのみ、選択を実行するのに苦労します。アタッチされているのは、userXの画像です。これは、activeXコントロールで作成されていないもの、および私が作業しているコードです。ありがとう! (おそらくGO_Click()が、必要に応じて変更)ボタンの_Clickイベントプロシージャを「行く」のチェックボックスのそれぞれに対してチェックし、それに応じて削除を行うにはを使用してこのようコマンドボタンを押した後にのみ選択を実行するVBA userform

Picture of Userform

Private Sub MR_Click() 

If MR.Value = True Then 
Rows(6).Delete 
End If 

End Sub 

Private Sub PMS_Click() 

If PMS.Value = True Then 
Rows(7).Delete 
End If 

End Sub 

Private Sub VOIDMR_Click() 

If VOIDMR.Value = True Then 
Rows(13).Delete 
End If 

End Sub 

Private Sub VOIDPMS_Click() 

If VOIDPMS.Value = True Then 
Rows(14).Delete 
End If 

End Sub 
+2

代わりにそれぞれのチェックボックスの '_Click'イベントに作業を行うには、ボタンの' _Click'イベントを使います。 1つの行を削除すると、下にあるすべての行が1つ上になることに注意してください。 –

+1

「Applicatioin.Undo'の入力ミスがあります。また、私は "GO"ボタンを押すことに関連するコードは表示されません。あなたのチェックボックスはClickイベントのチェックボックスですか? GOが押されていないときにオプションが選択されているときにトリガーになるようです。 – nbayly

+0

@nbaylyを指摘してくれてありがとう、私はUNDOコードを使用しようとしていましたが、私はマクロを実行した後に元に戻すことができないようです。そのため、GOボタンを押す前にマクロがアクションを保持するようにしたいのです。 –

答えて

0

、。

Private Sub GO_Click() 
If MR.Value = True Then 
    Rows(6).Delete 
End If 
If PMS.Value = True Then 
    Rows(7).Delete 
End If 
If VOIDMR.Value = True Then 
    Rows(13).Delete 
End If 
If VOIDPMS.Value = True Then 
    Rows(14).Delete 
End If 
End Sub 
'These event procedures won't do anything, and can be removed: 
Private Sub MR_Click() 
End Sub 
Private Sub PMS_Click() 
End Sub 
Private Sub VOIDMR_Click() 
End Sub 
Private Sub VOIDPMS_Click() 
End Sub 

チェックボックス '_Clickイベントプロシージャはもう必要ありません。

イベントプロシージャについては、イベントが発生するたびに発生します。したがって、_Clickイベントのチェックボックスの場合、ユーザが_Clickハンドラを実行するかどうかをチェックする(またはチェックを外す)と、いつでも実行されます。

としては、コレクションから要素を削除するとき、これは一般的に何、あなたが行6を削除すると、行7行6となり、そうMRとPMSの両方がチェックされている場合(逆の順序で行われる必要があるとして、注意を払う、指摘しました行7は最初は削除されません)。これは、いくつかの追加のコード変更を必要とするかもしれないが、非常に単純にそれだけでGO_Click内のコマンドを再注文しているようだ、これを処理する必要があります@DavidZemensコード上

Private Sub GO_Click() 
If VOIDPMS.Value = True Then 
    Rows(14).Delete 
End If 
If VOIDMR.Value = True Then 
    Rows(13).Delete 
End If 
If PMS.Value = True Then 
    Rows(7).Delete 
End If 
If MR.Value = True Then 
    Rows(6).Delete 
End If 

End Sub 
+0

ありがとう!それは完全に動作します。一度の迅速なフォローアップの質問ですが、上記のコマンドを実行して同時に閉じることができますか? –

+0

あなたはそれをユーザーフォームを閉じるにはしますか?はい、 'End Sub'の前に' Unload Me'を追加してください。 –

+0

@YSCheungはまた私の更新されたコードを見て、行を削除することは常に逆のインデックス順で行わなければなりません。 –

0

ただ文体バリエーション:

Private Sub GO_Click() 
    With Me '<-- reference the userform 
     Select Case True 
      Case .MR '<-- if MR checkbox control is True 
       Rows(6).Delete 
      Case .PMS '<-- if PMS checkbox control is True 
       Rows(7).Delete 
      Case .VOIDMR '<-- if VOIDMR checkbox control is True 
       Rows(13).Delete 
      Case .VOIDPMS '<-- if VOIPMS checkbox control is True 
       Rows(14).Delete 
     End Select 
    End With 
End Sub 
+0

@ YSCheung、ユーザーはチェックボックスの1つのみをチェックするはずですか? – user3598756

+0

これは、複数のチェックボックスを選択しても機能しません。 –

+0

単一選択を適用するには、チェックボックスを使用しないでください(同様のUIの場合はオプションボタン、複数選択を許可しない場合はListBox/ComboBoxを使用します)。 –

関連する問題