2016-07-22 45 views
0

多くのユーザーが毎日、異なる解像度、画面ズームなどで複数のモンティアと交流するExcelブックがあります。必要な各シートの範囲に合わせてすべてのワークシートが必要ですユーザーは毎回見ることができます。複数のシートにworkbook_openを適用する方法

以下は1つのワークシートのために動作しますが、どのように私はそれがすべてのワークシート(シート1、シート2、など。)

Private Sub Workbook_Open() 
With Sheets("Sheet1") 
    Columns("A:P").Select 
    ActiveWindow.Zoom = True 
    Range("A1").Select 
End With 
End Sub 
+0

すべてのワークシートをループします。 http://stackoverflow.com/questions/25953916/excel-vba-looping-through-multiple-worksheets – cyboashu

+0

(少なくとも)4つの異なる方法で、表示され、隠されている既存のワークシートをループすることができます: 'Dim WS ThisWorkbook.Worksheets の各WS用のワークシート としてThisWorkbook.Worksheets.Count にN = 1の場合はロング として、あるいは 薄暗いN 'ワークシートWS 次WS で何かを' 'ワークシート(N)とsoemthingを行います Debug.Print ThisWorkbook.Worksheets(N).Name 次N 'OR Dim W WSは何も なくなるまでのワークシート 設定WS =ワークシートとして、S(1) 'を行いWS のDebug.Print WS.Name 設定WS = WS.Next Loop' – skkakkar

+0

ありがとうcyboashuと何かを、私はVBAの第一人者ないです各ワークシートの範囲が異なる場合、ループを各ワークシートに適用するにはどうすればよいでしょうか。 – Stackexplorer

答えて

1

あなたはWorksheet_Activateイベントを使用することができ、および場所コードに適用することになるだろうなど

Private Sub Worksheet_Activate() 
    Columns("A:P").Select 
    ActiveWindow.Zoom = True 
    Range("A1").Select 
End Sub 

各シートに必要に応じて範囲を編集します。

あなたはもう少し複雑で、使用何かを使用する必要があるかもしれませんので、またはあなたは、何をしたいと思いもしなくてもよいシートがアクティブになるたびに、実行されるコード:

Private AlreadyRun As Boolean 
Private Sub Worksheet_Activate() 
    If Not AlreadyRun Then 
     Columns("A:P").Select 
     ActiveWindow.Zoom = True 
     Range("A1").Select 
     AlreadyRun = True 
    End If 
End Sub 

をどののみとなります何かシートは(AlreadyRun変数はもともとFalseになりますように、それが一度実行されるとTrueに変更されます)が活性化される最初の時間を行う、またはシートにそれが起動するたびにサイズが変更されます

Private AlreadyRun As Boolean 
Private Sub Worksheet_Activate() 
    Dim CurRng as Range 
    Set CurRng = Selection 
    Columns("A:P").Select 
    ActiveWindow.Zoom = True 
    CurRng.Select 
    If Not AlreadyRun Then 
     Range("A1").Select 
     AlreadyRun = True 
    End If 
End Sub 

最初に選択したセルをA1に移動するだけです。

はワークブックがワークブックが再オープンさWorksheet_Activateイベントを通過していない保存されたときに、現在のあるシートに起因する問題を回避するには、
Private Sub Workbook_Open() 
    Application.Screenupdating = False 
    Dim ws As Worksheet 
    Set ws = Activesheet 

    'For the next two lines, just pick any two of your worksheets 
    'All it is trying to do is to ensure whichever sheet was active at open 
    'is deactivated before being activated again in the "ws.Activate" command 
    Worksheets("Sheet1").Activate 
    Worksheets("Sheet2").Activate 

    ws.Activate 
    Application.Screenupdating = True 
End Sub 

(無効Screenupdatingを言うのWorkbook_Openイベントを含むことができ、イベントが実行されている間は、ユーザーにはワークシートの「ちらつき」が見られなくなります)。

+0

ありがとうYowE3k、最初のコードはかなり近いです。しかし、3つのワークシートをすべて調整して開いて開く必要があるので、ユーザーがモニターに設定した解像度やズームに関係なく、請求書フォームは同じ範囲を表示します。 各シートの上部に 'workbook_open()'を追加するだけですか? – Stackexplorer

+0

ユーザーがシートを見ていないときに、シートのズームレベルが何であるか気にする必要はないでしょう。ユーザーが実際に見るためにズームレベルが何であるかは、おそらく気にかかります。シートがアクティブになっていれば、それが正しいズームレベルになっていることを確認する必要があります。 Workbook_Openイベントは、ワークブックが開かれるたびに起動しますが、ユーザーがワークシートを表示するたびにWorksheet_Activateイベントが発生します。 – YowE3K

+0

私も第3のコードを使用し、それは動作します。今私の唯一の問題は、ユーザーがシートのサイズを変更して2回目にシートを選択してもシート全体がハイライト表示される場合です。ユーザーが最後に持っていたセルを選択することは可能ですか? – Stackexplorer

関連する問題