follow us in feedly

Excel VBAで選択中セルのURLをQRコード表示する

約3年ぶりの更新ですね。
今回もどこまで続けられるのかは誰にもわかりません。

1発目は、はじめて使ったExcel VBAについて。
仕事の中で「こんなの作れない?」とお願いされたのがきっかけです。

作ったのは、選択中セルにあるURLをQRコードに変換して表示するもの。
ExcelのURL一覧をスマートフォンで確認していくのに使うようです。
バージョンはExcel 2013です。
もともとは仕事用なので業務に特化したところは変えてます。

ソースコード

ソースコードはこんな感じです。
ユーザーフォーム (UrlForm.frm)は使ってみたかっただけです。
これくらいならInputBoxを使ったほうが楽だと思う。

MakeQRCodeModule.bas

Option Explicit

Sub MakeQRcode()
  On Error GoTo ErrorMsg

  Dim url As String
  Dim objIE As Object

  '選択中のセルからURLを取得
  url = ActiveCell.Value

  'URLが取得できない場合はフォーム入力(1回のみ)
  If url = Empty Then
    UrlForm.Tag = "Cancel"
    UrlForm.Show

    'OKボタン以外(キャンセルボタン、閉じるボタン)は終了
    If Not UrlForm.Tag = "OK" Then
      Exit Sub
    End If

    'テキストボックスにURLが入力されなかったら終了
    If UrlForm.UrlTextBox.Value = Empty Then
      MsgBox ("URLが取得できません")
      Exit Sub
    End If

    'テキストボックスからURLを取得
    url = UrlForm.UrlTextBox.Value
  End If

  'Google Chart APIのURLを作成
  url = "http://chart.apis.google.com/chart?cht=qr&chs=150x150&chl=" & Application.WorksheetFunction.EncodeURL(url)

  'Internet ExplorerでGoogle Chart APIからQRコードを取得して表示
  Set objIE = CreateObject("InternetExplorer.Application")
  With objIE
    .Visible = True
    .Top = 100
    .Left = 500
    .Width = 500
    .Height = 500
    .Navigate (url)
  End With

  Do While objIE.Busy = True Or objIE.ReadyState <> 4
    DoEvents
  Loop

  Exit Sub

ErrorMsg:
  MsgBox ("Error:" & Err.Description)
End Sub

UrlForm.frm

Private Sub okButton_Click()
  UrlForm.Tag = "OK"
  UrlForm.Hide
End Sub

Private Sub cancelButton_Click()
  UrlForm.Hide
End Sub

Private Sub UrlForm_Activate()
  UrlForm.UrlTextBox.SetFocus
End Sub

ポイント

選択中の結合セルの値を取得

結合されたセルから取得する必要があったので
調べていくつか出てきた方法を試したけど取得できず。
結局、下記のようなセルの値を取得する方法でできました。

ActiveCell.Value

Excel 2013だからできたのかもしれないです。
上記の全ソースコードにはないけど業務用バージョンでは使ってるので紹介。

ユーザーフォームのどのボタンをクリックしたか判別する

キャンセルボタンをクリックしたときにエラー表示なしで終了するために実装。

まず、UserFormのTagプロパティに情報を入れる。

UrlForm.Tag = "OK"

そうすると、モジュール側で判定できるようになります。

If Not UrlForm.Tag = "OK" Then
  Exit Sub
End If

この方法が調べたなかで一番シンプルでした。
Tagプロパティに入れた情報は終了しても残るので、フォームを起動するごとに初期化してます。

ユーザーフォームのフォーカス

テキストボックスにフォーカスさせるならSetFocusメソッドを使う。
ユーザーフォーム表示時にセットする場合は、Activateイベント内でメソッドを呼ぶ。
Initializeイベント内で呼び出してもできませんでした。

まとめ

今回は、選択中セルにあるURLをQRコードに変換して表示するExcel VBAを作りました。
いくつか苦労したポイントを紹介していますが、QRコードを表示したいだけなら
Google Chart APIのURLを作成してIEを起動すればいいので、もっと簡単にできると思います。
初Excel VBAということもあってよろしくない実装もあるかもですが、参考になれば幸いです。

参考

Excel VBA 入門講座
Excel VBA入門
VBAでIE制御ライブラリの追加 | IE操作の自動化
Excel VBA を学ぶなら moug モーグ | 即効テクニック | Tagプロパティを利用してユーザーフォームからの情報を受け取る

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください