【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

ExcelのVBAを使って、バーコード、下記のようなデータを入れたら、
画面上にバーコードを表示、と同時に印刷をして、バーコードリーダーで
読み取ることを可能にしたいと考えております。

データ: 「123456789012」 12桁の数値

セルに12桁の数値を入れて、適当なボタンを押すと、数値の入ったセルの下方に
バーコード表示させる、といったイメージです。

PCには、Microsoft バーコードコントロール 14.0が入っておりました。
これを選択すると、マウスが+になり、シート上でクリックすると
確かにバーコードが現れるのですが、不明なデータです。
どこをどのように変えれば、データが変わるのかも、よくわかりません。

結局、「Microsoft バーコードコントロール 14.0」の使い方がわかっていないのです。
宜しく、ご教示願います。

質問者からの補足コメント

  • ありがとうございます。
    スクリプトを試してみました。
    With Cells(2, 1)
      Set o = ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
        Link:=False, DisplayAsIcon:=False, _
        Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Object
    End With
    実行後、エラー表示が出ます。「中断モードでは、入力できません」。
    終了させて、デザインモードで見てみると、確かにCell(2,1)にはObjectが
    生成されています。透明のまま。
    マウスで大きさを変えると、バーコードが描写されました。

    現状、先に進めることができない状態です。
    サジェスチョンをお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/02/21 18:27

A 回答 (6件)

Sub macro1()


Dim o As OLEObject
  With Cells(2, 1)
    Set o = ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
          Link:=False, DisplayAsIcon:=False, _
          Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
    o.LinkedCell = .Offset(-1).Address
  End With
End Sub
    • good
    • 5
この回答へのお礼

ありがとうございます。
うまくバーコードの表示ができるようになりました。感謝です。
うまくいかなかった原因
1.ステップ動作は、ActiveXcontrolの挿入には適さないことを理解していなかった
2.Dim o As Object ではなく、Dim o As OLEObjectであるべき
3.入力する数値の桁数が足りなかった。
  デフォルトのJan-13は、12桁、13桁でないといけない。
  試しに入力していたのは、3,4桁の数値の為、バーコード表示がなされ
  なかったもの
調査の結果、code-128であれば英数でも、任意長データでもバーコード表示ができることがわかりました。
Jan 13は、数値、かつ12桁、13桁のみのデータを対象にしていることを
全く理解しておりませんでした。 ということで、かなり、ご迷惑をお掛けしました。
でも、ご親切に対応していただき、感謝します。

お礼日時:2015/02/24 23:19

#1-4です。



> 実行時エラー438
> オブジェクトはこのプロパティまたはメソッドをサポートしていませんでした。

先のエラーとは全く別の原因です。
最初にも書きましたが、参照設定してください。
 VBE画面のメニュー[ツール]→[参照設定]
 →[参照可能なライブラリ]のリストの中から
 □ Microsoft Access BarCode Control 14.0
 にチェックを入れて[OK]ボタンで確定してください。
続けて
Dim o As Object

Dim o As BARCODELib.BarCodeCtrl
に書換えて下さい。
環境によっては参照設定してオブジェクトを明示する必要があるようです。

> フォームコントロールボタンにマクロを登録して、実行させました。
何故'ボタンにマクロを登録'なのですか?
すみません、なんか#2で私が書いたことを外して、そしてまた外して、
問題点を相対的で曖昧な方向に持っていくような対話の仕方では、
何処にも定点を置くことが出来ず、問題点を絞るのに余計な労力が掛かります。
誤解が誤解を生むような流れに陥り、サポートするのも難しいです。

> (Gooの使い方)
すみません、私は動画を上げたことないので解りません。

以上です。それでは失礼します。
    • good
    • 1

#1-3です。

#3お礼欄への返答です。

> 単純にF8でステップ動作だけです。
ぃゃ、[F8]などのステップ実行を含めた=[デバッグ]モード=[中断モード]
では、コントロールの挿入は最後まで実行されません。そういう仕様です。
それは、バーコードコントロールに限らず、Excelのバージョンにもよらず、
ActiveXコントロールの挿入処理に共通する仕様である
という話をしています。
説明が解り難いようで申し訳ありませんが、
#2の内容を今一度確認してみて貰えませんか?
私が書いているのは、例えば[F8]ではなくて[F5]な訳で、
とにもかくにも、ありのままそのまますべてを実行してみてください。
何が何でもステップ実行でコントロールの挿入をしたいというお話なら、
それはそもそも無理としか答えようがありませんので。

> 何が悪さをしているのか、分からない状態です。
ここまでの補足情報を見る限りでは、何も"悪さ"しているようにはみえません。

もし、ステップ実行でではなく、普通にマクロを実行しているのに、
それでも同様の状況に陥るならば、
#1の記述の各行(各ブロック)について、
一次的にコメントブロックしてからテストするなどして、
どの行が"悪さ"しているのかを特定してみて下さい。

以上です。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。
フォームコントロールボタンにマクロを登録して、実行させました。
エラーメッセージは異なりますが、
実行時エラー438
オブジェクトはこのプロパティまたはメソッドをサポートしていません
でした。

パワポにこの過程を克明にスクリーンショットを取ってまとめました。
どのようにして、送付すればよいのか、分かりません(Gooの使い方)

Gooでの返答の仕方も、併せて、ご教示願えるとありがたいです。

お礼日時:2015/02/22 22:53

#1,2です。

#2に追加です。

もしかして、と思ったのですが、
用語として[中断モード]と[デザインモード]が同じものと認識されているようでしたら、
まったく別物です。
そんなことわかっている、ということでしたら以下は読む必要ありません。
もしかして、ですので。

[デザインモード]はコントロールの各種設定を編集する際に、
コントロールのクリックイベントを抑止したり、一時的に表示を切り替えて
手作業でのデザイン変更を可能にする為のもので、
VBE画面では、、[Sub/ユーザーフォームの実行]ボタン[中断]ボタン[リセット]ボタンの右
にある、三角定規みたいなアイコン[デザインモード]ボタンでON/OFFを切り替えます。
今回課題のバーコードコントロールの場合は、
[デザインモード]中にデザイン通りのバーコードコントロールを表示させることが出来ないので、
繰り返し三角定規みたいなアイコンを凸凹させて
[デザインモード]のON/OFFを切り替える必要があります。
既に述べた通り[中断モード]では、コントロール追加処理がエラー終了になりますし、
私が#1で書いていた内容には[中断モード]に関する記述は一切ありません。
でも、[中断モード]では実行しないように、と一言書いておいてもよかったですね。
以上です。
    • good
    • 0
この回答へのお礼

誠意あるご回答ありがとうございます。
デザインモード、了解しております。
単純にF8でステップ動作だけです。
環境はWindows8.1+Excel2010です。
真新しいBookでやっても、挙動は同じでした。
Win7+Excel2010でも、同じ。
XP+Excel2003でも、同じ(14ではなしに9でしたが)。
何が悪さをしているのか、分からない状態です。

お礼日時:2015/02/22 18:08

#1です、補足欄拝見しました。



普通にすべて一発で実行すれば問題なく動作する筈なのですが、、、。

> 実行後、エラー表示が出ます。「中断モードでは、入力できません」。
そのエラー表示の意味は、
VBEコードペインから、デバッグモードで(中断しながら)実行する場合
は、エラーになりますよ、という意味で、バーコードコントロールに限らず、
すべてのActiveXコントロール追加コマンドに共通の仕様です。

#1で提示したマクロについては、
VBE画面からの実行なら、[Macro1]にカーソルを当てて、
  [F5]キー、または、[Sub/ユーザーフォームの実行]ボタン
  を、一押し、
Excel画面からの実行なら、
  [Alt + F8]キーに続けて、[Macro1]を選択し、[実行]ボタン
  という手順で、
要するに、実行中は手出しをせず、素直に最後までマクロを実行させること、
です。
無論、途中にブレークポイントやStopステートメント等の記述も
挟むことは出来ません。

> 終了させて、デザインモードで見てみると、確かにCell(2,1)にはObjectが
> 生成されています。透明のまま。
> マウスで大きさを変えると、バーコードが描写されました。
#1で書いた私の記述は、
コメントブロックした行(これはお好みの設定)を除いて、
それ以外すべて最後まで実行しないと、
バーコードコントロールは正しく設定されません。
処理を飛ばすか、途中で終了すれば、'透明のまま'になることがあっても、
それは、そういうものだ、としか言えません。

とにもかくにも、一度、ありのままのマクロをただ普通に実行してみてください。
動作確認ですから、基本すべて、デフォルトのまま、ありのまま、
例えばブックもシートも新しく作成したまま、という定点を作って、
その次に、実際に使用する環境に適応するか、という順番で確認してください。

> 現状、先に進めることができない状態です。
以上の返答を踏まえても尚お困りのことがあれば、相談してください。
とはいえ、「何をするか」は、こちらから示唆できる話ではないですから、
まずバーコードコントロールの機能を理解して、
バーコードコントロールを使って何が出来るのか理解出来ないと、
バーコードコントロールを使って何をするか決めることも出来ないと思います。
そういう意味では、#1に書いたように、まず手を動かして各プロパティへの
理解を深めることが肝要です。
#1には殆どのプロパティの扱い方を示したつもりです。
コメントブロックをすべて外して実行してみるのも、
参考になるのではないでしょうか。

補足への返答、以上です。
    • good
    • 0

こんにちは。



何年か前は仕事でも使っていた時もあったのですが、
もう忘れていますし、前とは違うようですし、、、
なので、特に自信があるわけでもないですが。

バーコードコントロールを挿入したら、
そのまま、デザインモード(三角定規アイコンが凹んでる状態で)のまま、
バーコードコントロールを右クリックして、
添付画像にある2種類のプロパティページで設定を指定します。
大抵のことは、日本語環境でインストールしただけでの既定の設定で、
(例えばJAN-12とか)そのままいけるのですが、

具体的なコードを指定してバーコードを表示させるには、
 [プロパティ]→[LinkedCell] の項目に、
参照したい12桁の数値が入力されたセル への参照
(例えば、「A1」のように)を入力します。

> バーコードリーダーで読み取る
のでしたら、
 [Microsoft バーコードコントロール 14.0 オブジェクト]→[プロパティ]
 →表示されたダイアログの[サブ スタイル] の項目で
 [3 - Pos Case Code] を選択しておくと
読み取りがし易いです。

その他にどんな設定があるのかについては、
各プロパティページと以下に示すVBAコードでの説明とを
照らし合わせて把握できるようにしてみて下さい。

通常は、バーコードコントロールを配置するセル
の大きさを予め、バーコードのサイズで用意して、
ぴったり収めるようにするものですから、下準備、というか、
入力、設定、印刷までの流れを踏まえて、
まずは、シートのザインを済ませておきましょう。

> セルに12桁の数値を入れて、適当なボタンを押すと、数値の入ったセルの下方に
> バーコード表示させる、といったイメージです。
下に示すマクロは、コントロールの追加と基本設定に関する、
プロペティ・メソッドを紹介するサンプルです。
これを理解して貰えれば、応用は可能ですが、
もしも、具体的なマクロが欲しいということでしたら、
ボタンを押した時に
  どこのセルに対応したコントロールを挿入するか
  どのセルに合わせて配置するか、
等の最低限の情報がないと何も書けません。
例えば、
  A1: 品名
  A2: コード
  A3: バーコードコントロール
 のように3行1列を1品目として、
 A1:H24 のセル範囲に、縦横8*8=64品目をレイアウト。
 ActiveXコントロールのCommandButton1をクリックした時のマクロで、
  上記64点のコードに対応したバーコードコントロールを
  各コードのセルのひとつ下のセルに挿入したい
 その際、コードへのリンクを設定し、サブスタイルをPOSコードにしたい
みたいな具体的な話があれば、着手します。
でも、後々のメンテを考えたら、ご自分で覚えながら書くのがベターです。

まずは手を動かして、
各プロパティを自分で掌握して設定出来るように慣れてください。
失敗したら消去して、を繰り返したとしても、
何かのトラブルの原因になることはないですから、、、。

> バーコードが現れるのですが、不明なデータです。
デフォルトでダミーのデータに基づいたバーコードを表示していますが、
リンクを設定してから、デザインモードを終了したタイミングで、
リンク先のデータが反映されるようになります。
また、何だか適当に弄っているうちに、
 [Microsoft バーコードコントロール 14.0 オブジェクト]→[プロパティ]
 →[データの確認] の項目
または
 [プロパティ]→[Validation] の項目
に 0 以外が設定されて、バーコードが表示されなくなる場合には、
一旦、設定を 0 に戻してデザインモードを終了すれば、
正しく表示されるのを確認してから、もう一度設定し直すようにすれば
解り易いと思います。
要は、デザインモードでは、実際の表示を確認できないので、
何度もデザインモードを行ったり来たりする必要があるってことで、
そのことさえ解ってしまえば(多少面倒ですが)
今「不明」と感じていることも明るくなるのではないでしょうか。

尚、VBAを書く時は、
VBEの[ツール]→[参照設定]に
  Microsoft Access BarCode Control 14.0
を追加しておいて、
  Dim objBarCtrl As BARCODELib.BarCodeCtrl
のように宣言しておいた方が能率的に開発できると思います。

以下、サンプルです。

Sub Macro1()
Dim o As Object

  With Cells(2, 1) ' セルを指定して
    ' ' セルの位置・サイズに合わせてバーコードコントロールを追加する例
    Set o = ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
          Link:=False, DisplayAsIcon:=False, _
          Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Object
  End With

  o.Style = 2 ' バーコードの種類、日本の12桁+1は、2を指定。8桁なら1
  o.SubStyle = 3 ' 標準が1、POSコードが3
  o.LinkedCell = "A1" ' セルへのリンク 普通にセル参照文字列を指定
'  o.BackColor = RGB(255, 255, 204)  ' 背景色 普通にRGBを指定
'  o.ForeColor = RGB(0, 0, 80)  ' バーの色 普通にRGBを指定
'  o.LineWeight = 3 ' 線の太さ 0 - 7 の8段階(標準は3)
'  o.ShowData = 1 ' 数字を 1表示する|0表示しない
'  o.Direction = 0  ' コントロールの向きを回転 0 - 3 時計廻りに90°ずつ
  Debug.Print o.Value ' 12桁分だけの値を取得(13桁めは普通、計算で求める)
  o.Verb ' よく解らないけど、これで描画等の動作を確定?
End Sub
「Excelの Microsoft バーコ」の回答画像1
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A