2009-07-02 9 views
1

でマクロを実行すると、私は、これは技術的にはマクロではないと思いますが、私はそれを呼び出すために他に何を知らない:エクセル

ユーザーは、シート上のレポートから個々のセクションを印刷したいです。これらのセクションはちょうど名前付きの範囲です。

いくつかのポイント:

  • ファイルがXLTファイルです。
  • xlsファイルを生成するためのテンプレートとして使用されます。
  • 私はExcel 2007を使用していますが、ユーザーは2007年と2003年を混在させて実行します。
  • ファイルがExcelに読み込まれると、すべてのマクロを有効にするかどうか尋ねられます。私はボタンをクリックしたときに

     ' in a loop  
         With ActiveSheet.Buttons.Add(rngCurrent.Left + 2, rngCurrent.Top + 1, rngCurrent.Width - 2, rngCurrent.Height - 1) 
          .Caption = "Print" 
          .OnAction = "PrintRange" 
          .Font.Size = 7 
          .Name = CStr(oSite.SiteID) 
         End With 
    

    は、しかし、それはマクロを実行することはできません」を与える:それは呼んでいる

  • 機能は、私はシートのエッジの下のボタンのシリーズを作成し

公開されています'filename.xls!PrintRange」。

ループがmodPageというモジュールにある間、PrintRange関数はシートshtPageにあります。

なぜ私は必要な機能を呼び出すことができないのですか?どのように機能させることができますか?

+0

ボタンをクリックしたときに現在の範囲を印刷しようとしていますか? –

+0

現在の範囲ではなく、名前付き範囲です。私は、ボタンの名前を範囲の識別子として使用することを計画していました。たとえば、oSite.SiteIDがENG123に設定され、名前付き範囲がENG123とも呼ばれる場合、ENG123が印刷されます。 –

+0

EStrは何をしていますか?あなたはCStrを意味しますか? – Lunatik

答えて

5

あなたPrintRangeサブパブリックとして宣言してもしてあなたがのコードセクションでそれを入れているので、あなたはまだ、Excelはそれを見つけることができるように、より具体的にそれを参照する必要がありますモジュールの代わりにワークシート。

変更:

.OnAction = "shtPage.PrintRange" 

.OnAction = "PrintRange" 

とそれだけで正常に動作します。

注意:ページ・タブのワークシートの名前を 'shtPage'に変更したが、VBAプロジェクト・エクスプローラでExcelでワークシートを 'Sheet1(shtPage)'として参照している場合は、 Excelが認識する「Sheet1」の名前であり、「ページ」タブに表示される「shtPage」の名前ではありません。

+0

私はvbaでプログラミングするときに、すべてのプログラミングロジックがウインドウを出るとは思えません。 –

+0

@ graham.reeds - うん、わかった、私はExcel-VBAでやらなければならなかったすべての回避策で私の髪を奪うのが半分だ。 – Stewbob

+1

shtPageモジュールはクラスモジュールです。ExcelのUI(ボタンのような)からサブを呼び出す場合は、それを標準モジュールに入れます。オブジェクトを参照せずにカスタムオブジェクトのメソッドを直接呼び出すのではないでしょうか? VBAには問題がありますが、私はこれがその一つだとは思わない。 –

1

PrintRangeマクロを公開しましたか?それは以下のように定義する必要があります:

Public Sub PrintRange 
    '// ...' 
End Sub 
+0

はい、公開されています。 –