ホームへ戻る
      
     
    
 
記事一覧
写真編集モード【PSE
2009.11.08
パソコンクリーニング
【セキュリティ】

2009.11.13
RGBとは【PSE】
2009.11.14 】
16進数【基礎知識】
2009.11.20 】
ハードコピー【基礎知識】
2009.11.21 】
半角の数字しか使えないようにするU【VBA】
【 2009.11.27 】
イベントとは【VBA】
2009.11.28 】
カレンダー&アーカイブズ

   

2009年11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
カレンダーの上にあるセレクトボックスを用いてアーカイブ(過去のデータ)を表示。
赤字
の日はクラスやイベントのある日。
その中で下線のあるものは記事があり、それへのリンク。
同日に複数の記事がある場合は先頭の記事に飛ぶ。
祝祭日はその日の背景に日の丸が表示されるがクラスやイベントがない場合、数字は黒字。

 
Record
 
 2009.11.08 ()
中級者クラス
    19:30-21:30
 
 於:ふれあい公園
    ミーティングルーム
 
 2009.11.13()
中級者クラス
    19:30-21:30
 
 於:生涯学習センター
 
 2009.11.14()
初級者クラス
    19:30-21:30
 
 於:生涯学習センター
 
 2009.11.20()
中級者クラス
    19:30-21:30
 
 於:生涯学習センター
 
 2009.11.21()
初級者クラス
    19:30-21:30
 
 於:生涯学習センター
 
 2009.11.27()
中級者クラス
    19:30-21:30
 
 於:生涯学習センター
 
 2009.11.28()
初級者クラス
    19:30-21:30
 
 於:生涯学習センター
 

 

RecommendationLinks 

 

 
【交響楽(シンフォニー)】
さだまさしさんの懐かしの一曲。
この歌の歌詞(二番)には

♪いまから思えば
 あなたがワーグナーの
 シンフォニーを聴き始めたのが
 二人の別れてゆく兆(しるし)に
 なった

 何故ならそれから
 あなたは次第に
 飾ることを覚えたから
 確かに美しくなったけれど

 見栄えのしない
 おもちゃに飽きた
 あなたがいけない訳じゃない

 新しい風にその身をまかせ
 子供が大人になっただけ

 悔やんではいないよ
 想いはつのっても
 そうさ昔は昔♪

と、さえないが優しい男が、彼女に飽きられ、捨て去られる悲哀がよくあらわれている。

この歌を聴く度に考えることがある。
日本人も確かに戦後、高度成長により、世界でも有数の経済大国になり、豊かになった。
しかし、アメリカナイズするにつけ、この歌の女性のように、他人に対する優しさをなくし、結局、傷つけあって生きている。
日本人が優しかった時代、「そうさ昔は昔」。

さださんの歌はグレープ時代から初期のソロアルバム「帰去来」くらいまでが好きでよく聴いていた。
当初は、男が女目線での歌を歌っているということから、むしろ嫌いだったのだが、いつしかその繊細さに惹きこまれていた。
今ももちろん、さださんのファンだが、どちらかというと、最近の歌は聴いたことがなく、歌よりはトークや人柄のファン。
(Yukio)
 
 
    
 
 
 
 
 
 
 
 
 
 
 
  アーカイブ [2009年11月分]
 
200911月8日(日) 

写真編集モード【PSE】
 
このところ、サークルでは年賀状作りを中心におこなっています。
10月中は
PHOTOSHOP ELEMENTS(以降PSEと表記)の全体像を知っていただくために、インストラクタが一方的にPSEの加工操作をデモしながら説明してきましたが、11月に入り官製年賀はがきも発売され始めたので、今後1ケ月は各自の好みの賀状をつくることを通して、画像処理を実践してもらう予定です。

第1回目の今回は最初の一歩、起動から作業へ入るまでの操作を説明します。
この例ではPSE7.0の画面です。他のバージョンでは見た目や操作が異なります。

 【デスクトップアイコン】
 
セットアップ時にデスクトップ上に作られたPSEのアイコンをクリックしてください。
次のような選択ボックスが現われるので通常は「編集」をクリックします。
 
 
下のような画面が現われます。これを「写真編集モード」画面といいます。
 

「写真編集モード」画面の「ファイル」メニューをクリックすると上のようなポップアップメニューが開きます。(上の画像では「新規」メニューのポイントによるサブメニューも表示されていますが、最初は左側部分だけがまずポップアップされます。)
作業を行うには、特別な処理をする場合を除き、大きく次のいずれかを選ぶことになります。

@新規(白紙ファイル)
A開く


【@新規(白紙ファイル)】

まず「新規(白紙ファイル)」は、一から画像を作成していくときに選びます。
「新規(白紙ファイル)」メニューをクリックすると次のボックスが開きます。
このボックスの設定を説明していきましょう。

「ファイル名」は画像処理終了後のファイル保存時に名づけることができますが、この時点でつけておくこともできます。
プリセットはそれ以降の設定をまとめて設定するときに使うテンプレート機能です。
ここを変更することで、「幅」、「高さ」など、それ以降の設定値が自動的に組み込まれます。
例えばA4判のポスターを作りたい場合、「プリセット」で「日本標準用紙」を選び、「サイズ」を「A4」にするとA4判用紙の大きさである「幅」→「210mm」、「高さ」→「297mm」に自動的に設定されます。
「プリセット」の設定の一つ「カスタム」では、自由に画像の「幅」・「高さ」、さらにそれ以降の各種設定を変更することができます。
「幅」、「高さ」はA4判用紙設定時には「mm」でしたが、上の画像のように「カスタム」では「pixel」になっていることがあります。その他にも「cm」や「point」など、さまざまな単位が存在するので、便利な反面、慣れないと間違えたり、混乱する恐れがあります。お気をつけください。
なお、環境設定で、標準設定を登録しておくことができます。これにより、起動時にはその設定で開かれます。もちろん、単位のセレクトボックスでいつでも変更することができます。(単位を変えると数値もそれにあわせて変更されます。)
「解像度」は基本的には数値が高いほど綺麗な画像になりますが、既存の画像を貼り付けた場合などには元の画像より綺麗になることはありません。それでも、ファイルサイズは基本的に大きくなります。
通常、WEB掲示用の画像なら「144pixel/inch」、印刷用の画像なら「240pixel/inch」以上にするとよいでしょう。あまり大きくし過ぎると処理に時間がかかり過ぎたり、処理できなくなることもあるのでパソコンの能力にあわせて設定してください。
「カラーモード」は特別な場合を除き「RGBカラー」にしてください。それ以外のモードではカラー画像は作れません。
「カンバスカラー」は「透明」、「白」、「背景色」のいずれかから選びます。「gif」、「png」画像をつくるときのみ透過画像を作れます。そのときにはあらかじめ「透明」を選ぶといいでしょう。(加工時に透過させることも可能です。)
作業エリアが下のように灰色と白(標準)の市松模様になっているときは、その部分が透過していることを示します。

それ以外のときには「白」、もしくは「背景色」を選びます。「背景色」を選ぶと、現在、設定されている背景色が適用されます。

背景色はツールボックス(左図)で確認・設定できます。
左図のような場合、白が描画色(鉛筆ツールなどの現在の色)、えび茶色が背景色です。
この背景色を変更してから、新規に「カンバスカラー」→「背景色」を選択して開くと、背景に現在の背景色が適用されます。
変更時は各領域をクリックすると色選択ボックスが開きます。

次の例で、画像は通常、オブジェクト(この場合、時計)に背景がなくても、下の「背景のない普通の画像」のように周りは白く塗りつぶされます。
これを「gif」画像など、透過することのできる画像で作成するときには、見かけ上、背景のない時計だけをくりぬいた画像として保存することができます。
「背景を透過した画像」では時計の周りに市松模様が現われていますが、この部分が透過していることを示しています。
別背景の前にこれら二通りの画像を置くと下のように、「背景のない普通の画像」は白く塗りつぶされた部分によって背景が隠されます。一方、「背景を透過した画像」では市松模様の部分が透過され背景が時計の周囲にまで見えるようになります。

         
   
  背景のない普通の画像 背景を透過した画像  
   
   
  別背景の前に置いた
背景のない普通の画像
別背景の前に置いた
背景を透過した画像
 
         


※コンピュータの画像は透過画像も含め、基本的にすべて四角形で保存されます。
 

【A開く】

既に存在する画像を加工したいときには「ファイルメニュー」の「開く」をクリックします。
「開く」ダイアログボックスが表示されますので、自分の開きたいファイルをクリックします。
ダイアログボックス内の「ファイルの種類」では、該当のファイルの拡張子を選ばなければなりませんが、「すべてのファイル」を選んでおけば、開けるすべての画像ファイルが表示されます。

開いたフォルダ内に画像があればいいですが、なければフォルダを移動して該当のファイルを開いてください。意味がわからなければ「画像ファイルの種類【DOS】」をご一読ください。
なお、「開く」で開く画像ファイルは、既に各種の設定を終えているので、「新規」で開いたときのような多くの設定は必要ありませんが、唯一、モードを「RGBカラー」に変更することを忘れないでください。でないと、画像ファイルは開けても、さまざまな機能が使えません。
変更は下図のとおり、「イメージ」メニュー→「モード」へ進み、「RGBカラー」をクリックします。

詳細はクラスで説明します。


※わかりにくいようであれば説明しますのでクラス開催日にお申し出ください。

 


Posted by Yukio 記事 No.0000013 



200911月13日(金) 

パソコンクリーニング【セキュリティ】
 
総務省・経済産業省の連携プロジェクトとして、Cyber Clean Centerというものが設立されました。目的はインターネット上で感染拡大している不正プログラムの駆除を促すことです。
この不正プログラムを「ボット」といい、従来のウィルス駆除法では対応できなくなっているそうです。そして、同センターのホームページによると、インターネットユーザーの約1%が既にこの「ボット」に感染しているとのことです。
このセンターでは「ボット」を収集・解析の上、対応用のクリーニングソフトを作成しています。
メンバーの方々も、この政府事業のセンターが無償提供しているソフトを使って、念のため「ボット」感染をチェックしてみてください。

※Windows9Xシリーズ搭載機種では使えません。


次のサイトの「ボットの駆除対策手順」へお進みください。

https://www.ccc.go.jp/

インターネットの世界がどんどん複雑化し、リスクも増える一方です。
ネットワークさえなければ、こんなことに気を使う必要もなかったのでしょうが。
あー、鬱陶しい。

※わかりにくいようであれば説明しますのでクラス開催日にお申し出ください。

 


Posted by Yukio 記事 No.0000014 



 
200911月14日(土) 

RGBとは【PSE】
 
今日から新メンバーのための初心者用講座を開講しました。
新たに来られた方には早く他のメンバーと同じくらいになっていただきたいものです。
さて、今日のテーマは11月8日の記事にあらわれた「RGB」という言葉です。
「RGB」とは
RED(赤)、GREEN(緑)、BLUE(青)という光の3原色を表しています。
この3つの色が256段階で強くなったり弱くなったりすることで、さまざまな色を表現できます。(実際に表示できるかどうかはスクリーンやプリンタなど装置の性能にもよりますが、理論上は256色×256色×256色で16,777,216色です。)
例えば3色全てが消えている状態は「黒」、全てが光っている状態は「白」、赤と青が光っていて緑が消えていれば紫となるなど、絵の具をまぜるように色を調整できます。
PSEやHTML(ホームページ作成言語)を始めとして多くの言語でこの「RGB」の考え方や設定のしかたが用いられています。
今回は特にPSEに登場する「RGB」を考えてみましょう。
PSEのツールバーの一番下に「描画色を設定」、「背景色を設定」ツールがあります。(上図)
ここの、まず手前側に表示されている「描画色設定ツール」(上の例では黒の方)をクリックしてみてください。
次のような「色選択ボックス」が表示されるはずです。

このボックスの右下、欄外に#マークを配したテキストボックスがあります。
これが現在設定されているRGB値です。
上の図では「000000」が設定されていますが、この左2桁が赤の強度、真ん中2桁が緑の強度、そして右の2桁が青の強度を表しています。全てが「00」なので3色全てが消えた状態、つまり「黒」が設定されているのです。
なお、先に説明したように各色は256段階で表現できますが2桁しかありません。
これは、これらの数値は10進数ではなく16進数なので2桁で表現できています。(00〜FF)
16進数とは数字を0〜9、さらにA〜Fを含めた16個の数字を用いて表現する方法です。

00−01−02−03−04−05−06−07−08−09−0A−0B−0C−0D−0E−0F−10..... 
と16毎に1桁繰り上がっていく表現方です。


#マーク位置のテキストボックスに適当な数値6桁(但し全て0〜Fの範囲)を入力してみてください。色がかわるはずです。また、0に近いほどその色は暗く、Fに近いほど明るくなっていくはずです。

わかりやすい色の例をいくつかあげておきます。

設定色   RGB値   色の組み合わせ
#FFFFFF   赤、緑、青すべて点灯
#0000FF 青のみ点灯
#FF0000 赤のみ点灯
#00FF00 緑のみ点灯
#FF00FF 赤と青が点灯
#FFFF00 赤と緑が点灯
#00FFFF 緑と青が点灯

上の例では00(色強度0%)とFF(色強度100%)だけでの設定ですが、このそれぞれの色強度を256段階で変えることにより、微妙な色を表現できるのです。

詳細はクラスで説明します。


※わかりにくいようであれば説明しますのでクラス開催日にお申し出ください。

 


Posted by Yukio 記事 No.0000015 



 
200911月20日(金) 

16進数【基礎知識】
 
前回、登場した「16進数」は、コンピュータ(特に言語系ソフト)ではよく使うので、10進数、2進数と比較しながら、もう少し説明しておきましょう。
10進数は10個目の数値9の次に1桁繰り上がります。つまり、10個しか数字が使えないからこうなります。
16進数では16個の数字が使えるので、16個目の数値Fの次にようやく10に繰り上がります。10進数と比べて桁上がりはその分、遅くなります。


10進数 2進数 16進数
0 00
1 11
2 102
3 113
4 1004
5 1015
6 1106
7 1117
8 10008
9 10019
10 1010A
11 1011B
12 1100C
13 1101D
14 1110E
15 1111F
16 1000010
途中省略
255 11111111FF
256 100000000100

なぜ、コンピュータでは「256」という中途半端な数値がよく使われるかは上の表でわかります。
コンピュータではバイト単位で処理されますが、丁度1バイト分(2進数の8桁)のMAX値が10進数では255だからです。(0を含め256)
なお、表でご覧になれば一目瞭然ですが、前回の記事で登場したRGBカラーの設定16進2桁のMAX値も一致します。
 

詳細はクラスで説明します。


※わかりにくいようであれば説明しますのでクラス開催日にお申し出ください。
 


Posted by Yukio 記事 No.0000016 



 
200911月21日(土) 

ハードコピー【基礎知識】
 
知っておくと便利な機能なのに、案外、知られていない機能は多いものです。
今日のテーマ「ハードコピー」もその一つで、画像処理をおこなう上で知っておくと便利な機能です。
ハードコピーとはハードウェア(機械・装置)のコピーのことで、一般的にはスクリーン(モニター画面)の複写を表します。
最近のウィンドウズマシンではだいたい、[Fn]キー+[Prnt Scrn]キーを押します。
これによりスクリーン画像がマウスポインタやカーソルなどを除いて、そのままクリップボードにコピーされます。
その後、画像の処理ができるソフトへ、この画像を貼り付けることができ、印刷が可能になります。
 
「メモ帳」など、純粋なテキストエディタでは無理ですが、PSEのような画像処理ソフトではもちろん、Wordなど画像を扱えるワードプロセッサでも利用できます。そのソフトに画像のコピー&ペーストの機能を持っているかどうかが決め手です。

使い方を例示しておきましょう。
例えば画面上の、ある複雑な情報をたくさん控えなければならないような状況が生じたとします。その場合にその情報をソフトで保存できるなら、それが一番確実ですが、場合によっては保存できないこともあります。
そのような場合、誰もがメモと鉛筆で控えるのが普通ですが、控えミスの恐れがあります。そこで、コピーしたい部分を表示させて、[Fn]キー+[Prnt Scrn]キーを押すと、その画面がそのままクリップボードにコピーされます。
さらに、WORDを開き、「編集」→「貼り付け」を行うと、その情報を簡単に貼り付けることができます。後はそのWORD文書を保存すればいいだけです。(WORDの場合、トリミング機能を使えば、余分な部分を消してしまうこともできます。)

クリップボードとはパソコンの一時記憶領域のことで、このメモリーを使うことで異なるソフト間でのデータのやり取りが可能になります。(文字列、画像、ともに対象となります。)
なお、正確な「ハードコピー」の意味はスクリーンなどの情報を紙に印刷することです。

詳細はクラスで説明します。


※わかりにくいようであれば説明しますのでクラス開催日にお申し出ください。
 


Posted by Yukio 記事 No.0000017 



 
200911月27日(金) 

半角の数字しか使えないようにするU【VBA】
 
10月2日のクラスでこのタイトルのTを掲載していますが、そのとき質問されたメンバーから、再度、「ある特定のセルを選択するとフォームが開き、数値を入力すると、その数値が元のセルに反映されるようにするにはどうしたらよいか」という質問がありました。
自分なりに考えてみて、なんとかそれらしい処理ができるコードを作ってはみたのですが、とくにワークシートとかかわりのある部分についてはVBA自体をそれほど使いこんでいないので、もっと簡潔な書き方があるかもしれません。(VBAの元となる開発言語Visual Basicはある時期、使い込みましたが、最近ではほとんど使っていません。ましてや、VBAは10年ほど前にかじった程度でほとんど手探り状態で作っています。)

まず、数値のみを入力させるということから、10月2日のコード(次のとおり)はそのまま使うことになります。もちろん、漢字に変換させないために、TextBox1のプロパティ、IMEModeを「3 fmIMEmodeDisable」に設定しなければなりません。詳細は10月2日の記事をご覧ください。

【TextBox1】

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
   If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
           KeyAscii = 0
               Beep
      End If
End Sub


なお、前回の記事でIF条件式がわかりにくいとの指摘があったので、そちらを再度、説明しましょう。
まず、上のプロシジャでKeyAsciiという変数が現われます。この変数は最初にPrivate Sub...文のかっこ書き部分に出て来ています。これは、VBAのシステムがKeyPressイベントの発生時(なにかキーを押したとき)に、ユーザーが実際に押したキーを認識し、そのキーのAsciiコード(整数)をKeyAsciiという変数に代入してくれることを表しています。
したがって、(特殊なキーを除いては)数値以外のキーも押したキーのコードがKeyAscii変数に取り込まれます。(少なくとも印刷可能文字キーはすべて取り込まれます。)
この場合、数値以外は入力させたくないので、If条件文でAsciiコードにおける「0」未満、「9」を超えるキーが押された場合には無効処理をさせます。
それがKeyAscii=0で、この文によって押されたキーを無効にすることができます。
なお、ASC( )はカッコの中の文字(数値)をAsciiコードに変換するための関数です。これにより、KeyAscii変数と比較できるようになります。(基本的に条件式ではデータ型が同じでないと比較できません。KeyAscii変数が
keyAscii as MSForms.ReturnIntegerより整数として処理されるので右辺も整数にしなければなりません。)
数値「0」がAsciiコードで「46」で、順に数値「9」は「57」に割り当てられていますので、次のような書き方でも書けないことはありません。

  If KeyAscii < 48 Or KeyAscii > 57 Then 

ただ、あとからこのコードを見た場合、これらのコードが何のキーであったかがわかりにくいので、あえてAsc()関数を使い、変換前の文字を記述しておく方がわかりやすくなります。もちろんAsc("0")は「48」をあたえ、Asc("9")は「57」をあたえます。(そこにコメントを加えておくなら数値でもかまいません。)

さて、今日の課題分に入ります。

ワークシート内の特定のセルがクリックされた場合に、フォームを開くというプロシジャは、WorkSheetオブジェクトに記述します。

WorkSheetオブジェクトはプロジェクトエクスプローラで確認してください。






上の図がプロジェクトエクスプローラです。通常、VisualBasicEditor画面の左上に配置されています。
プロジェクトエクスプローラには、Microsoft Excel Objects(ワークシート)、フォーム、標準モジュール、クラスモジュールなどが表示されます。そして、それらの集まりをプロジェクトといいます。
既にご承知のとおり、Excelのワークシートは新規作成すると自動的に3つのワークシートができますが、そのシートはすべてVBAではオブジェクトとみなされます。
今回、使うのはSheet1ですので一番上のSheet1(Sheet1)を使います。オブジェクト名のかっこ内はExcelにおけるシート名で、Excelのシート名を変えれば変更されます。かっこ外の名前もVisual Basic Editorのプロパティウィンドウで変更できますが、慣れないうちは変えない方が無難だと思います。
まず、Sheet1(Sheet1)をダブルクリックしてください。
Sheet1にコードが記述されていれば、コードウィンドウにSheet1に関するコードが現われます。新規のプロジェクトの場合、何も表示されません。

このコードウィンドウには2つのプリセットがあります。「オブジェクト」と「プロシジャ」です。
選択はコードウィンドウ上部のセレクトボックスで行います。





上の図で(General)と表示されたWorksheetオブジェクトを選択するセレクトボックスが、「オブジェクトの選択」です。そして、右に配置された(Declarations)と表示された側が「プロシジャの選択」です。プロシジャの選択ではイベントハンドラを選びます。
先にも書きましたように今回のケースではWorksheetに記述するので図のようにWorksheetを選びます。(上の図ではセレクトボックスの裏側に既にコードが表示されていますが、実際には何も表示されていません。)
今回の課題で「ある特定のセルを選んだとき...」とあるので、(Declarations)側では、「SelectionChange」を選びます。
なお、選択の順序は必ず「オブジェクト」→「プロシジャ」の順に選択してください。オブジェクトごとに固有のプロシジャがあるので、順逆だとプロシジャを選択できません。





「SelectionChange」はセルの選択範囲が変わったときに発生するイベントです。実質上、特定のセルをクリックしたときにも選択範囲が変わったとみなされ発生します。WorkSheetsオブジェクトには上の図のようにClickイベントは存在しません。理由はわかりませんが、多分、Excelを使う場合にクリックを使うことが多いので、イベントプロシジャとコンフリクト(衝突)することを避けるためではないかと思います。
オブジェクトとプロシジャを選択すると、自動的に次のようなプロシジャが表示されます。(この部分は定型句です。)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  (この部分に自身でコードを書いていきます)

End Sub


考え方は、KeyPressと同様です。ただし、KeyPressではキーが押されたときに該当のプロシジャが実行されましたが、SelectionChangeでは選択範囲が変更されたときに該当のプロシジャが実行されます。


今回のケースではコードを次のように記述します。

【Worksheet】 (オブジェクト名worksheet1)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If (Target.Row = 1 And Target.Column = 1) Then
      UserForm1.Show
   End If
End Sub


このプロシジャではワークシートでセル範囲を選択すると、先のKeyAscii変数と同様に、その選択範囲(Range)がTargetという特殊なオブジェクト型変数に読み込まれます。
この変数はRow(行)とColumn(列)というプロパティを持っていますのでそれらを使います。(それぞれ、選択範囲の先頭の行・列を表します。)
上の条件式で、Rowが「1」なのは範囲の先頭が1行目だということです。Columnでも1列目を表示する場合には「1」で表現しますが、Excelのワークシートでは「A1」など、列はアルファベットで表現しているのでご注意ください。
つまり、上のIf文は「選択範囲の先頭行が1列目で
かつ先頭列が1列目であればUserForm1を開きなさい。」ということになります。ANDによって「Target.Row=1とTarget.Column=1という複数の条件式が両方、整ったら実行せよ」という意味になります。
他の選択範囲を選んでもUserForm1は開きませんが、該当のセルが左上先頭である選択である場合に限りどれだけ広い範囲を選択してもフォームは開きます。

UserFormが開かれた時点で、次のコードを用いてTextBox1を初期化します。

【UserForm】

privete sub UserForm Activate()
   TextBox1.Text = ""
End sub

これはUserFormがActivate(活動的)になったら実行されるイベントプロシジャです。つまりUserFormが使われるようになったら自然と発生するイベントです。
この文を要約すれば、「入力フォームが開かれたらテキストボックス(TextBox1)を初期化せよ」となります。Asc( )関数の引数にもあったように、2つの「"」に囲まれた文字はVBAでは文字列をあらわします。この場合、その間に何もないので、結果、TextBox1に空白(厳密には違います)が代入されます。

最後に入力フォームのテキストボックスで入力した数値をワークシートに転記するコードを記述します。
先に記したようにKeyPressイベントが発生するとほとんどのキーコードがKeyAscii変数に取り込まれますが、例外があり、それが「Enter」キーや「Esc」キーなどの特殊キーです。
つまり、KeyPressイベントでは「Enter」キーが押されたことを認識することができないのです。
そのため、「Enter」キーや「Esc」キーのキーコードを取り込めるKeyDownイベントプロシジャを用います。

【UserForm】

Private Sub TextBox1_KeyDown(byVal KeyCode as Msforms ReturnInteger, 
ByVal Shift as Integer) 
 
  If KeyCode = vbKeyEscape Then
     Worksheets("Sheet1").Range("A2").Activate
      UserForm1.Hide
      Exit Sub
   End If

   If KeyCode = vbKeyReturn And TextBox1.text <>"" Then
      Worksheets("Sheet1").Activate
      Worksheets("Sheet1").Range("A1").value = TextBox1.Text
      Worksheets("Sheet1").Range("A2").Activate
      UserForm1.Hide
      Exit Sub
   End If

End Sub

KeyDownプロシジャでもKeyPressプロシジャ同様に、押されたキーのコードが変数に取り込まれますが、KeyAscii変数ではなく、KeyCode変数となります。変数名は異なりますが、ほぼ同じようなものと考えて差し支えありません。
このプロシジャはTextBox1内で「Esc」キーを押すとフォーカスがシートのA!に移り、フォームが閉じられます。つまり、入力がキャンセルされます。
一方、数値を入力後、「Enter」
キーを押すとSheet1のセル"A1"に現在のTextBox1の内容を転記しUserFormを閉じます。
TextBox1.text<>""は「テキストボックスが空白でなければ...」ということです。
If KeyCode = vBKeyEscape...条件式If KeyCode = vbKeyReturn...条件式ともにある、Worksheets("Sheet1").Range("A2").Activateはフォーカスを別のセルに移すためのコードです。これがないと、A1セルにフォーカスが残り、そのまま通常のExcelの操作で内容の書き換えが可能となってしまうからです。(ここでは"A2"にしてありますが、使っていないセルならどこでもかまいません。これにより、再度、A1セルをクリックしても再度、SelectionChangeイベントが発生
し、先のプロシジャが実行され、フォームが開くので、直接、セルを書き換えることはできなくなります。
vbKeyEscapeやvbKeyReturnはVB定数で「ESC」キー、「Enter」キー、それぞれのキーコードが入っています。(これも、ASC( )関数のとき同様、後からコードを見てわかりやすくするための工夫です。もちろん、定数ですので変更はできません。)

なお、UserForm固有の「閉じる」ボタンを押してしまうとやはり、同じ現象が起きてしまうので、次のような文が必要となります。

Private Sub UserForm_Terminate()
   Worksheets("Sheet1").Range("A2").Activate
End Sub


これも考え方は「Esc」キー、「Enter」キーと同様です。違うのはフォーム閉じられたときに実行されるUserForm_Terminateプロシジャによりセルの移動を行っているということです。

KeyイベントはKeyDown、KeyPress、KeyUpの3種類があります。
キーを押し下げたときにはKeyDown、KeyPress、そして、押したキーを離したときにはKeyUpのそれぞれのイベントが発生します。
何かのボタンを押し、離したときには、この3種のイベントがすべて発生し、イベントプロシジャもコードが存在すればすべて実行されます。
イベントの発生順序としてはKeyDown→KeyPress→KeyUpの順になります。
ただし、キーを押したまま離さないでいると、KeyDownイベントとKeyPress イベントが交互に繰り返し発生し、KeyUpイベントが発生することはありません。もちろん、キーを離すと その時点でKeyUp イベントが発生します。

とにかく、VBAについて、私にはVBAのヘルプ機能くらいしか参考になるものがないので表面的なことしか調べようがありません。VisualBasicを知っている者でもこんなわかりにくいのですから、知らなければ、まさに暗号のようなものでしょう。


詳細はクラスで説明します。


※わかりにくいようであれば説明しますのでクラス開催日にお申し出ください。
 


Posted by Yukio 記事 No.0000018 


 
 
200911月28日(土) 

イベントとは【VBA】
 
今日は特筆すべき事柄がないので、昨日の記事の補足を行います。
昨日の記事で何度か「イベント」という言葉が取り上げられましたが、この「イベント」とはいったい何でしょうか。
日本語に直せば「できごと」ということですが、これがパソコン用語としては「マウスがクリックされた」、「キーが押された」、「フォームが閉じられた」などを表します。
それぞれのオブジェクトには固有のイベントがあります。テキストボックスもオブジェクトの1つですから、当然、様々なイベントが存在し、昨日、取り上げたKeyDownイベントもその一つです。
そして、10月2日の記事で取り上げたKeyPressイベント、さらにまだ紹介していないKeyUpイベントというものを含めれば、Key操作に関わるイベントだけでも計3種類のイベントが存在します。
キーを押し下げたときにはKeyDownとKeyPress、そして、その押したキーを離したときにはKeyUpの
イベントが発生します。
つまり、何かのキーを
押したときには、この3種のイベント、すべてが発生しますが、そのイベントをイベントプロシジャで捉えるかどうかは、各イベントプロシジャにコードの記述をするかどうかによります。
当然、イベントが発生しても、それを捉えるプロシジャ(厳密にいえば、その中に記述されるコード)がなければなにも実行されません。

つまり、発生したイベントを捉えて、そのイベントの発生を条件として扱う条件式のようなものがイベントプロシジャです。


【イベントプロシジャ例】

Private Sub TextBox1_KeyDown(byVal KeyCode as Msforms ReturnInteger, 
ByVal Shift as Integer) 
 
   (ここに実行させたいコードを加える。
       当然、何も記述しなければこのようなプロシジャがあっても何も起こらない。)

End Sub


何度か説明していますが、上の記述は何かのキーが押されて発生したKeyDownイベントを捉えるためのKeyDownイベントプロシジャです。

ここでいう「キーを押す」というのはキーを押して離すという一連の動作をいい、それに伴うイベントの発生順序はKeyDown→KeyPress→KeyUpの順になります。
ただし、キーを押したまま離さないでいると、KeyDownイベントとKeyPress イベントが交互に繰り返し発生し、KeyUpイベントはそのキーを離すまで発生しません。


詳細はクラスで説明します。


※わかりにくいようであれば説明しますのでクラス開催日にお申し出ください。
 


Posted by Yukio 記事 No.0000019 

過去のデータを読むときにはサイドバーのカレンダー&アーカイブ」より。

 
 
   
   
 
サークルについて 初級者用テキスト 会場案内 著作権・個人情報の扱い メール/FAQ/コメント ホームへ