6月 14

こんにちは。

今日はVBAのお話です。

パソコン教室で受講中の生徒さんより

「InputBoxが表示されたときに
あからじめ入力モードをオフにしておくことってできないですか?」

というご質問を受けました。

残念ながらInputBoxが本来持っている引数では
IMEを制御する引数はありません。

「出来そう」とは思いながらも
その場ではすぐには思いつきませんでした(^-^;)

インストラクターという性分か
どうしてもやりたくなってしまったので
色々とVBAのヘルプ等で調べてみました。

結果的に出来ました。

まずは正解から。
———————

Sub Sample()
    Dim buf As String
   
    If IMEStatus <> vbIMEModeOff Then
        SendKeys “{kanji}”
    End If
   
    buf = InputBox(”何か文字を入れてください”)
   
    MsgBox buf

End Sub
—————————

上記で、例えばあらかじめ入力モードを「ひらがな」にしている状態で実行すると
InputBoxが表示されるときには入力モードがオフになります。

InputBoxに入力する値が半角の英数を入力することが決まっているときは
いちいち入力モードを切り替えるのは面倒臭いです。

そんなときは上記のVBAで解決です。

ポイントはこの部分。

    If IMEStatus <> vbIMEModeOff Then
        SendKeys “{kanji}”
    End If

少し解説をしていきます。

まず全体的な流れですが
①現在のIME入力モードがオフでなければ
(つまりひらがな入力等他の入力モードになっていたら)
②IME入力モードをオフにして
③InputBoxを表示する

という流れです。

細かく見ていきましょう。

◆IMEStatusという部分
IMEStatus関数というものを利用しており
これはヘルプにも掲載されていますがIME の現在の状態を返すものです。

◆vbIMEModeOffという部分
IMEStatus関数の戻り値です。
他にも様々なものがありますが、今回の目的は入力モードをオフになっているかどうかを
判別したいので、IME がオフの状態を表す「vbIMEModeOff」を利用しています。

◆ SendKeys “{kanji}”という部分

SendKeysステートメントを利用しています。
SendKeysは、通常キーボード等でキーが押されたときの信号をVBA上で擬似的に発生させるステートメントです。
とまぁちょっと難しいので割愛しますが
SendKeys “{kanji}”と指定することではIMEをオン/オフさせることができます。

入力モードがもともとオンになっている状態で利用すると、入力モードはオフになり
入力モードがもともとオフになっている状態で利用すると、入力モードはオンになる特徴があります。

実は “{kanji}”という指定方法はヘルプに載っていませんでした・・・
なぜ載っていないんだーというところですがその辺りは置いておきます(^-^;)

ですので、あらかじめIfステートメントを利用して、IMEStatusを利用し
現在のIMEの状態を把握した上で
入力モードがオンになっている場合には
SendKeys “{kanji}”で入力モードをオフにするという処理を働かせています。

VBA受講中の生徒さん、ぜひお試しください。

またVBAって何?という方
いつでもご質問を受けますのでお気軽に船橋校のインストラクターに
来てくださいね☆

パソコンスクールISA 船橋校 並木

5月 20

こんにちは。

今日はExcelVBAのお話です。

皆さん、例えば会社の先輩に
「このフォルダの中のPDFファイル、全部印刷かけておいて」
なんていわれることないですか??

・・・そうそうないですよね(笑)

今回実は私自身が
「フォルダ内のPDFファイルを一括で印刷する」 という作業が
どうしても必要になってしまったのです(^-^;)

あるフォルダの中にたくさんのPDFファイルが存在します。
これを印刷する為には、そのファイルを一つずつ開いて
印刷を掛けて・・・の繰り返しになります。

ファイルが5個や10個くらいなら、多少面倒でも
やれないことはないですよね。

でもそのファイルの数が30個や、はたまた100個だったら・・・

一日終わってしまいます・・・。

そこで、この開いて印刷するという「繰り返し」部分を
VBAでどうにかならないかということで
色々調べた上で、実行できたものが下記となります。

何を言っているのかわからない部分も多いと思いますが
わかる必要は特にありません(笑)

もし同じ状況になったら、ここにあるコードを
コピーペーストしてお使いください♪

今回は、マシンのデスクトップに【問題集】というフォルダがあり
そのフォルダ内のPDFファイルを印刷するという前提で作成されていますので
ご自身で利用するときには、フォルダの場所を変えてあげれば使えます♪

—————————–

Sub フォルダ内PDFファイル一括印刷()

Dim strPath As String
Dim strFileName As String
Dim pdffiles() As String
Dim intcount As Integer

‘変数strPathに、フォルダのパスを格納
strPath = “C:\Documents and Settings\isa\デスクトップ\問題集\”

‘変数strFileNameに、フォルダ内のファイル名を格納
strFileName = Dir(strPath)

‘フォルダ内のファイルがなくなるまでLoop
Do Until Len(strFileName) = 0
   
    ‘ファイル名の右から3文字が”pdf”かどうか判別   
 If Right(strFileName, 3) = “pdf” Then
       
        ‘pdffilesにその時のファイル名を取得し配列として格納
        ReDim Preserve pdffiles(intcount)
        pdffiles(intcount) = strFileName
       
        ‘pdffiles(0)・pdffiles(1)というようにファイルの数だけ
       ‘配列のインデックス番号が増えて管理できるようにするため+1する
        intcount = intcount + 1
       
    End If
   
    ‘一度Dir関数で取得されたファイルは取得されないようにする処理
    strFileName = Dir()

Loop

‘——————————————
‘ここまでの処理でpdffilesという配列には
‘ファイルの数だけ配列が出来上がっている状態
‘——————————————

‘——————————————
‘ここから下はpdffilesという配列に入っている
‘ファイルを順番に印刷をかける処理
‘——————————————

Dim AcroExchApp As Object
Dim AcroExchPDDoc As Object
Dim AcroExchAvDoc As Object
Dim buf As Long

Set AcroExchApp = CreateObject(”AcroExch.APP”)
Set AcroExchPDDoc = CreateObject(”AcroExch.PDDoc”)
Set AcroExchAvDoc = CreateObject(”AcroExch.AVDoc”)

buf = AcroExchApp.Show

Dim i As Integer

    For i = 0 To UBound(pdffiles)
        buf = AcroExchAvDoc.Open(strPath & pdffiles(i), “”)
        Set AcroExchPDDoc = AcroExchAvDoc.GetPDDoc()

        ‘開いたPDFファイルのページ数をnumPageに格納
        Dim numPage As Long
            numPage = AcroExchPDDoc.GetNumPages
           
            ‘PrintPagesで印刷をかける
            ‘プリンタはデフォルトのプリンタで、印刷のダイアログボックスは
            ‘表示されない
            ‘以下のステートメントは開いたPDFファイルの
            ‘最初のページから最後のページまでを印刷をかけるもの
            ‘また戻り値は「-1」ならうまく機能している
            ‘「-1」以外はPDFファイルが開いていないときに返される戻り値

            buf = AcroExchAvDoc.PrintPages(0, numPage - 1, 2, 0, 0)
       
            ‘一行上のステートメントで「-1」以外の戻り値の場合は
            ‘ファイルが開かれていないときにおきるので
            ‘変数bufが「-1」以外だったら印刷失敗というメッセージを出すようにしている

            If buf <> -1 Then
                MsgBox (”印刷に失敗しました。ファイルが開かれていない可能性があります”)
            Exit Sub
       
        End If
       
        buf = AcroExchAvDoc.Close(False)
    Next

buf = AcroExchApp.Exit

Set AcroExchApp = Nothing
Set AcroExchPDDoc = Nothing
Set AcroExchAvDoc = Nothing

End Sub
—————————————————-

以上です。

長くなってしまってすみません・・・。

一応動作環境は
WindowsXP ServicePack3
Excel2003
Adobe Acrobat7.0 Professional

です。

※Adobe Acrobat7.0 Professionalがない環境では
うまく動作しない可能性があります。
あらかじめご了承下さい。
※また、この記事からコピーをしてVBEのコードとして貼り付けを行うと
コメントにしている部分(緑色の文字色になっているところ)が
うまく貼り付けできない現象が確認されています。
お手数ですが、お試しになる際には、コピーペーストをした後に
ご自身でコメントアウト処理をお願いいたします。

今回はこんなこともExcelVBAではできるんだ!

ということがお分かりいただければ幸いです★

それでは、また♪

パソコンスクールISA船橋校 並木

4月 20

こんにちは。

先日はマクロとVBAについて少しだけお話をしました。

今回は実際にVBAを体験してもらうために
メッセージボックスを表示する方法をご紹介します。

まずExcelを起動します。

Excelの起動ができたら、キーボードで
Altキー+F11を押してください。

すると、「Microsoft Visual Basic」というアプリケーションが
表示されたと思います。

このアプリケーションのことを「VBE(Visual Basic Editor)」と呼びます。

次に、VBEの【挿入】メニュー>【標準モジュール】を選択します。
標準モジュールの挿入

すると、コードを入力するウィンドウが表示されると思います。

マクロを自分でプログラミングをするときは
今挿入した標準モジュールのコードウィンドウに
コードを入力していきます。

では、今表示されているコードウィンドウに
以下のように入力してみましょう!

*****************************

Sub メッセージボックスの表示()

    MsgBox “初めてのVBA”
   
End Sub

*****************************

上記のコードのSub ~ End Sub までが
マクロの本体です。
これを【プロシージャ】と呼びますので覚えておきましょう!

では、実際に上記のコードを入力ができたら
実行して結果を確認してみましょう。

作成したプロシージャ内にカーソルを置いて
キーボードのF5で実行することができます。

メッセージボックス

いかがでしょうか?
上図のようにメッセージボックスが表示されたでしょうか?

実はこのメッセージボックス、Excelのマクロ機能では
作成することができません。

VBAを利用することで表現できるものの一つです。

このメッセージボックスは、今回はまずやってみましょう、ということで
意味のないメッセージを表示してみましたが
実際には

長い処理が終了した後に表示をさせて
ユーザーに処理が完了したことを知らせる目的

処理を実行する前に本当に処理を実行してよいかの注意喚起

等の目的で利用されることが多いです。

本当は条件分岐などの際にも利用されるものなのですが
それはまだ難しいのでここではお話は控えさせていただきます。

さて、今回はVBAを体験するということで
メッセージボックスを表示させてみましたが
いかがでしたでしょうか。

VBAは他にもいろいろなことができます。

今後は、VBAを使った色々なテクニックを
ご紹介していくことができたら、と思っています。

VBAに興味のある方は、ぜひぜひインストラクターにご相談くださいね♪

こちらにVBAコースの一覧も掲載されているので
あわせてご確認ください。
http://www.isa-school.net/office/kamoku/vba.html

パソコンスクールISA船橋校 並木

4月 17

こんにちは。

今日はマクロやVBAの話を少ししてみたいと思います。

突然ですが
Excelのマクロという機能はご存知でしょうか。

普段マクロが組まれているファイルを利用する方も
いらっしゃると思います。

マクロとは、簡単に言うと
Excelの操作を自動化する仕組みのことを言います。

よくお仕事で使われているのはExcelを利用したマクロです。

さて、この記事のタイトルである「マクロ」と「VBA」ですが
どう違うのでしょうか。

一般的には同じような意味で利用されることが多いですが
厳密に言えば少し違います。

マクロは、「Excel等のアプリケーションを自動化する機能のこと」

VBAは、「マクロを作成するときに利用されるプログラミング言語」

と考えてください。

マクロは、このVBAというプログラミング言語を知らなくても
Excelを操作することで作成することができます。
つまりプログラミング言語であるVBAを知らなくても
操作を自動化する仕組みを作ることができるわけです。

ただし、簡単なだけにいくつかデメリットもあります。

例えばマクロで作成したものはわかりやすく言うと
下記のようなデメリットがあります。

・記録の際に行った余計な操作も全て記録されてしまう
・マクロでは高度な連続処理ができない
・マクロでは実現できない処理がある
・余計なコードが組まれることがあるため実行速度が遅くなることがある

 などです。

特に、マクロで作成したものは
自動的にVBAでのコードが組まれているわけなのですが
この自動的に組まれたコードに余計なコードがたくさん入ってしまうことがあります。

これが原因で処理速度が遅くなるということも
多々あります。

ですので、今は業務効率を上げるためには
マクロだけではなくVBAも理解してご自身でコードを記述し
作れるようになることがBetterということになります。

パソコンスクールISA船橋校では
このVBAの授業が現在とても人気です。

・今までExcelを使っていつも同じ作業をしていて時間がかかる方
・マクロは使っているがどうも使い勝手が悪いと感じている方

VBAを学習すればそういった悩みも
解決できるかもしれません!!

現在Office科目を学習されている受講生の皆さんも
更なるスキルアップへ向けてVBAにチャレンジすると
良いですね♪

今後は少しづつVBAのテクニックなども
ご紹介していけたらと思っています。

お楽しみに♪

パソコンスクールISA 船橋校 並木