結座藤麓(ユーザー登録)-エクセルで

VB.NET エクセル

ネットショッピング、情報サイト、役所、何にしても、一歩踏み込んで使うとなれば、ユーザー登録、会員登録を求められてしまいます。面倒くさいです。自動入力できないか? エクセルを使って、作ってみました。

ユーザー登録は、ひるんでしまうほど、面倒くさい

たとえば、イオンネットスーパー。(勝手に使わせてもらって、すみません) 登録すると便利なものですが、以下のような入力を求められます。

これ1回きりだと、辛抱してやるか、とも思うのですが、問題は、他の店やサービスでも求められる事がある、ということです。1回は、やむを得ない、と思えても、2店目は、なんとかならんのか、とぼやいてしまいます。

イオンさん、すみません。勝手に使わせてもらってます。

ラジオボタン、プルダウンの所は、まだましにしても、文字入力をする他ない所は、本当に気が重いですね。

個人情報をむやみに拡散しないためには、それも良いことでしょうが、やはり、登録したいのだけど、何とかならないか? と思うこともしばしばです。

しかも、たまに、メールアドレスの確認入力を、貼り付けを許してくれず、タイプ入力しか受け付けない所があります。貼り付けの方が間違いないと、思うのですが、タイプ能力を試しているのか、と腹が立ちます。許せないですよね。

腹が立った勢いで、エクセルを使い、自動化してみました。

エクセルを使って、タイプ入力

下図のように、

1,最初に、入力フォームのあるクロームタブのタイトルを取得します。

エクセルを開いた後、クロームの入力フォームのあるタブをアクティブにしておきます。
またエクセルに戻って、黄色いボタンをクリックして、あわててクロームのタブに戻ります。
クロームのショートカットキーを使って、自動的に、ブックマークウインドウを開き、タイトルをコピーし、削除ボタンに移って削除(ブックマークをキャンセル)します。
エクセルに戻り、取得したタイトルが、B1セルに入力されます。

2,次に、選択したセルの文字を、1で取得したタイトルのタブのテキストエリアに、タイプします。

クロームの入力したいテキストエリアに、ポインタを置いておきます。この際、IMEをOFFにしておきます。
エクセルに戻り、送る文字列のあるセルを選択し、青いボタンをクリックします。その後は、自動的にクロームのタブに移り、選択されたテキストエリアにタイプ入力します。
それが終わると、手動で、次のテキストエリアに、ポインタを置いておきます。
エクセルに戻り、同様に、送る文字列のあるセルを選択し、青いボタンをクリックします。以下同文。

エクセルの画面

これがうれしい所は、一度このブックを作っておくと、他のいろいろなユーザー登録にそのまま使えることです。情報を追加する必要はあるかも知れませんが、その度に柔軟性が増します。

マクロのコード

以下が、マクロのコードです。これを標準モジュールに貼り付けて、ボタンに登録すると、使えます。エクセル2021と2010で使えました。その間のものも大丈夫だと、思います。

ボタンを作ったりするのも面倒くさい、と思われる方には、末尾にマクロなしブックをダウンロードできるようにしておきました。そのブックに標準モジュールを追加し、このマクロコードを貼り付けてください。

黄色いボタンに、GetCromeTabTitleを登録し、青いボタンにTypeKeyを登録してください。

Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) 'Sleepを使えるようにします

Const WTMiliSec = 1000     '待ち時間 ミリ秒(少し長いけど、500ミリではエラーになることがあるため)
                            '(実情に合わせて確実な数字で)
Sub GetCromeTabTitle()

   On Error GoTo on_error
   
   Sleep WTMiliSec * 3 'ウインドウ切り替え時間を3秒確保、この間にChromeの目的のタブをアクティブにします
   
   SendKeys ("^d") '(大文字のDではだめ) ショートカットキー control + d で「ブックマークを追加しました」の小窓を表示させます
                    '小窓が表示されるまで時間がかかるので、ここでは長めに待機します
   Sleep WTMiliSec * 2
   
   SendKeys ("^c") '(小文字cで) control + c で タブタイトルをコピーします
   Sleep WTMiliSec 'フォーカス移動の時間を確保
   
   SendKeys ("+{TAB}") 'shift + tab で閉じるボタンへ移動
   Sleep WTMiliSec 'フォーカス移動の時間を確保
   
   SendKeys ("+{TAB}") 'さらに shift + tab で削除ボタンへ移動
   Sleep WTMiliSec 'フォーカス移動の時間を確保
   
   SendKeys ("{ENTER} ") '削除ボタンを押す
   SendKeys "{NUMLOCK}" 'なぜかNumLockが解除されるので、復帰設定します

   AppActivate Application.Caption 'エクセルに戻る
   Dim CB As DataObject 'Microsoft Forms 2.0Object Library に、参照設定でチェックを入れておいてください
   Set CB = New DataObject
   CB.GetFromClipboard
   Range("B1").Value = CB.GetText 'クリップボードから取り込んで、B1にタブタイトルを入れます
   
   Exit Sub
on_error:
   MsgBox ("エラー" & Err.Number)
End Sub

Sub TypeKey() '事前に送り先のタブとテキストエリアが選択されている必要があります
    Dim t_win, str As String
    
    str = ActiveCell.Text '選択セルの文字列をタイプします(漢字でも構いません)
    If Len(str) < 1 Then
        MsgBox "セルは空白です"
        Exit Sub
    End If
    t_win = Left(Range("B1").Text, 12)       'AppActivateに渡す文字列はなぜか、12文字(2010は19文字)以下でないと、エラーになります
                                            '実際は、もっと短くても構わないようです
    
    On Error GoTo on_error
    
    AppActivate t_win 'B1のタイトルのクロームタブに移動します
    Sleep WTMiliSec  'ウインドウ切り替わり時間を確保
    SendKeys str
    
    SendKeys "{NUMLOCK}" 'なぜかNumLockが解除されるので、復帰設定します
    
    Exit Sub
on_error:
   MsgBox ("エラー" & Err.Number)
End Sub

このマクロを使うためには、visual basic editorで、ツール、参照設定から、Microsoft Formes 2.0Object Library に、参照設定でチェックを入れることが、必要になります。

エディターで参照設定をクリック

Microsoft Forms 2.0Object Library にチェックを入れる

これをしないと、エラーになってしまいます。

AppActivate Application.Caption ‘エクセルに戻る で苦労した

AppActivateの使い方で、けっこう苦労しました。

クロームのタブタイトルを取得するのに、エクセルからクロームにクリックで移動するのは、やむを得ないとしても、タイトルを取得したら自動的にエクセルに戻ってほしいですよね。

どうしたら戻れるのか、あれこれのサイトを行ったり来たりしましたが、最終的に

ExcelVBAで他のアプリを起動したあとに、マクロ動かしてるExcelを手前にもってきたい件

のおかげで、解決しました。ありがとうございます。

このAppActivateですが、エクセルからクロームのタブに移動するのにも使えました。ただし、エクセルでは、移動先のタブは、予めクロームの中では選択されている必要があります。引数titleの文字数が2010では19文字まで、2021では12文字まで、という制限があるのには、最初は驚きました。Left に数字をいろいろ入れて、やってみた結果です。

マクロなしエクセルブック

セキュリティーを考えて、マクロなしにしました。結座藤麓のダウンロードは、こちらから。 (前述しましたように、マクロは上記のものをコピーして、使ってください)

エクセルがなくても使える、小さなアプリも作りました。

結座藤麓(ゆうざとうろく)Ⅱ

です。見て行ってください。

コメント

タイトルとURLをコピーしました