Excel2007でのworkbookと標準モジュールの使い方

このQ&Aのポイント
  • Excel2007でのworkbookと標準モジュールの使い方について質問です。VBAのプログラミング初心者ですが、このサイトで数々の質問をさせていただき、解答と共にソースコードもいただいたことがあります。ありがとうございました。
  • 私はExcel2007でのVBAのプログラミング初心者です。このサイトで質問をさせていただき、解答と共にソースコードもいただいたことがあります。そこで、私はそれらのソースコードを1つのworkbookの標準モジュールに書きました。そして、別のデータを入れたブックをコピーしましたが、コピー元のブックにある標準モジュールのソースコードがコピーしたブックで使えないエラーが発生しました。どのようにすればコピー先のブックでもコピー元の標準モジュールのソースコードを使用できるでしょうか。
  • Excel2007でのworkbookと標準モジュールの使い方に関する質問です。私はVBAのプログラミング初心者で、このサイトで数多くの質問をさせていただきました。質問に対していくつかの解答と共にソースコードもいただいたことがあります。そのため、私はそれらのソースコードを1つのworkbookの標準モジュールにまとめました。しかし、別のデータを入れたブックをコピーしたところ、コピー元のブックにある標準モジュールのソースコードがコピー先のブックで使えないエラーが発生しました。どのようにすればコピー先のブックでもコピー元の標準モジュールのソースコードを利用できるでしょうか。
回答を見る
  • ベストアンサー

Excel2007でworkbookと標準モジュー

私はまだまだVBAのプログラミングで駆け出し 段階でありながら、今までこのサイトで数々質問をさせていただきました。そして数々の解答と共にソースもいただきました。 皆さんありがとうございます。 これらのソースを1つのworkbookの標準モジュールに書きました。(こういう理解の仕方で良いのかわからないですけど?) そのブックをコピーして別のデータを入れました。 コピー元のブックにある標準モジュールのソースがコピーしたブックで使えると思いましたがエラーになります。 コピー元のブックの標準モジュールのソースがコピーしたブックで使える様にするにはどうすればよろしいでしょうか? コピーしたブックのデータ内容は変えてますが形は同じなので使えるはずなのですが。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Q、標準モジュールが全ブックで使えるようにするには? A、そのような関数を標準モジュールに書くことです。  標準モジュールに書くのは、マイクロソフトが提供する関数やツールでは不足の機能を補う働きをする関数のみです。マイクロソフトが提供する関数やツールが、全ブックで共通して使えるように、これらもそのように設計する必要があります。例えば、そこに書くべき関数は、以下のようなものです。 標準モジュール1:共通標準関数 Pause() Message() ErrorMsg() StopMsg() Warning() Verify() CutStr() LenH() CharCount() SetL() SetR() Rounds() GetDate() DosCommand() 標準モジュール2:ファイルシステム関数 FolderExists() FileExists() FileSize() getFileList() FileWeite() FileReadAll() FileRead() DilereadArray() 標準モジュール3:データベース関数 for Excel ErrMessage() SQLExecute() DLoookp() DSelect() SheetWriter() 標準モジュール4:データベース関数 for Access CnnLExecute() DBLoookp() DBSelect() TableWriter()  いずれも、ブックやシートで書くVBAコードを簡素化するためのものです。通常は、これ以外のは標準ライブラリーには登録しません。 >数々の解答と共にソースもいただきました。  それらは、標準モジュールではなくて、《こういう時にはこのように書けばよい》という忘備録付きで Word などに記録しておいたらいいです。で、それをコピペしたら動くなんてことは、期待しないことです。 以上!

961awaawa
質問者

補足

数々の解答と共にソースもいただきました。  >それらは、標準モジュールではなくて、《こういう時にはこのように書けばよい》という忘備録付きで Word などに記録しておいたらいいです。で、それをコピペしたら動くなんてことは、期待しないことです。 以上! 実際にコピー元のブックではしっかりと動いてるんです。 データ内容は違っても記号や数字だけなんです。形等は全部一緒なんです。 ブックをコピーをせずに新規ブックから立ち上げてそこにsheetやソースをコピーした方ら上手く行くでしょうか?

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

エラーが起こった時に、シートやセルの場所やエラーコードなどを、具体的に考えることです。 今回も質問者は、生半可な原則論だけを投げているだけ。 ーー 数日考えても、原因が思いつかない経験などよくある。 コピーしたのだからそのまま動くというのは、たまたまそうであっただけ。 動かないようにする例など、専門家なら、すぐ考え着くように思う。 すでに回答者がおっしゃっているように、ここの回答のコードは、その回の例に対する対応だけである場合が多く、いろんな場合を考えた、エラーチェックなどは省いているのがほとんど。本筋を理解してもらう為の、複雑さは省いた、初心者向けの学習用コードである。 他人に使ってもらう為には、熟練したプロが、コードを作らないと、初心者では ボロがでる恐れが多い。 大胆にも、VBAやシステムの経験が最近始めた人が、また初心者向けに、システムをエクセル!!で作ろうとしている質問が結構数、出るが、危険一杯だ。 また、エクセルは開発するため向けに作られたソフトではない。 セキュリティ対策など考えてもいない。 === 上記は、やはり原則論だが、具体論としては、 ・(その名の)オブジェクト(ブック、シート、セルなど)が、今回の処理時点でも存在するか。 ・データが今回の処理時点でも存在するか。予想のデータ性格や範囲か。 などを疑ってみては.いわばデータ依存のことかな。  システムのプロでも、予想外のデータが入ったので、システムが止まり、電車や銀行・証券業務などが数時間動かず、何十億円の損害が出た、というケースはある。システムは怖いものと心得よ(ただし個人的意見)。

961awaawa
質問者

お礼

ありがとうございました。

回答No.4

 okwaveってのは、汎用的なコードを手にする場所ではありませんよ。あくまでもその場しのぎのコードを入手する場。質問者も、{それはカクカクシカジカのライブラリを開発し、カクカクシカジカのコードを書いてカクカクシカジカに解決されたし}なんて回答なんて期待していまでせん。また、大抵は、ライブラリー化するに足りるコードを提示する程に問題点を整理しての質問は皆無でしょう。それができるプログラマならば、コードの書き方なんて質問は絶対にしません。そんなこんなで、解答者もその場しのぎのコードを提示する訳です。それを汎用レベルに改変するのは質問者の役目。この役割分担は絶対です、ですから、ここで仕入れたコードはword行き。でないと、ごみで一杯になりまづよ。そういうことです。

961awaawa
質問者

お礼

ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

繰り返しますが、 >>そのエラーとなるコードとエラーメッセージを >> このサイトにポストしましょう。 >>アドバイスを得られると思います。 これらが明示されないと、動作しない原因を説明することができません。

961awaawa
質問者

お礼

ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.2

>コピー元のブックの標準モジュールのソースが >コピーしたブックで使える様にするにはどうすればよろしいでしょうか? その標準モジュールに書き込んであるソース次第です。 そのソースが、 自ブックの名前を使っているとか シート数に依存しているとか シート名に依存しているとか、 考えられそうな原因はいろいろと考えられます。 VBAを扱う場合は、 そのマクロを起動できるだけではなく、 エラーの原因を特定し、修正するスキルが求められます。 そのスキルは少しずつ身につくでしょうから まずは、 そのエラーとなるコードとエラーメッセージを このサイトにポストしましょう。 アドバイスを得られると思います。

961awaawa
質問者

お礼

実際にコピー元のブックではしっかりと動いてるんです。 データ内容は違っても記号や数字だけなんです。形等は全部一緒なんです。 ブックをコピーをせずに新規ブックから立ち上げてそこにsheetやソースをコピーして持ってきさえすれば上手く行くでしょうかね?

関連するQ&A

  • Workbook_Openを起動時以外に呼び出す

    標準モジュールに書いた、Sub Auto_Open()なら、ボタンにAuto_Openを登録するなどで、ブックの起動時以外でも呼び出せますが、ThisWorkbookに書いた、Private Sub Workbook_Open()は、ボタンにWorkbook_Openを登録しても作動しません。 どのようにすればよいのでしょうか?

  • 標準モジュールにコピーして、実行・・・??

    エクセルVBA初心者です。 VBAを勉強すべく関連サイトを見て勉強しようと思ったのですが、 早くもつまづいてしまいました。 コードの例で、 『下記を標準モジュールにコピーして、実行してみてください。』 とあるのですが、 新しいエクセルブックを開いて標準モジュールに、ここでいう "下記"部分をコピペしたところまでは良かったのですが、その先の "実行"の仕方が分かりません。 初心者な質問でお恥ずかしいのですが、どなたか教えてください。 お願いします。

  • Excel2003のVBAでプログラミングをしています。

    Excel2003のVBAでプログラミングをしています。 作成しているのは売上のデータを外部DBから抽出し既定のフォーマットに整形するツールです。 そのファイルを送信先各位の送信する際にそのWorkBookをそのまま送信すると マクロが含まれている分動作が非常に重くなってしまいます。 そこで、同じフォーマットのコピーを作成したいのですが workbookオブジェクトのSaveCopyasメソッドを使用してコピーを作成すると マクロごとコピーされて意味がありません。 各worksheetの値のみをコピーする方法はありませんでしょうか。 どなたか助言おねがいします。

  • Workbook_openでマクロが実行されない

    ExcelのVBAで起動時にマクロを実行させたいのですが、 「メソッドまたはデータメンバが見つかりません。」 とのエラーが出て実行出来なくて困っています。 プログラム内容は *ThisWorkbook* Private Sub Workbook_Open() Module1.tasu End Sub *標準モジュール(Module1)* Private Sub tasu() Dim a As Byte a = 3 Range("a1") = a End Sub 使用しているソフトはExcell2003、VB6.5です。 よろしくお願いします。

  • 標準モジュールとクラスモジュールの違い

    マイクロソフトのAccess2000でVBAプログラミングを行なっておりますが、 基本的なことを教えてください。 「標準モジュール」と「クラスモジュール」の違いはなんですか? 例えば、どこからでも使えるプロシージャ Public Function getSum( i1 as integer, i2 as interger ) getSum = i1 + i2 End Function を定義したとして、標準モジュール内に書くのとクラスモジュール内に 書くのとでは、何が違ってきますか?その他とにかく「標準モジュール」 とクラスモジュールの違いを教えてください。

  • Excel2010 VBA

    すみません。 VBA独学勉強中の身です。 VBAにて Workbook Open で いろいろ試してコードを入れて閉じたところ、 ブックの起動ができなくなりました。 コードは、 Application.ActivePrinter = "プリンター名"(プリンター名はきちんと入れてます。) をいれました。(後で気づいたのですが、コレ自体間違っていました。) 100%読み込みまでは行きますが、 その後がず~っと読み込み中というか、 ブックの表示がされない状態です。 30件程度のデータなので、 バックアップを取っておいたデータ無しの ファイルに入れなおせば済むのですが、 起動する方法がもしあれば、教えて頂きたく 質問させていただきました。 よろしくお願いします。

  • 自身が記述された標準モジュールを常に参照する方法

    標準モジュール名を指定せず、自身が記述された標準モジュールを常に参照する方法 例えば A = W_Book.VBProject.VBComponents("Module56").CodeModule.ProcBodyLine("Workbook_SheetSelectionChange", 0) というコードを"Module56"内に記述した場合Module56という標準モジュール名を例えばModule44と変更してしまうと動かなくなってしまうと思います。 これを、常にThisWorkbookのように、このコードが記述されたモジュールを参照するように変更はできますでしょうか?もしご存知でしたらご回答頂けますと幸いです。どうぞよろしくお願いいたします。

  • Workbookが2つあった場合に

    元のブックAがあります。 もう一つ別のブックBを開いた場合に そのBのデータをAにコピーするマクロを作ったのですが そのBを開いてない場合に実行してしまってもエラーにならないように したいのですが、Bが開いてないことを認識させたい場合 If~thenで記述したいのですが、どう記述すればよろしいでしょうか? ちなみにBを開いた場合は Workbooks(2).Activate このように記述しています。 

  • Excelで『Microsoft Excel Objects』でのVBA

    こんにちわ。 早速ですが、Sheet1だけ他のBookでも使用する事があり、 Sheet1を移動した時に、VBAコードも一緒に移動させたいので、 『標準モジュール』ではなく、『Microsoft Excel Objects』の 「Sheet1(Sheet1)」部分にVBAコードを記入したいのですが、 他シートをデータを取得したりする処理が出来ません。 制約等あるのでしょうか? また、Sheet1を移動した時に、モジュールも一緒に移動させる事は 可能でしょうか? 宜しくお願いします。

  • エクセルを開く度に空白ブックではなくマクロ保存したデータが開く

    エクセルを開く度に空白ブックではなくマクロ保存したデータが開く 使い慣れないマクロの記録をして以来、エクセルを開く度に空白ブックではなく、データの入ったブックがまず開きます。マクロもうまく使えなかったので、とりあえず元のように白紙のブックが開くように戻したいと思います。 他サイトで質問しましたが、回答が理解できなくて、でもさらに質問することができませんでしたのでこちらでもう一度お聞きしたく投稿します。お分かりになる方、どうぞよろしくお願いします。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1337851528 >Personal.xlsmの標準モジュールに下記のコードを追加しておけば自動的に新規Book作成状態になります。 この部分がどうしたらいいのか分かりません。現在私のVBAProjectは下記のようになっています。(標準モジュールはマクロを登録していないので?無いようです)よろしくお願いいたします。 VBAProject(PERSONAL.XLSB) -Microsoft Excel Objects -Sheet1(Sheet1) -This Workbook VBAProject(Personal.xlsm) -Microsoft Excel Objects -Sheet1(export) -This Workbook

専門家に質問してみよう