このコードを書いていますが、間に追加のフィラーが入っています。選択した時点に応じて、適切な行が非表示になります。VBAコード - 他の一部が実行されている場合は、一部をスキップします
コンテナ1は常に満たされますが、別のコンテナが選択されていない場合は、残りのコードを処理せずに残りの行をすべて非表示にします。したがって、コンテナ1とコンテナ2を選択すると、残りのコードを実行することなく、コンテナ1と2が選択されます。
ループとしてこれを書き換えることは、非常に多くの可能なタイムポイントがあるため、信じられないほど複雑になります。これは関連性のないコードをスキップする問題です。ほとんどのgoto線や何かのような?知りません!
DisplayPageBreaks、ScreenUpdating、Enable Eventsを一時的に無効にするよりも効率的にこのコードを実行する方法はありますか?このページには計算が行われず、行の非表示のみが行われます。
たとえば、Q26が空白(コンテナ2なし)の場合、他の処理を行わずにコードの最後に移動したいのですが、どのように書いていますか、それでもコードの残りの部分は処理します。あなたが助けるためにあなたの助けのための
おかげ
If Worksheets("StabDataCapture").Range("q26").Value = "" Then Worksheets("Template").Rows("142:1048576").EntireRow.Hidden = True Else
ありがとうございました!
Sub Containers()
Dim xPctComp As Integer
Application.StatusBar = "Container 1: " & _
Format(xPctComp, "##0%")
ActiveSheet.DisplayPageBreaks = False
Application.EnableEvents = False
Application.ScreenUpdating = False
'CONTAINER 1 ROW HIDES
'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide [email protected]
If Worksheets("StabDataCapture").Range("B33").Value = "" Then
Worksheets("Template").Rows("8:8").EntireRow.Hidden = True
End If
Application.StatusBar = "Container 2: " & _
Format(xPctComp, "##25%")
If Worksheets("StabDataCapture").Range("q26").Value = "" Then Worksheets("Template").Rows("142:1048576").EntireRow.Hidden = True Else
'CONTAINER 2 ROW HIDES
'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide [email protected]
If Worksheets("StabDataCapture").Range("P33").Value = "" Then
Worksheets("Template").Rows("146:146").EntireRow.Hidden = True
End If
Application.StatusBar = "Container 3: " & _
Format(xPctComp, "##50%")
'CONTAINER 3 ROW HIDES
If Worksheets("StabDataCapture").Range("c91").Value = "" Then Worksheets("Template").Rows("280:1048576").EntireRow.Hidden = True Else
'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide [email protected]
If Worksheets("StabDataCapture").Range("B98").Value = "" Then
Worksheets("Template").Rows("284:284").EntireRow.Hidden = True
End If
Application.StatusBar = "Container 4: " & _
Format(xPctComp, "##75%")
If Worksheets("StabDataCapture").Range("q91").Value = "" Then Worksheets("Template").Rows("418:1048576").EntireRow.Hidden = True Else
'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide [email protected]
If Worksheets("StabDataCapture").Range("P98").Value = "" Then
Worksheets("Template").Rows("422:422").EntireRow.Hidden = True
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.StatusBar = ""
End Sub
をあなたは 'GoTo'を使用しようとすることができますが、それはあまりお勧めしていない...または単にロジックを使用してコードを再配置!ループは必要ありませんが、 'If'や' Select'と適切な字下げで、これを行うことができます。 – R3uK
ローカル変数を使用します。 w =ワークシート( "StabDataCapture")とそれらを後で参照する(またはブロックを使用する)と、非常に小さな改善が得られるかもしれません(選択されたセルの変更ごとにこの関数が呼び出される場合にのみカウントされます)。私もApplication.Calculation = xlManualを試してみます。たとえ多くの計算がないと思っても。しかし、なぜあなたのコードが遅くなるべきかわかりません。そしてR3uKも述べたように、このインデントはひどいものです。 – z32a7ul
この関数を別の関数から呼び出す場合は、DisplayPageBreaksやEnableEventsなどの値を保存し、最後に元の値に戻します。そうでなければ、このサブの呼び出し元は、これらの最適化を使用していれば、それらの最適化を失う可能性があります。 – z32a7ul