2016-04-01 11 views
1

私はマクロを初めて使用しますが、私は困惑している状況に遭遇しました。私は3つのワークシートを持つワークブックを持っています( "検査レポート"、 "デバイスリスト"、 "不備")。私は、 "デバイスリスト"上のマクロと空白の行を隠す "不備"を持っています。 3ページすべてを印刷する前に空行を非表示にするマクロを操作する「検査レポート」のマクロを作成します。ページを印刷する前に2つの他のマクロを実行するように印刷マクロを設定するには

ここに私のコードです。最初の2つのSubはそれぞれワークシート上にあり、最後のSubはModule内にあります。

Sub Hide_Blank_Rows2() 
'Hide blank rows on "Device List" 
    ActiveSheet.Unprotect Password:="" 

    Application.ScreenUpdating = 0 
    On Error Resume Next 
    [b12:b1108].SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 
    Application.ScreenUpdating = 1 
    ActiveSheet.Protect Password:="" 

End Sub 

Sub Hide_Blank_Rows3() 
'Hide blank rows on "Deficiencies" 
    ActiveSheet.Unprotect Password:="" 

    Application.ScreenUpdating = 0 
    On Error Resume Next 
    [b49:b156].SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 
    Application.ScreenUpdating = 1 
    ActiveSheet.Protect Password:="" 

End Sub 

Sub Print_All_Pages() 
' 
' Run Macros to hide blank rows then print all three worksheets 
' 
Call Hide_Blank_Rows2 
Call Hide_Blank_Rows3 
' 
    Sheets(Array("Inspection Report", "Device List", "Deficiencies")).Select 
    Sheets("Inspection Report").Activate 
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ 
     IgnorePrintAreas:=False 

End Sub 

私はこれを実行すると、私はコンパイルエラーを取得:SubまたはFunctionが定義されていません。

+0

。どこに他のコードがありますか? VBEメニューからDebug-> Compileを選択すると、どの行が強調表示されますか? – Comintern

+0

Sub Print_All_Pages()は黄色で強調表示され、Call Hide_Blank_Rows2は青色で強調表示されます。 –

+0

コードが3か所の間に広がっているのを完全に逃した。以下の答えを見てください。 – Comintern

答えて

1

「非表示」Subsは、モジュールではなくワークシートにあるため、それぞれのワークシートのメソッドです。あなたは(例として、シート2とシート3を使用して)、すなわち上でそのメソッドを呼び出すためにどのようなオブジェクトを指定する必要があります:

Sheet2.Hide_Blank_Rows2 
Sheet3.Hide_Blank_Rows3 

あなたはCallキーワードを省略することができます。

「隠す」サブモジュールをモジュールに移動することもできます。あなたはまだあなたがする持っていないバグを解決しますMeActiveSheetへの参照を交換し、ワークシート上にそれらを残す場合(あなたは2 Subsを呼び出す前に、またはそれらの間のActiveSheetを変更することはありません):

Sub Hide_Blank_Rows2() 
'Hide blank rows on "Device List" 
    Me.Unprotect Password:="" 

    Application.ScreenUpdating = 0 
    On Error Resume Next 
    [b12:b1108].SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 
    Application.ScreenUpdating = 1 
    Me.Protect Password:="" 

End Sub 

をモジュールに移動する場合は、まだ取得していないバグを解決するために、動作させるワークシートに具体的に対処する必要があります。私は個人的にちょうど...このような1つのSub何かに

Sub Hide_Blank_Rows(sh As Worksheet, targetRange As String) 
    sh.Unprotect Password:="" 
    Application.ScreenUpdating = 0 
    On Error Resume Next 
    sh.Range(targetRange).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 
    Application.ScreenUpdating = 1 
    sh.Protect Password:="" 
End Sub 

をそれらを組み合わせて...とSub Print_All_Pages()と同じ場所にそれを置くと思います。

あなたはこのようにそれを呼び出します。私は、複製することはできません

Hide_Blank_Rows Sheets("Device List"), "B12:B1108" 
Hide_Blank_Rows Sheets("Deficiencies"), "B49:B156" 
+0

ありがとうComintern。私は 'ActiveSheet'を 'Me'に変更して行きました。それは今私がそれを必要とする方法で動作します。 –

関連する問題