これで楽に!?VBA活用こんにちは、Ryoです。Nextで回避(無視)することが多いですが、場合によってはそのエラー有無により処理を分岐させたいこともあるかと思います。ついて書いていきます。1.サンプル概要サンプルとしてデスクトップ(私の環境ではDドライブ)に「PW_Test」というフォルダを設け、その中に10ヶファイルを作ります。そのファイルにはパスワード設定(0000)してありますが、一つのファイル(例ではpw6.xlsx)だけ異なるパスワードになっています。ちなみにExcelファイルへのパスワード設定は「名前を付けて保存」する際に「ツール」⇒「全般オプション」を選択すると、パスワード設定画面が表示されますので、そこに入力することで設定します。VBA処理内容としては、フォルダ内のパスワード設定された10ファイル全てに対し、パスワード”0000′′を指定して順次開いていきますが、パスワードが異なり開けない場合はメッセージボックスで「ファイル名」「エラー番号」「エラー内容」を表示させます。メッセージ表示後、開けなかったファイル名を指定ブック/シートに記録していきます。サンプルではSheet2のセルA1から順次書込みしていく形になります。指定フォルダ内のファイル全てに対し処理が完了したら、処理総数と開けなかったファイル数を改めてメッセージボックスで表示しています。Fileを処理しました。Sub先ず指定フォルダ内のファイル(ブック)名を取得する必要がありますので、Dir関数を用いて取得しています。このDir関数については本題から逸れてしまうので本稿では割愛しますが、以前に以下記事でまとめていますので、よろしければご参考までに。【VBA】ファイル・フォルダの存在を確認する(Dir関数)こんにちは、Ryoです。00:06そのDir関数で指定フォルダ内のファイル名を順次取得し、戻り値が空欄(””)になる=全ファイル完了までループ処理を行います。Nextを使用します。Password:=”0000′′これでエラーが発生しても無視できるので処理を継続できますが、エラー自体は発生していますのでNumberプロパティにErrオブジェクトを指定してエラー番号の取得を行うことで処理を分岐させています。’エラー有無の判定Err.Numberが0以外であればエラーが発生していますので、その内容をメッセージボックスで表示します。その際にエラー番号はErr.Number、エラー内容はErr.Descriptionで取得できます。vbInformation動作させた結果を見ると、パスワード違いによるエラー番号は「1004」になるようです。後は開くことができなかったファイルを頭で記憶してのは大変ですから、指定ブック/シート/セルに書込んで記録していきます。Pathname次行に書いているタイマー設定(1sec)はサンプル動作的に判り難くなるので入れてあるものなので、無くても問題ありません。本来ならこの部分に開いたファイルに対する処理などが記述されていく部分かと思います。この一時中断処理は知っておくと何かと便利なのでお薦めです。TimeValue(“00:00:01”)その後ブックを閉じ、Dir関数に引数を省略して指定することで検索済みファイルを除外させ、Loopに繋げています。Dir()Loop処理全て完了後、メッセージボックスで処理したファイル総数と開けなかったファイル数を表示させて完了です。3.まとめ今回はパスワード設定された複数ファイルを開いて処理していく中で、稀に紛れている異なるパスワード設定されたファイルに対し、エラー分岐処理を行いたいとお問合せをいただいたので、一例として書いてみました。VBAで処理する中でエラー処理は欠かせないものですが、そこでプログラムが停止してしまうようなことがあるとユーザーにとって使い難いものになるので、私自身も留意して今後も進めていこうと思った次第です。以上、エラー番号の取得/表示、分岐処理を行う方法についてでした!今回の記事が何かの参考になれば幸いです。【VBA】モジュールを追加/削除/インポート/エクスポートするVBEで標準モジュールやユーザーフォームを追加する場合はメニューの「挿入」から行い、削除やインポート/エクスポートなどもマニュアル操作で行うことが常ですが、これらをVBAの「Addメソッド/Removeメソッド/Importメソッド/Exportメソッド」を使って行うこともできますので、その内容について書いていきます。記事を読む【VBA】ドライブの容量を取得する(総容量/空き容量)VBAでも指定したドライブの総容量や空き容量を取得することが可能なので、使用容量を算出することも出来ます。用途としてはドライブ管理を目的として適宜情報を取得し一定容量以下であればアラートを出すなどが可能ではないかと思いますので、今回はその方法について書いていきます。記事を読む【VBA】リストボックスで複数の項目を選択するVBAで扱うユーザーフォームにリストボックス(ListBox)がありますが、リスト化された項目を複数まとめて選択/処理したいなーと思うことがありますよね。その場合はMultiSelectプロパティを使用することで可能になりますので、久々の更新ですがサンプルを交えて書いていこうと思います。記事を読む【VBA】表をグループ化し集計/解除、折り畳みや展開を行うExcelで表を扱うことはたくさんありますが、その中の便利な機能の一つに表をフィールドごとにグループ化して集計する方法があります。この機能はVBAでも扱うことが出来るので、今回はグループ化して集計、解除、アウトラインの折り畳みや展開について書いていきます。記事を読む【VBA】PowerPointのスライドショーを実行するExcelの資料から関連するパワーポイントの資料にスムーズにつなげたい場合なども状況によってはあるかもしれません。その場合はVBAのRunメソッドを使うことでExcelからPowerPointを起動し、スライドショーを実行することも出来ますので、今回はその内容について書いていきます。記事を読む【VBA】ハイパーリンククリック時に処理を行う方法などハイパーリンクは便利な機能なので利用頻度も多いと思いますが、そのハイパーリンクに関連した処理として、クリックした際に処理を行うFollowHyperlinkイベントやハイパーリンクアドレスを取得してセルに書込みを行う方法などについて今回は書いていきたいと思います。Nextを使って楽しよう!Excelで帳票を作っていれば至る所に「項目」があって、そこに「データ等」が記入されていきます。付随して図形やリンク、入力規則もあったりしますが、それを全てセル指定して記述するのは大変で且つメンテも困難です。Next」を使って検索・抽出・処理をさせることで柔軟に対応することが出来ますよ!記事を読む【VBA】WindowsAPIの関数を使用して時間を計測するVBAで検査工程の計測制御などを行っていると、処理の開始から終了までの時間を測りたいことがあります。他にも純粋に実行時間を計測したり、相当な回数のループ処理を行う際に発生する処理時間を把握したいこともありますから、今回はその際に使用するWindowsAPIのtimeGetTime関数について書いていきたいと思います。APIを利用しQRコード生成を連続で行い、サイズも約5×5mmへサイズ調整する方法、そしてQRコード化する際の進捗表示を行うプログレスバーについても合わせて紹介しています。記事を読む【VBA】ブックのアクティブ/非アクティブで処理を実行するVBAで処理する場合単一のブックであることは少なく、複数のブックに跨ることが多いと思いますが、アクティブになる/非アクティブになる状態をイベントとして捉えることも出来ますので、例えば一通りデータを読み込んでブックを切り替えたら元データファイルは用済みですから「閉じる」とかですね。今回はその方法を紹介します。※当サイトはロリポップ!のハイスピードプランです。はじめまして!Ryoと申します。中小企業製造メーカー勤務で主に生産技術業務に勤しむ一方、社内PC管理やVBAで業務効率化を図る日々を送っていますので、これまでの経験や実践してきた内容をここで発信していきたいと考えています。困った時の一助になれるようなブログ作りを目指します。「自恃ろぐ」はAmazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。