• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELLバーコードコントロールを使うと印刷マクロが使えない)

EXCELLバーコードコントロールを使うと印刷マクロが使えない

このQ&Aのポイント
  • EXCELLで請求書や送付状を印刷する際に、バーコードコントロールを使いたいと思ったが、それにより印刷マクロが機能しなくなった。
  • バーコードコントロールを設定してから印刷ボタンを押すと、「アプリケーション定義またはオブジェクトエラーです」というエラーメッセージが表示され、印刷ができない。
  • また、バーコードコントロールを設定すると、ファイルを開く際に「このアプリケーションは安全でない可能性のあるActiveXコントロールを初期化しようとしています。」というメッセージが表示される。対応方法に頭を悩ませている。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 少し遅くなりすみませんでした。やっと、2点は再現することができました。郵便番号バーコードを出力できました。 確かに、おっしゃるとおりの現象なのでしたが、VBAの問題については、何か理由が分かりません。ただ、一度、マクロが通れば通るようになるはずです。 たぶん、セキュリティの関係で、マッチングが悪いのかもしれません。 試したコードです。(これでコードはパスしています。) '------------------------------------------- Private Sub CommandButton1_Click() Dim 部数 As Integer  部数 = 1 '印刷部数を指定する ※1  With Worksheets("送付状")   .PrintOut Copies:=部数 End With End Sub '------------------------------------------- それと、 「アプリケーションは安全でない可能性のあるActiveXコントロールを初期化しようとしています」 は、カスタムインストール・ウィザード(OAK に入っています)で処理しようとしましたが、該当するmsi ファイルが見つかりませんでしたので、 レジストリで処理しました。処理は、落ち着いて邪魔が入らないときにやらなくてはなりません。バックアップを取っておいたほうがよいです。 #レジストリ設定を UFIControls = 1 に変更する

john-novi
質問者

補足

こんばんは。 いろいろありがとうございます。 早速コードを入力して実行してみましたが、マクロ初心者ですので入力を間違えているらしいです。 マクロ名[送付状印刷]でご指示のコードをコピー&ペーストしました。 コードが Sub 送付状印刷() '------------------------------------------- Private Sub CommandButton1_Click() Dim 部数 As Integer 部数 = 1 '印刷部数を指定する ※1 With Worksheets("送付状") .PrintOut Copies:=部数 End With End Sub '------------------------------------------- となり実行すると「コンパイルエラー Sub Endが必要です」のメッセージが出てしまいます。 どこがいけないのでしょうか。出来たら具体的にお教えいただくとありがたいです。 「アプリケーションは安全でない可能性のあるActiveXコントロールを初期化しようとしています」 についてはご指示のマイクロソフトの説明も読みましたが、UFIControls = 1に設定して今後セキュリティ上などで大丈夫なのでしょうか。 「レジストリで処理しました。処理は、落ち着いて邪魔が入らないときにやらなくてはなりません。バックアップを取っておいたほうがよいです。」 こちらの手順もよく分からないのでいじるのが怖くて、今まで同様メッセージが出たらそのつど「いいえ」を押しているのが現状です。ここも「はい」がよろしいのでしょうか。 よろしくお願いいたします。

その他の回答 (9)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

こんばんは。 私のコードを実現するためには、もう少し基礎的な力が必要だと思うのですが。 >たとえばCtrl+F11を押して「Macro」のシートに貼り付けるというようにお教え願いないでしょうか。 厳しいようですが、モジュール名や、その開き方は、どこかのマクロの入門サイトを探していだけないでしょうか。内容にもよりますが、今回の場合は、そういうところからの出発点ですと、おそらく、もうこれ以上先にはもう進めないないように思います。 >お教えいただいたコードはファイル名を入力した時点で新規ファイルとして保存されるのでしょうか。 それはできても、前回書いたように、抜け落ちしないような作り方をするときは、本当に、その仕組みを理解しないと、マクロ自体の保存が元のブックにできないと思います。また、マクロとブックを別にする方法もありますが、それは、アドインにすることです。しかし、それは、また別にややこしい部分が出てきてしまうし、モジュールの位置がはっきりしていない以上は、無理なのです。一通り、マクロの使い方を覚えてからにしていただきたいのです。 (なお、ここの掲示板は、回答者の著作権を規約上、認めていませんのでどうしても、こういうところでは、内容的に制約はあります。) あしからずご理解くださるようお願いします。 参考 http://oshiete1.goo.ne.jp/qa5302737.html マクロの学習の仕方が書かれています。どうやら、私も他の方の基本ラインは同じようです。

john-novi
質問者

お礼

いろいろありがとうございます。 ご意見を参考にこれから勉強してまいります。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.9

補足: john-noviさんのご希望には、足らないものですが、インスタンスをボタンに設けるというサンプルです。その掲示で書いたとおりですが、複数のボタンをひとつのモジュールに集約するというのは、同種類のボタンは、イベントが同時に働いてしまうので、それで難しくなるのです。 http://oshiete1.goo.ne.jp/kotaeru.php3?qid=5280581

john-novi
質問者

お礼

こんにちは。 ありがとうございます。 もう少し時間をお借りしてお聞きしいたいと思います。 もともとは、請求書を作成するとファイル名をつけて保存し、印刷をしてそれぞれが終わるとExcelを終了しますが、そのとき保存してすぐのものはそのまま閉じてくれるのですがデータを変更してもいないのに印刷をするとブックの内部の情報が変わるせいか「変更を保存しますか」と聞いてきます。請求書の発行は月末にほとんど集中して数十通発行するので、うっかり印刷をしたから聞いてくるのだなと「はい」を選んでしまうと保存し忘れたファイルがあったとき前月のデータに新規データを上書きしてしまうことが多々あります。そこでファイル名を新規に自動生成できてそれがそのブックのファイル名に変わってくれれば「はい」を選んでも(そのようなときに変更の保存を聞いてくるかどうか分かりませんが)前のデータを書き換えてしまうことはないだろうと、まさかそんなことは出来ないだろうと考えていました。でも実際新規ファイル名はExcel上「保存」という作業によってその時点のデータが新規ファイル名で記録されるのですよね。お教えいただいたコードはファイル名を入力した時点で新規ファイルとして保存されるのでしょうか。 Excelを終了したとき聞いてくる「変更を保存しますか」のところに出て来るファイル名はその新規ファイル名に変わっているのでしょうか。 このところが一番重要な部分ですので戴いたコードで試して勉強したいので具体的に >以下は、シートモジュールと、ThisWorkbookブックにそれぞれイベントを設けましたので、コードを貼り付けてください。 の貼り付け方を、たとえばCtrl+F11を押して「Macro」のシートに貼り付けるというようにお教え願いないでしょうか。 (入力制限があるため次回にお聞きしたいことがあります。) よろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんにちは #>なお、お礼側に書いたものは、直接メールされますが、補足側に書かれたものは、メールはありません。補足側で細かいことを書いて、メール側にちょっとでも書けば、こちらは見落とすことはありません。 私のこの発言について、詳しく説明させていただくと、ここのサイトには、「あげ」がありませんので、日にちが経たないものは、補足側に書かれても、上にあるので書き込みは楽なのですが、1週間も経ちますと、かなり離れてしまうのです。そうすると、だんだん対応が遅れてしまいます。お礼側に書いたものは直接、メールで連絡がきますので、忘れることはありません。できれば、補足とお礼は上手に使い分けてくれると助かります、ということでした。 一応、自分の発言リストは、Excelで4年分あるので、気になるものはマーキングしてあります。しかし、最近、ここの質問と回答のバランスが崩れているのと、また、自称「専門家」さんの専門家らしくない回答が、私のテンションを下げているのが本音のところです。 それから、Excel VBAの勉強は、なかなか難しくなっています。専門レベルの資料が、まったくなくなってしまいました。一時期、Office でVBAはやめるという噂が出ました。(発表元は、Microsoft の別チームらしい)。しかし、その後、Microsoft側は、VBA を当分の間やめません、と開発のチームリーダーが、それを否定した発表しています。それゆえに、Mac 側のOffice のVBAも復活しました。 日本の場合、Excel2000時代、つまり、2000年前後に、まとまって専門書は出されましたが、その後、すべて絶版になってしまいました。私の場合は、遡って、Excel Ver.5,Ver.4 について学びました。必要か不必要かは別として、今、VBAは、一定のレベルまでは学ぶことができますが、VB6自体がなくなって以来、本当の上級が学びにくくなっています。ここの掲示板のレベルは、もともとあまり高くはありませんが、質問者さんが、混乱させられる発言も多くあるように思います。

john-novi
質問者

お礼

こんばんは。 >私のこの発言について、詳しく説明させていただくと、ここのサイトには、「あげ」がありませんので、日にちが経たないものは、補足側に書かれても、上にあるので書き込みは楽なのですが、1週間も経ちますと、かなり離れてしまうのです。そうすると、だんだん対応が遅れてしまいます。お礼側に書いたものは直接、メールで連絡がきますので、忘れることはありません。できれば、補足とお礼は上手に使い分けてくれると助かります、ということでした。 そうだったのですか。 初めての投稿だったものですから、分かりませんでした。 私は専門の税務知識が無いと出来ない会計ソフトは別にして、自前で作って使っています。 給与計算、請求書・見積書発行、売掛管理、買掛管理、等です。 最初はLotus123からですから長い期間ではあるのですが、ほとんど雑誌に載っているものを少し変えただけで作り、その後Excelに替えて関数を使い始めたのもこの数年です。 そのうちいろいろやっていると、同じ作業を自動化できないものかとマクロを知り、自動マクロを使い始めたのが最近です。 ですから、関数もマクロもまったく初心者であります。 これから勉強するといってもせいぜい数行程度のマクロしか作れないというかほとんどがネットで教わるのが主ですが、何行もあるコードを見るととてもそのレベルまで勉強するのは気が遠くなってしまいます。 ですからwendy02さんのような方は尊敬してしまいます。 最近専門書がなくなっているとのことですが、私の頭は硬直化して専門書で勉強していくのは無理なような気がします。どうしても自分の周りのことに関係している事に結び付けてやっていかないと理解できないし覚えられません。 Wendy02さんのような方がいつもそばにいて聞ける状態ならばよいのになと思います。 出来たら今後もこのような場でお聞きしながら勉強をして行きたいと思っています。 実は、この掲示板を早々に切り上げなければならないのかと、本当はまだお聞きしたいことがあるのですがそれが気がかりでなりません。 まだルールがよく分かっておりません。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 今のところ、どこまで、望んでいるのか、状況がつかめなかったからです。 上書きを完全になくす方法はあるのですが、他人には分からない、上書きを許すオプションを付けないことには、マクロコードさえ保存できなくなってしまうからです。コマンドボタン自体に、インスタンスを設けて、そこで操作させる方法です。詳しい方なら分かるはずですが、ここの掲示板では、あまり見られないものです。 一応、私は、書き込むときは「一般」という立場(常連は暗黙のマナーがあるようです)ですが、それでも、実は、無料の掲示板ではシステムに近いものは、公開しにくいのです。公開しますとは書いたものの、できれば、今の路線で収まってほしいなっていう期待がありました。言いにくいことでしたので、申し訳ありません。 補足にある >また >>ThisWorkbook 側は、行ったり来たりするので、少しややこしいです。 > >はどうしたらよいのでしょうか。 >お手数をおかけしますが具体的にお教えくださるとありがたいです。 コードの流れを追いかけると、そのようになるので、ステップモード以外には、特に問題ではありません。読むのにややこしいということです。 >Ctrl + S のショートカットは生きています。もし、この部分なども、上書き保存の監視範囲に入れる場合は、ご相談ください。 >あまりショートカットキーは使わないのですが、念のため監視範囲に入れていただくとありがたいです Ctrl + S だけをなしにしてしまうのでしたら、 標準モジュール側の Auto_Open で、 Application.OnKey "^s","DummyMcr" を入れて、 Auto_Close で、 Application.OnKey "^s" として、DummyMcr は、 Sub DummyMcr()  '空にしておく End Sub '------------------------------------------- これ以外にも、コマンドボタンの上書きボタンを、使用不可にする方法もあります。 しかし、完全な形にするには、#6で書いたコードとは、まったく違うものです。 #6で書いたように、 「オブジェクトを作って、コマンド・ボタンにインスタンスを設けることですが、オブジェクトが壊れやすいのです。」 とは書いたものの、どうしたものかなって思っています。 コードを貼り付けるだけではなく、そういうことを理解していただけるレベルなら良いのですが……。そうしないと、メインテナンスで困ってしまうのです。 なお、お礼側に書いたものは、直接メールされますが、補足側に書かれたものは、メールはありません。補足側で細かいことを書いて、メール側にちょっとでも書けば、こちらは見落とすことはありません。

john-novi
質問者

お礼

こんにちは。 いろいろご心配おかけしたようで済みません。 お教えいただいたコードは私には理解できませんでした。 きっと専門にされている方なんだなと思っておりました。 >コードを貼り付けるだけではなく、そういうことを理解していただけるレベルなら良いのですが……。そうしないと、メインテナンスで困ってしまうのです。 おっしゃるとおりです。 また >なお、お礼側に書いたものは、直接メールされますが、補足側に書かれたものは、メールはありません。補足側で細かいことを書いて、メール側にちょっとでも書けば、こちらは見落とすことはありません。 の意味がよく分からないのですが、この掲示板のルールがよく分かっていないらしく失礼があったらお詫び申し上げます。 まだまだまったくの初心者ですが、これからマクロを組んで事務作業を自動化しようと挑戦してまいりたいと思っておりますので、この掲示板でお聞きして行こうと思います。 もしまたこの掲示板で私を見つけられたら手取り足取りお教え願えれば幸甚です。 本当にありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 >「基本データ入力」シートの「C6」に請求日を入力するとファイル名が自動生成するようにしてあり、そのファイル名を作業中のブックのファイル名に自動で換えられないかと考えているのですがいかがでしょうか。 どこでタイミングを取るかだけの問題です。今回、ある程度、こちらで、決めてしまいました。ファイル名が自動生成するというのも、単に、数式で、例えは、TEXT関数を使ったものなのでしょうか。以下のマクロは、手入力した時に、ファイル名が変更されるものです。いろんな方法を考えてみましたが、あまり凝ったものを作ると、プロジェクトのプロテクトが必要になってしまいます。それは、オブジェクトを作って、コマンド・ボタンにインスタンスを設けることですが、オブジェクトが壊れやすいのです。(とは言っても、イメージが沸かないと思います。試作で作ってみました。ご希望なら、公開します。) 以下は、シートモジュールと、ThisWorkbookブックにそれぞれイベントを設けましたので、コードを貼り付けてください。それほど高度な内容ではありませんが、ThisWorkbook 側は、行ったり来たりするので、少しややこしいです。 mPath = Application.DefaultFilePath & "\請求書\" '要変更 ここは、デフォルトパスの下にフォルダを設けているというスタイルですから、実際に合わせて換えてください。 なお、この行は、通常ではTarget との位置関係は逆です。 If Intersect(Range("C6"), Target) Is Nothing Then Exit Sub コメントに、「Target セルはひとつではない」と書かれているように、イベント対象セルは複数でも、働くように考えました。 データ入力シートのC6に手書きで入れたときに、反応するようになっていますから、イベントの種類が違うなら変更してなくてはなりませんが、そのセルに、F2--Enter だけでも、稼動します。また、コードをほかのイベントでも使えるように、Function Check_Save(rng As Range) の関数プロシージャで処理するように抜き出してあります。 なお、これは、 Mid$(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".xl")) Office 2007 も想定に入れているからです。 終了時に、 "ファイル名とC6が違います。このまま終了しますか? 仮に、OK を押して、終わらせようとしても、Excelのアプリ側のメッセージで、保存するかどうか聞いてきます。二重の警告になります。 基本的には、既存のファイル名は同じフォルダには保存できません。 コードを修正するときは、バックアップを取ったほうがよいです。私は、気が付かないまま、二度ばかりコードを失ってしまいました。Ctrl + S のショートカットは生きています。もし、この部分なども、上書き保存の監視範囲に入れる場合は、ご相談ください。私個人では、あまりしっかりしたものを作ると、今度は修正するときに、どうするか分からなくなってしまうことがありますので、抜け道を置いておきます。 '--------------------------------------------------------- '------------------------------------------- '"基本データ入力シート" '------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Range("C6"), Target) Is Nothing Then Exit Sub 'Target セルはひとつではない If Range("C6").Value = "" Then Exit Sub Application.EnableEvents = False   Call Check_Save(Range("C6")) Application.EnableEvents = True End Sub Function Check_Save(rng As Range) Dim mPath As String Dim fn As String Dim ext As String 'パスの登録 mPath = Application.DefaultFilePath & "\請求書\" '要変更   If Not ThisWorkbook.Name Like rng.Value & "*" Then     fn = mPath & rng.Value     If InStrRev(fn, ".xl") = 0 Then       ext = Mid$(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".xl"))       fn = fn & ext     End If     If Dir(fn) = "" Then       ThisWorkbook.SaveAs fn     Else       MsgBox fn & vbCrLf & "は、すでに存在しています。", vbExclamation       Check_Save = True     End If   End If End Function '------------------------------------------- 'ThisWorkbook モジュール '------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim fn As String Dim ext As String Dim ret As Variant Dim mPath As String  mPath = Application.DefaultFilePath & "\請求書\"  fn = mPath & Worksheets("基本データ入力").Range("C6").Value  If InStrRev(fn, ".xl") = 0 Then     ext = Mid$(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".xl"))     fn = fn & ext   End If    If ThisWorkbook.FullName <> fn Then   Application.DisplayAlerts = False     With Worksheets("基本データ入力")     ret = .Check_Save(.Range("C6"))     Cancel =ret     If ret Then       Application.Goto .Range("A1")      If MsgBox("ファイル名とC6が違います。このまま終了しますか?", vbInformation + vbOKCancel) = vbCancel Then        Cancel = True      End If     End If     End With   Application.DisplayAlerts = True  End If End Sub

john-novi
質問者

お礼

こんにちは。 その後いろいろお教えいただいたマクロコードを研究してみたのですが、私にはちょっと理解するのに無理だということが分かりました。 もしものときにも対応が出来ませんので、私なりにそれから勉強して何とか「C6」のファイル名を取り込むことが出来ました。 「保存」マクロボタンを作り下のマクロを貼り付けて実行すると保存ダイアログが出て「C6」のファイル名が取り込まれます。 Sub test保存 ()  Dim strName As String, fName As Variant   strName = ThisWorkbook.Worksheets(1).Range("C6").Value   If strName = "" Then strName = ThisWorkbook.Name   fName = Application.GetSaveAsFilename(InitialFilename:=strName, fileFilter:="Excel(*.xls), *.xls") If fName <> False Then ActiveWorkbook.SaveAs fName End Sub ですが、これでは上書きを防ぐのは不完全です。 それはこれから勉強してゆきます。 せっかくお教えいただいたのに活用できず申し訳ありませんでした。 本当に初心者の私にも親切にお教えいただき感謝しております。 ありがとうございました。

john-novi
質問者

補足

こんばんは。 早速お聞き入れの上、コードをお知らせいただき恐縮しております。 ファイル名は、手入力ですとこれもうっかり忘れて上書きしてしまう恐れがあります. 数式で「C6」に、おっしゃるようにTEXT関数を使って =IF(C8="","",C12&TEXT(C22,"yy"&"mm")) C8:請求先名 C12:請求先名のニックネーム 例:エービーシー商会→ABC C22:請求年月日 例:2009/9/30→0909 C6:ファイル名 例:ABC0909 となるようにしてあります。そして以降請求年月日を入力するたびにファイル名が変わりますので、このタイミングでファイル名を自動認識するようになれば上書きの危険がなくなります。ここが私にとってミスをなくす重要なポイントになっています。もしマクロが手書き入力を認識するようになっていましたらぜひ自動認識できたらと思います。 それからたびたび申し上げているように私はまったくのマクロ初心者です。お知らせいただいたマクロは結構長いので一つ一つがどのような働きをしているか(大体のことを推測するしか)分かっていませんし、構文もまったく分かっていません。これから順次学んで行きたいと思っておりますので、できる範囲で公開をお願いいたします。 とりあえずお知らせいただいたコードの貼付けも '--------------------------------------------------------- '------------------------------------------- '"基本データ入力シート" '------------------------------------------- 以下を「ツール」→「マクロ」→「Visual Basic Editor」の「Module1」に '------------------------------------------- 'ThisWorkbook モジュール '------------------------------------------- 以下を「ツール」→「マクロ」→「Visual Basic Editor」の「ThisWorkbook」にコピー&ペーストで貼付ければよろしいのでしょうか。 また >ThisWorkbook 側は、行ったり来たりするので、少しややこしいです。 はどうしたらよいのでしょうか。 お手数をおかけしますが具体的にお教えくださるとありがたいです。 >Ctrl + S のショートカットは生きています。もし、この部分なども、上書き保存の監視範囲に入れる場合は、ご相談ください。 あまりショートカットキーは使わないのですが、念のため監視範囲に入れていただくとありがたいです。 本当にありがとうございました。せっかくのマクロコードを有効に使わせて戴きたいと思います。勉強はこれから徐々にして行きたいと思いますのでとりあえず使えるようにしたいので具体的にお教え下さい。 よろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >[.PrintOut Copies:=部数]のコードが黄色く塗られています。 この部分で、VBAのコードがエラーを発生するということは、まず考えられないことです。セキュリティが原因かもしれませんが、こちらでは分かりません。 実行できないのは、想定外で問題で、当面、以下のふたつを試していただくしかありません。 1)新規のブックでも同様になるか、どうか。 2)プリンタのドライバをアップデートして、どうなるか。 ということです。

john-novi
質問者

補足

こんばんは。 いろいろやってみたのですが、私も最初から新規でやり直してどうかという事を考えてやり直したので時間がかかり報告が遅くなりました。 新規のブックでお教えのコードでマクロを実行したら問題無く印刷が出来ました。しかもステップモードにすることなく印刷できました。 どうもありがとうございました。 私は勉強を始めたところのまったくのマクロ初心者ですが、wendy02さんはかなりの上級者とお見受けしました。 そこでもう一ついろいろ調べているのですが分からないことがありお教え願いないでしょうか。 この請求書ブックは新規で発行するときに使い、ほとんどが1回作成してしまえば毎月データが同じですので後は前回保存したファイルを開いて日にちを替えればよい請求がほとんどです。しかしそれを保存する時に前月のデータに上書き保存してしまうミスが結構ありそれを何とか防げないかと考えています。そこで「基本データ入力」シートの「C6」に請求日を入力するとファイル名が自動生成するようにしてあり、そのファイル名を作業中のブックのファイル名に自動で換えられないかと考えているのですがいかがでしょうか。 そうすれば保存し忘れていてもExcel終了時に保存するかどうか聞いて来るので新しいファイル名になっていれば上書き保存することがないと考えています。 もしそんな方法はないよということでしたら、「C6」のデータを貼り付けて新しいファイル名で保存するマクロを作ればよいわけですが、どうしてもその方法が分かりません。 その辺を分かりやすくお教え下さると非常に助かります。 「基本データ入力」シート---ここでデータを入力し「C6」にファイル名を表示、各マクロボタンを置きここで実行する。 ホルダー名「請求書」---ここにデータを保存する。 厚かましいお願いですがよろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >実行すると「コンパイルエラー Sub Endが必要です」のメッセージが出てしまいます。 マクロはほとんど詳しくなかったのですね。 Private Sub CommandButton1_Click() '←コマンドボタンのイベント型マクロ Dim 部数 As Integer 部数 = 1 '印刷部数を指定する ※1 With Worksheets("送付状")  .PrintOut Copies:=部数 End With End Sub これは、コマンドボタンにつけるものでしたのですが、付け替えるなら、 Sub 送付状印刷() '←Subプロシージャ型マクロ Dim 部数 As Integer 部数 = 1 '印刷部数を指定する ※1 With Worksheets("送付状")  .PrintOut Copies:=部数 End With End Sub となります。ただ、最初、通らない可能性がありますが、ステップモード(F8を押しながら進める)を繰り返してみてください。繰り返すと、通るようになりました。 >「アプリケーションは安全でない可能性のあるActiveXコントロールを初期化しようとしています」についてはご指示のマイクロソフトの説明も読みましたが、UFIControls = 1に設定して今後セキュリティ上などで大丈夫なのでしょうか。 これについては、一般論として安全性については、お約束できません。しかし、だからといって、本来、メッセージが出たとしても、ActiveX コントロールなどの危険性を防ぐ手立てなどはないような気がします。選択肢は、「はい」しかありませんから。 本来、危険なものというのは、コントロールの中でも「未知」のものなのです。EXCELでは、数百種類のActiveX コントロールを選ぶことが可能ですが、分からないものも数多く存在します。分かっているものしか選ばない、ということでしかありません。 >ここも「はい」がよろしいのでしょうか。 使うためには、おっしゃるとおり「はい」しかないのです。「いいえ」を押したら、まったくバーコードが変化していないはずですし、更新されないだけでなく、バーコードは、使えないはずです。LinkedCell で、変更ができないはずです。

john-novi
質問者

補足

こんにちは。 マクロはまったくの初心者で勉強を始めたところです。お手数をおかけしますがよろしくお願いいたします。 ご指示のSubプロシージャ型マクロコードをコピー&ペーストしステップモードで実行してみましたが同じエラーでかなり繰り返しましたがだめでした。 ちなみにバーコードコントロールも削除してみましたが今回はそれでもだめでした。 マクロコードは Sub 送付状印刷() Dim 部数 As Integer 部数 = 1 '印刷部数を指定する ※1 With Worksheets("送付状") .PrintOut Copies:=部数 End With End Sub の[.PrintOut Copies:=部数]のコードが黄色く塗られています。 >使うためには、おっしゃるとおり「はい」しかないのです。「いいえ」を押したら、まったくバーコードが変化していないはずですし、更新されないだけでなく、バーコードは、使えないはずです。LinkedCell で、変更ができないはずです。 以前「はい」を押したら削除されてしまったことがあるのでむやみやたらに「はい」を押さないようにしてきたそのレベルだと思ってください。おっしゃる通りでリンクがうまくいかなくていろいろやってみたところです。その原因が分かりました。 よろしくご教授お願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは、 私は、最初に確認するべきでしたが、「バーコードコントロール」は、  「Microsoft バーコード・コントロール 9.0」 でしょうか? 郵便番号バーコードを出力できるのでしょうか。郵便番号バーコードは、単に縦線が並んでいるものではないようですが。

john-novi
質問者

補足

こんにちは。 そうです、「Microsoft バーコード・コントロール 9.0」の「10‐カスタマバーコード」を使って郵便番号バーコードを[送付状]に印刷しようとしています。[基本データ入力]シートにリンクしそこから郵便番号をバーコードに替えて印刷します。 郵便番号バーコードは一応出力(正しいかどうか郵便局には確認していませんが)しています。このバーコードは郵便番号用の独特のものでしょうね。他では見たことがありませんので。 よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >バーコードコントロールを設定してからマクロを組んだ印刷ボタンを押すと バージョンにもよると思いますが、今、Excel 2003 で、試してみましたが、特に問題は発生しません。マクロ自体の問題ではないでしょうか?それは、コードを見てみないと分かりません。 「「このアプリケーションは安全でない可能性のあるActiveXコントロールを初期化しよう……」 これは、 http://support.microsoft.com/kb/827742/ja で、レジストリエディタか、グループポリシーで、設定を換えてあげるのがよいかと思います。 マクロでも可能ですが、それは、セキュリティの問題で、申し訳ありませんが、自主規制しています。インターネット検索しても、日本語に関しては出てこないと思います。

john-novi
質問者

補足

こんばんは。 どうもありがとうございます。 私もExcel2003を使っています。 バーコードは、郵便番号出力用のカスタマバーコードです。 私はまだ初心者なもので請求書発行には送付状と必要な請求書枚数分シートを作っています。「sheet1」に[基本データ入力(シート名)](主にあて先を入力するためです。ここに印刷と保存マクロを組んでいます。)、「sheet2」には[送付状(シート名)](ここにバーコードコントロールを設定して発送先住所を印刷し窓空き封筒に入れた時あて先住所を表示するようにしています。)「sheet3,・・・・・」は[請求書1、2、3、・・・・10(シート名)](請求データはこの各sheetで入力)としています。印刷マクロはそれぞれのsheetごとをボタンを作って印刷するように設定しています。本当は入力あった請求書をマクロを組んで印刷したいのですがまだそのレベルに達していないのでこれから勉強します。 送付状のコードは Sub 送付状印刷() 部数 = 1 '印刷部数を指定する ※1 Sheets("送付状").PrintOut Copies:=1 '指定部数を印刷する ※2 End Sub この「送付状印刷」ボタンで印刷します。 「このアプリケーションは安全でない可能性のあるActiveXコントロールを初期化しよう……」 について設定はこれからやってみます。 説明不足がありましたらおっしゃってください。 マクロにはどこに問題があるかよろしくお教え下さい。

関連するQ&A