2016-05-25 2 views
3

私はVBAの初心者です。このフォーラムを使用することで、コードを書くことができましたが、私は1つの場所で立ち往生しています。隠しワークシートでVBAマクロを使用する方法そしてそれらを隠す

ブックには10枚あります。最初のシートは私の入力ワークシートであり、すべての計算を行います。これらの計算は、後の9枚に引かれます。これらの9枚は私のレポートを生成します。計算ファイルでは、次の9ファイルをすべて非表示にしてマクロを実行します。一度計算が大丈夫です。 [Generate report]ボタンをクリックすると、新しいファイルが作成され、デスクトップ上に開き、ドキュメントに保存されます。

問題は - どういうわけか、私はすべてを行うコードを生成することができました。このフォーラムを通過するが、私は隠すを取得し、一部を再表示することはできませんよ。 私が書いたコードは、計算ファイルからすべてのファイルを非表示にしています(非表示にしておく)、新しく生成されたレポートにファイルを非表示にします(新しいExcelですべてのファイルを非表示にすることはできません。ワークシートクラスのvisibleプロパティ)。だから、残りはマクロ作品を隠されたまま、私は計算ファイル内の唯一の1枚を持つことができます -

は、ここで私はそれを解決する助けてください私のコードです。新しく生成されたファイルには、9つのタブがすべて表示されます。

Sub SaveMain() 

Application.EnableEvents = False 
Sheets("Cover").Visible = True 
Sheets("2").Visible = True 
Sheets("3").Visible = True 
Sheets("4").Visible = True 
Sheets("5").Visible = True 
Sheets("6").Visible = True 
Sheets("7").Visible = True 
Sheets("8").Visible = True 
Sheets("9").Visible = True 

Dim Flname As String 


Flname = "Pump Datasheet" & InputBox("Enter Pump tag No P-XXXX:") & ".xls" 

Sheets(Array("Cover", "2", "3", "4", "5", "6", "7", "8", "9")).Copy 

Sheets("Cover").Visible = False 
Sheets("2").Visible = False 
Sheets("3").Visible = False 
Sheets("4").Visible = False 
Sheets("5").Visible = False 
Sheets("6").Visible = False 
Sheets("7").Visible = False 
Sheets("8").Visible = False 
Sheets("9").Visible = False 

newfilename = Flname 

With ActiveWorkbook 
.SaveAs newfilename, FileFormat:=50 

End With 

Application.EnableEvents = True 

End Sub 
+0

わかりません。あなたはそれをどのブックに隠しておきたいですか? – findwindow

+2

少なくとも1枚のシートが必要です。あなたのコードでは、最後の近くにすべてのシートを非表示に設定します。 「Cover」をTrueに設定してみてください。 –

+0

私の親ファイルは(計算ファイル+9枚)です。それらの9枚は隠されていますが、9枚の隠しファイルは計算ファイルからデータを取ります。計算ファイルが完成したら、レポート生成をクリックします。 9枚あり、計算ファイルを持たないNEW FILEを作成します。これらの9枚のシートは親ファイルからのものです(新しいファイルにすべて表示されますが、親ファイルには隠されています)。 私のマクロは、親シートに9つのファイルを表示します(これは必要ありません)。新しく生成されたファイルにファイルを隠します(これはもう必要ありません)。それで、私は両方の逆を行います。 – Eric

答えて

0

このようにシートを隠して隠してみると、後で変更する必要がある場合、多くのエネルギーを節約できます。

Dim ws As Worksheet 

'To unhide all sheets 
For Each ws In ActiveWorkbook.Sheets 
    ws.Visible = xlSheetVisible 
Next 

'To hide all sheets except "Cover" 
For Each ws In ActiveWorkbook.Sheets 
    If ws.Name <> "Cover" Then 
     ws.Visible = xlSheetHidden 
    End If 
Next 
+0

ありがとうございました。私はそれを実装しようとします。 – Eric

+0

とにかく2枚目を見えるようにしていますか?いくつかの異なった試みは助けになりませんでした。 各ActiveWorkbook.Sheetsの場合 wsの場合。名前<> "計算" と "シート1" すると ws.Visible = xlSheetVeryHidden エラー:言う私もその後 ws.Name <> "シート1" の場合ActiveWorkbook.Sheetsで を各WS用 をしようとしました 型の不一致ws.Visible = xlSheetVeryHidden エラー:制御変数が既に使用されています。 助けてもらえますか? 私はまた、下のコメント欄に私のプログラムを持っています – Eric

+0

ええ、あなたはシートのインデックスまたはシート名でそれを行うことができます。しかし、この '' ws.name <> "Cover"とws.name <> "Other Name" Then'のように見えるか、 '' ws.Index <> 1とws.index <> 2 Then'を使用できます。しかし、AND/ORロジック修飾子を使用する場合は、完全なステートメントを再度作成する必要があります。 –

1

あなたはカバーが最初に存在することを確認するために、これを微調整することをお勧め。

シートを非表示にするループをより直接的に設定することができます。実際には、次にのテストは必要ありません。

Sub Sheeted() 
Dim ws As Worksheet 

On Error Resume Next 
Set ws = Sheets("Cover") 
On Error GoTo 0 

If ws Is Nothing Then Exit Sub 

For Each ws In ActiveWorkbook.Sheets 
    ws.Visible = (ws.Name = "Cover") 
Next 
End Sub 
+0

それは素晴らしいです!ブール値が期待される比較を使用する!!私の便利なファイルに保存されています!それを考えると、私はいつも同じような手法をフォーミュラで使っていますが、VBAでも同じことをすることは決してありませんでした。 – teylyn

+0

ありがとうございました。申し訳ありませんが、私はそれをはっきりと説明していないと思います。 私の計算ファイル(親ファイル)に隠れたままにしておきたいが、それでもマクロでそれを使用して、9つのファイルが新しいファイルとして取得されるようにしたい。 そして生成されたNEWファイルは、9つの隠しファイルをすべて親ファイル(Cover + 2 - 9)から取り込みます。私はすべての9つのシートが新しいファイルで常に見えるようにしたい、私はいつもレポートとしてそれらを送ることができます。 誰かがいつも私の親ファイルを見たいと思っている場合は、計算ワークシートだけを見て、他の9枚の隠しシート(隠しファイルについて知りたくない)を混ぜないようにしてください。 – Eric

0

は試行錯誤によって、あなたの助けを借りて、それを考え出したどのように私いくつかの 君たちをありがとうございます。 私はちょうどこのグループのどこかで見たものを閉じます。

すべての提案に基づいて変更されたコードです。不必要なものがあるかもしれませんが、どういうわけかそれは動作します。 多くありがとうございました

Sub SaveMain() 

Dim Flname As String 
Dim ws As Worksheet 

Application.EnableEvents = False 
For Each ws In ActiveWorkbook.Sheets 
ws.Visible = xlSheetVisible 
Next 

Flname = "Pump Datasheet-" & InputBox("Enter Pump tag No P-XXXX:") & ".xls" 

Sheets(Array("Cover", "2", "3", "4", "5", "6", "7", "8", "9")).Copy 

newfilename = Flname 

With ActiveWorkbook 
.SaveAs newfilename, FileFormat:=50 
.Close 0 
End With 
For Each ws In ActiveWorkbook.Sheets 
If ws.Name <> "Calculations" Then 
ws.Visible = xlSheetVeryHidden 
End If 

Next 

Application.EnableEvents = True 

End Sub 
関連する問題