パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)

初めて作るVBプログラム(HELLO WORLDの作成)

VBの入門書は書店にあふれており、いまさら「初めてのVBアプリ作成」などと銘打っても、屋上屋を重ねるようなものだと思いますが、万が一
・VBを手に入れたが、自分の町にコンピューター関連の本のある書店がない
・書店はあるけど、出かける手間がおしい。今すぐ手っ取り早くなんかVBアプリを作ってみたい。
・本を買うお金がない
・VB5.0CCEをダウンロードした。自分はオールフリーソフト主義。わざわざ本を買うなんて主義に反する。
・入門書を買って、なんかわかったような、わかんないような。もうひとつVBがよくわからん。
という方がいらっしゃるなら、なんとかせねばという義務感にかられて、とりあえず入門編を書くことにいたします。でも、VBの概要とか、VB開発環境の操作といったことは省かせていただきます。VBのプロのプログラマによるVBのサイトもたくさんありますので、きちんとした網羅的な説明はそちらにまかせて、VBの初心者による初心者のためのVB解説ということにしたいと思います。おじさん自身がつっかかった部分を手厚く説明していきますので、抜けた点は入門書等で補って下さい。

Visual Basicの本はものすごくたくさんでていて、どれを選んだらいいか迷ってしまいますが・・、ま入門書はどれでもいいと思います。以下、ご参考までに。結構いい本が売り切れているのですが、コンピュータの本・専門店で探すと、在庫があったりします。

Visual Basic .Net と Express両方を解説しているお得な本 Visual Basic6の入門書。VBは河西 朝雄さんの本がわかりやすくておすすめです。 Visual Basic.Netの入門書としては手ごろ。 VB6の中級編。APIの呼び出しなどの解説がある。河西朝雄さんの本 Win32 APIをコールしまくりたいなら、こんな本があります。VB6用



1 VBアプリ作成手順
VBアプリは簡単に言ってしまえば
(1) FORMにCONTROL(コントロール)を配置する。  (注)FORM,CONTROLはオブジェクトです。
(2) FORM,CONTROLのプロパティを設定する
(3)各イベントプロシージャにコードを記述する
ことによって完成したします。

どの入門書もまとめるとはじめの方にだいたいこんなことが、書かれていると思います。でも、コントロールとかオブジェクトとかイベントプローシージャとか言われても、よくわからない。なんじゃそりゃ、それを理解しないとプログラムできんのか?という感じではないでしょうか。旧BASICから移行してくると、プログラミングスタイルの違いに結構とまどうのではないかと思います。

オブジェクトというのは、とりあえずプログラムを作るためのまとまった部品、ぐらいに考えておけばいいでしょう。データやプロパティや関数をひとつにまとめた部品です。例えばVBであれば、FORMもオブジェクトですし、TEXTBOX,LISTBOX、TIMERなどみんなオブジェクトです。EXCELでは WORKBOOK,WORKSHEET,CHARTといったオブジェクトがあります。部品ですから、いろいろ組み合わせて一つのプログラムを作っていきます。例えばVBからEXCELのオブジェクト(部品)を呼び出して使うことができます。よくわかりませんか?当面わからなくてもかまいません。やってるうちになんとなく理解できるようになると思います。

コントロールはFORMに配置する部品(オブジェクト)です。VBでは
●コマンドボタン(CommandButton)   ●ラベル(Label)    ●テキストボックス(TextBox)
●リストボックス(ListBox)         ●チェックボックス(CheckBox)
●オプションボタン(OptionButton)    ●イメージ(Image)   ●ピクチャーボックス(PictureBox)
などなどがあります。VB開発環境の左側にアイコンででてるやつです。(コントロールもオブジェクトのひとつです)

コントロールにはプロッパティ(Property)というものがあります。コントロールの状態、特性を定める値です。
代表的なものに、
height(コントロールの高さ)、width(コントロールの横幅)、lefttop(コントロールの位置)、visible(コントロールが可視か不可視か)、 enabled(コントロールがイベントを認識できるか否か)caption(コントロールの題)、backcolor,forecolor(コントロールの背景色、前景色)などです。
コントロールによって備わっているプロパティの種類は異なります。例えば変わったコントロールでタイマーがあります。あるインターバル(1秒毎とか)で定期的にイベントを発生させるコントロールですが、実行時には表示されません(見える必要がない)ので、width,heightといったプロパティは持っていません。変りに
intervalというプロパティを持ちます。intervalを1に設定すると1/1000秒毎にイベントが発生します。
プロパティの設定はプログラム開発環境でプロパティウィンドウで設定できます。ここで設定した値でプログラムは立ちがります。(プロパティウィンドウで設定できないプロパティもある。例えばFORMなどでキャラクタ文字の表示位置を指定する
currentX,currentYなど。旧BASIC流にいうとLocate x, y のようなもの)また、コードの中に記述してプログラム実行中にプロパティを変更することもできます。プロパティのコードの中での記述の仕方はさまざまですが、代表例を上げてみます。

(1) FORM(Form1)の横幅を半分にする
Form1.width=Form1.width/2
だいたいこのように
コントロール名.プロパティ という形でプロパティを指定します。

(2) イメージ(image1)を不可視にする
Image1.Visible=false

(3) イメージ(image1)の位置を取得する(変数X,Yに格納)
x=Image1.left
y=image1.top


同様にコントロールの移動や表示をする命令としてメソッドというものがあります。代表的なメソッドにはmove(コントロールの位置を移動する)などがあります。例えばイメージコントロール(image1)を80,100(左上の隅からの位置)の位置に移動する時は
Image1.Move 80,100
という風に記述します。


VBはイベントの発生によりプログラムの実行が進行します。イベントには
キーが押された KeyPress
マウスがクリックされた   Click
マウスがダブルクリックされた   DbClick
などがあります。
変わったところでは、タイマーのインターバルで設定された時間がすぎた  timer
というイベントなどがあります。
イベントが発生すると、それに対応したイベントプロシージャが実行されます。例えばForm(Form1)がクリックされると
Private Sub Form1_Click
というイベントプロシージャが実行されます。
イベントはどういう操作をした時、どういう順でどのイベントが発生するのか、正確にしらないと思った通り動くVBプログラムを作成できません。少々やっかいな点もありますので、「1 EXCEL/
オブジェクトとイベント」を参照して下さい。


2 HELLO WORLDの作成
あの有名なHELLO WORLDプログラムを実際に作成してみましょう。でも、ただ単にHELLO WORLDと表示するのではつまらないので、
Formのcaption
Labelのcaption
TextBoxのtext
PictureBoxとForm
の5個所に表示するプログラムにします。
また、何かキーを押すとHELLO WORLDと表示し、コマンドボタンで消去するプログラムにします。

同じようなものを旧BASICでやるとこんな感じです。超簡単。N88互換BASIC for WIN 用(他の旧BASICでもほぼ同じ)

10 cls
20 a$ = input$(1)
30 print "HELLO WORLD"     


VB4によるHELLO WORLDプログラム

Formおよびコントロールの配置は以下の用です。

FormにLabel,TextBox,PictureBox,CommandButton
を配置して下さい。

Formのプロパティ FontTransparent はfalse
            KeypreviewはTrue

PictureBoxのプロパティ FontTransparen はFalse
TextBoxのプロパティ Enabled はFalse

 



プロパティについて
FontTranseparent  背景(下の文字等)が透過するか否か。trueに設定すると、下の字が透かした状態で重ねがきされる。falseに設定すると透過しない。Print " "と空白で、下の字を消したい時はfalseにする。Trueにしておくと、空白を重ねても、下の字が透けて見える状態になってしまう。

KeyPreview TrueだとまずFormがキーイベント(Keydown, KeyPress, KeyUp)をうけとり、それからアクティブなコントロールがキーイベントを受け取る。falseだとアクティブなコントロールだけがキーイベントを受け取り、Formはキーイベントを受け取らない。今回のプログラムでは、何かキーが押されたら、全てのコントロールに"HELLO WORLD"と表示したいので、Formでキーイベントを受け取らせている。従ってTrueに設定。

これらのプロパティについては、Formのプロパティでも解説しましたので、参照して下さい。

コードは以下のようです。

'コントロールのプロパティ この部分はプロパティウィンドウで設定されたもの
'
VERSION 4.00
Begin VB.Form Form1 
   BackColor       =   &H00FFFFFF&
   Caption         =   "      "
   ClientHeight    =   2340
   ClientLeft      =   1140
   ClientTop       =   1515
   ClientWidth     =   2445
   FontTransparent =   0   'False
   Height          =   2745
   KeyPreview      =   -1  'True
   Left            =   1080
   LinkTopic       =   "Form1"
   ScaleHeight     =   2340
   ScaleWidth      =   2445
   Top             =   1170
   Width           =   2565
   Begin VB.CommandButton Command1 
      Caption         =   "消す"
      Height          =   495
      Left            =   120
      TabIndex        =   3
      Top             =   1800
      Width           =   2055
   End
   Begin VB.PictureBox Picture1 
      BackColor       =   &H00FFFFFF&
      FontTransparent =   0   'False
      Height          =   375
      Left            =   120
      ScaleHeight     =   315
      ScaleWidth      =   1995
      TabIndex        =   2
      Top             =   1320
      Width           =   2055
   End
   Begin VB.TextBox Text1 
      Enabled         =   0   'False
      Height          =   270
      Left            =   120
      TabIndex        =   1
      Top             =   960
      Width           =   2055
   End
   Begin VB.Label Label1 
      Height          =   255
      Left            =   120
      TabIndex        =   0
      Top             =   600
      Width           =   2055
   End
End
Attribute VB_Name = "Form1"
Attribute VB_Creatable = False
Attribute VB_Exposed = False

'
' ここからコードの本体 VB開発環境でここから以下の部分を実際にコーディングする
'
'消すボタンがクリックされた時のイベントプロシージャ
Private Sub Command1_Click()    
Form1.CurrentX = 0: Form1.CurrentY = 0  '旧BasicでいうLocate x,y ここはForm内での座標指定 
Form1.Print "                    "    'printメソッドで空白を上書きして消す 
Form1.Caption = ""               'formのcaptionを消去
Picture1.CurrentX = 0: Picture1.CurrentY = 0  'PictureBox内での座標指定
Picture1.Print "                     "
Text1.Enabled = True
Text1.Text = ""            'TextBOXのtextを消去
Text1.Enabled = False         'TextBoxがイベントを受け取らないようにする  
Label1.Caption = ""          'labelのcaptionを消去
End Sub

'何かキーが押された時に発生するformのキーイベント
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Form1.CurrentX = 0: Form1.CurrentY = 0
Form1.Print "HELLO WORLD"
Form1.Caption = "HELLO WORLD"
Picture1.CurrentX = 0: Picture1.CurrentY = 0
Picture1.Print "HELLO WORLD"
Text1.Enabled = True
Text1.Text = "HELLO WORLD"
Text1.Enabled = False
Label1.Caption = "HELLO WORLD"
End Sub

それで何かキーをおすと下のようになります。Visual Basicでは文字を表すのにいろんな手段があること
がわかると思います。なんせVisual!ですから。

−−>Formのcaption
−−>Form.printtメソッドによる表示
 

−−>Labelのcaption
−−>TextBox.Txet

−−>PictureBox.printメソッドによる表示



 




Visual BasIc&Excel活用研究目次 | TopPage