2011-08-01 4 views
0

私のコードは実際には必要ないはずの簡単な質問です。私のアプリケーションでは、 'for each'ループを使用して、ある範囲のセルをループし、ユーザーがそれを実行すると、その範囲内のセルからセルにジャンプするときに画面のフォーカスが選択に従います。反復処理中にループのパスをたどるのを防ぐ方法はありますか?ユーザーは単に処理が完了するまで何かを見るしかありませんか?VBAは繰り返し中にユーザーのフォーカスを制御します

ありがとうございます、私はすべての助けに感謝します。

コード:

Dim iLoop As Integer 

For iLoop = 5 To lastRow 

Sheets("Planners").Activate 
Range("J" & iLoop).Select 
Range(Cells(iLoop, 9)).Select 

With Selection.Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="Yellow, Orange, Green, Red" 
    .IgnoreBlank = True 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "Invalid Entry" 
    .ErrorMessage = "Please choose from dropdown" 
    .ShowInput = True 
    .ShowError = True 
End With 

Next iLoop 

答えて

1

はどうやら、あなたのコード内で.Selectを使用しています。それは正しいことである可能性がありますが、ほとんどの場合、そうではありません。

したがって、SelectActiveCellを使用して停止し、インデックス/参照を使用して細胞を参照してください。

上記は正しい解決策です。
ループの前にApplication.ScreenUpdating = Falseを使用し、ループの後にApplication.ScreenUpdating = Trueを使用するのが間違った解決方法です。


編集:

Dim iLoop As long 
dim w as worksheet 

set w = Worksheets("Planners") 

For iLoop = 5 To lastRow 

    With w.cells(iLoop, 9).Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="Yellow, Orange, Green, Red" 
    .IgnoreBlank = True 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "Invalid Entry" 
    .ErrorMessage = "Please choose from dropdown" 
    .ShowInput = True 
    .ShowError = True 
    End With 

Next 

しかし、このコードを与え、あなたがすべてでループを必要としない:

dim w as worksheet 
set w = Worksheets("Planners") 

With w.Range(w.cells(5, 9), w.cells(lastRow, 9)).Validation 
    .Delete 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="Yellow, Orange, Green, Red" 
    .IgnoreBlank = True 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "Invalid Entry" 
    .ErrorMessage = "Please choose from dropdown" 
    .ShowInput = True 
    .ShowError = True 
End With 
+0

私はそれが.Selectと何か関係があるかもしれないと思っていましたが、何らかの理由でループが.Selectなしで動作していないようです。どのようにこのループを変更するのですか? ループを含めるようにメイン投稿が編集されました – jz3

+0

@Joeそのようなものです。実際にどの範囲を選択したいのかは明らかではありませんでした。 – GSerg

+0

gotcha、まあ、私はループが必要ないと思う。ヘルプをいただきありがとうございます。画面の更新も将来的に知っておくと良いです。 – jz3

0

すべてを行う必要が偽= application.screenupdatingを追加することですあなたの最初のコード(もちろんのサブ定義の後)と 'end sub'の前の最後のapplication.screenupdating = true。

これをすべてのサブと関数に追加することは、実行速度を向上させるための良い習慣です。

関連する問題