いぶろぐ part2

日々創作

一定期間更新がないため広告を表示しています



  • Category > -
  • Written by > スポンサードリンク


 会社の書類を管理印刷するマクロを作っていて今ぶつかっている壁。
エクセルでバーコードが正しく印刷されない!!!

1回目は正しく印刷されるものの、2回目以降はバーコードの値が更新されているにもかかわらず、印刷結果は1回目のバーコードとまったく同じものが印刷されてしまう・・・。シートを見てみると、画面上では正しく更新されているのに、印刷内容は1回目の値・・。なぜ?!

他のサイトでバーコードコントロール(※このコントロール自体はACCESSに付属のもの)の表示や更新の時に一度非表示にしてから・・・とか書いてあってので、いろいろ試してみたがだめだった。

以下、試してみたもの。

1:バーコードコントロールのLinkedCellの値を更新
2:.Shapes("BarCodeCtrl1").Visible = False
3:.Shapes("BarCodeCtrl1").Visible = True

まずこれはダメだった。
次。

1:.Shapes("BarCodeCtrl1").Visible = False
2:バーコードコントロールのLinkedCellの値を更新
3:.Shapes("BarCodeCtrl1").Visible = True

これもダメだった・・・・。

ここで思い浮かんだのが、マクロの先頭に書いたこの命令。
Application.ScreenUpdating = False
これか!!!

ということで試してみた。

1:Application.ScreenUpdating = True
2:.Shapes("BarCodeCtrl1").Visible = False
3:バーコードコントロールのLinkedCellの値を更新
4:.Shapes("BarCodeCtrl1").Visible = True
5:Application.ScreenUpdating = False

きた!
画面上できちんと更新されたじゃん!

と思って印刷結果を見てみたら・・・・3枚印刷してどれもバーコードは一緒・・・。

これはどうしたものか・・。
とりあえず今日戻ってきてからまた考えます。




JUGEMテーマ:Office VBA

引き続きVBAマクロを使ったユーザー定義関数なのだけれど、英数字と日本語が混在した文字列のフォーマットを統一するための関数を作ってみた。
英数字は半角、特にアルファベットは大文字に、そして半角カタカナも全角に統一する関数。

いろいろな商品や部材を管理する際に、取引先の請求書などからそのまま入力すると、取引先によってカナが半角だったり全角だったり、またデータ形式で受け取った場合の英数字もフォントによってはパッと見で半角なのか全角なのかがわからなかったりもする。
なんだかんだでデータの一致を図ったり、ソートの順番をきれいにしたいときなどに有効だと思う。
うちの会社では特に、データ入力をする人によって英数字が半角だったり全角だったり、一部が小文字だったりという問題を回避するのに役立つ・・・・はず。
前回までと同様、標準モジュールに入れて使ってもらえばいいかと。





JUGEMテーマ:Office VBA


前回の記事で無視した部分を逆に拾い出したいときに使用するマクロ。
VBAのユーザー関数なので標準モジュールに入れて使ってもらうのがいいと思う。



JUGEMテーマ:Office VBA

あるテキストから括弧で囲まれた部分を除いて取得するマクロを考えてみた。
もとはデータのスリム化というか、ある項目とそれぞれの単位を同じセルに格納できないものかと考えたのがきっかけ。
僕は会社での工事項目とその単位を
配管延長[m]
というような形で格納することにした。
ここで括弧の種類は視覚的、分類的にも1種類では足りないと思ったので、括弧の種類は自分で指定できるようにした。




またもやEXCELのVBAマクロで奮闘中。
EXCELのVBAでユーザーフォームを操作しているときにはとっても便利な命令があって、自分でもよく使うのが

Private Sub ○○_Change()


End Sub

という命令。
テキストボックスやらコンボボックスやらなんでも変化した時点ですぐに命令を実行してくれる賢いやつ。
でもこの時だけはおとなしくしてくれ、という場合がある。



現場仕事から帰ってきて、エクセルのVBAをいじっていてエラーが出て悩んだ。
出てきたエラーは以下のもの。

excel VBA コンパイルエラー

「このメンバ識別子は既にオブジェクト モジュールの中に存在しています。」

昔作ったマクロを今年バージョンにするべく、現在一から作り直しているのだけれど、試験しようとしてまずぶつかった壁。
いくつかのモジュールで使いまわしたい変数があったので、変数をPublic宣言したときに出てきたエラー。
ようするに名前がかぶってますよ、ってことなのだろう。
エラーを引き起こした変数名を変えてみたら無事解決した。
とは言え、変数名を変えると、他のモジュールで不具合が出るかもしれないので「Ctrl」+「F」でその変数名をカレントプロジェクト内すべてで検索してみた。必要があれば置換してもいい。
けれど、全く検索で怪しいもの(かぶって宣言した場所)がヒットしない。

少し頭を抱えたけれど、原因がわかった。

フォームのテキストボックスに同じ名前をつけていたらしい。
こちらのほうがあまり何度もモジュール内で使わないので、テキストボックスにつけた名前を変更。

フォーム中に出てくるテキストボックスなどの数が尋常じゃないので、名前の宣言には注意しよう。



単純に計算結果など、代入される数値が0だったときに、その0をセルに表示させないテクニックというのは簡単なテクニック。
けれどその簡単なテクニックでも、標準で適用されているわけではないので、印刷する書類などの書式設定には気をつける必要がある。

特に僕が仕事で使っている見積書などには、一つのセルに代入した文字列をそのまま他のセルで表示される状況が多いのだけれど、不要なデータを入力しなかったときに、そのセルを参照するセルに0が表示されて困ったことがある。

今回はその解決方法+α



EXCEL VBA TIPS
ユーザーフォームに作ったマルチページのタブをVBAで切り替える。

今回作っていた伝票入力フォームを改造していて途中で困ったときにやっと調べられた操作。

マルチページを作ったときに、そのページ(タブ)を必要に応じて切り替えたかった。
状況としては、あるテキストボックスに入力をした後に、フォーカスを移したかったのだけれど、そのときに肝心のフォーカスを移されるテキストボックスがあるページが開いていないとエラーになってしまう。それを避けるために、フォーカスを移すときに同時にページも切り替える必要があるというわけ。

で、今回使用したソースは下記の通り。

Private Sub メーカー名に戻る_Click()
MultiPage1.SetFocus
MultiPage1.Value = 0
メーカー名.SetFocus
End Sub


excle tips マルチページ1
メーカー名というのは、上図の「メーカー名」と書いてある部分のすぐ下のテキストボックス。

これはソースにしてもめちゃくちゃ単純なことなんだけれど、マルチページの名前や設定の仕方がわからなかった。
ここで指定している「MultiPage1」というのは下図を参照のこと。

excel tips マルチページ2
この左上の赤丸の中にプロパティが表示されている。

さて、このプロパティの表示の仕方なんだけれど、これが単純なことなのに、全くわからなかった。
で、結局その表示方法とは、右下の赤丸に囲まれている部分がこのマルチページの外周になるわけだけれど、この外周(輪郭線)をクリックするだけ。
マルチページの中の何もない部分をクリックすると、先の写真のようにマルチページの中のタブ(ひとつのページ)にフォーカスが行って、そのページのプロパティが表示される仕組み。

もちろん、マルチページのプロパティを表示した状態からなら、簡単にオブジェクト名を変更することもできる。

細かい違いだけれど、マルチページ全体を選んでいるときと、単独のページだけを選んでいるときでは、輪郭線の種類が微妙に変わっている。

また、以前のTIPSの時の様に、関連記事や、もっといい方法があるよという方はコメント、トラックバック大歓迎です。

いぶろぐ 備忘録 EXCEL TIPS 全記事



今日から仕事上のあれやこれの備忘録をつけることにした。

いくらやっても覚えられないのに備忘録というのもどうかと思うけれど、今後でてくるTipsのために。とは言え、これはあくまで自分用なので、他の人に役立つかはわからない。レベル的にも初歩の初歩から、上級(なのでは?)まで幅広く、しかも段階も何もないと思うけれど・・・・。

EXCEL TIPS
セルに入力された日付を曜日に直して表示する。

セルに入力された日付から曜日を取得するには関数などを使えばいいけれど、単純に表示、および印刷用としてだけならば次の手順で簡単に設定することができる。

日付の入ったセルを選択して、右クリックから「セルの書式設定」もしくは「書式」メニューから「セル」、はたまた右クリックして「F」キー。
「表示形式」タブをクリックして、ユーザー定義を選び、「種類」の下の欄に[aaa]と入力。
これは半角で。
あらかじめセルに日付を入力しておくと「サンプル」の欄に表示されるからわかりやすい。
このように a を3個で「日」「月」「火」・・・のような漢字1文字表示。
「種類」を「aaaa」と a を4個にした場合は「日曜日」「月曜日」「火曜日」・・・・と、漢字3文字表示になる。

こんなに単純なことなのに、表示形式の「日付」の部分にないのは不親切だと思う。
いっつも設定するときに忘れちゃうんだから。

この曜日表示の備忘録にトラックバックをいただいた記事では更なる発見が!(笑)

曜日表示まで2セルを使う必要ないんだよね。
種類の欄に m"月"d"日("aaa")" でいいんじゃない!
トラックバック先にはわかりやすいキャプチャー画像もあるので、ぜひ参考に♪




東京・埼玉でオール電化工事を頼むなら
このpageのtopへ▲

Popular Threads

Powered by Disqus
totaltodayyesterday

2018

      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>
RSS & Recommends

アスクル
Add to google
iriver eストア(Cover Story Basic)
マウスコンピューター/G-Tune
AdobeWebPremiumCS5
 iTunes Store(Japan)
 iTunes Store(Japan)
いぶろぐも使っている JUGEM PLUS
スーパーバッド 童貞ウォーズ
DIRECTORS LABEL ジョナサン・グレイザー BEST SELECTION
ROUTES

Recent Comment

Recent Trackback

***
デザイナーズ・フォントセレクト1000
フリーフォントガイドブックFOR WINDOWS Vol.2 (2) (I/O BOOKS)

スカウター : いぶろぐ part2
このpageのtopへ▲