●ExcelVBA+UWSC ~ Excelに保持している文章を、LINEにて、相手を自動検索してトークに投稿(送信)する方法
★注意
LINEはパソコン用のLINEです。
スマホ用のLINEでは、今回はできません。
★下準備
LINEをログインしてあらかじめ開いておく必要があります。
パソコン用LINEのトーク画面をです。
Excelのほうも、もちろん、セルの値をLINEの検索ボックスに転記するので、開いておくことになります。
★UWSCのプログラム
録画操作で生成されたコードをマウスの動きを削って利用しています。
AIはChatGPTもジェミニもUWSCの情報が少ないらしく、メッチャクチャで、まともなコードが全然作れなかったので・・・。(なのに自信満々だった。)
仕方なく・・・。
Excelのセルに書かれた文字を直接、LINEの検索ボックスに転記することを可能にしています。(UWSCではCOMオートメーションが使えるので。)
今回はサンプルなのでそれしかしてませんが、もちろん、セルに書かれた文字を直接LINEの投稿欄に転記することも可能です。
※ただ、定数は単語の定数を使うとエラーになるので、その単語に割り当てられた「数字」を定数に書く必要があります。(引数に使う定数などは特に。)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
' ' //==================================== //メイン //==================================== FUKIDASI("2秒後に処理が始まります。送信準備が完了するまでしばらくお待ちください。 ■■■ 「Alt+F2」で中断できます。 ■■■") sleep(2) // 無料版で開いているExcelを取得する裏ワザ excel001 = GETACTIVEOLEOBJ("Excel.Application") //xlFName001 = excel001.Worksheets("Sheet1").Range("G1").Value //Excel側で、G1にThisWOrkbook.Nameを転記してこのコードを使ってもよい。 xlFName001 = excel001.Workbooks(1).Name //sleep(2) //msgbox(xlFName001) //繰り返す。人数分。 FOR i = 1 TO 6 i_Num01 = i + 1 s_AddrStr = "A" + i_Num01 //MSGBOX(i_Num01) //MSGBOX(s_AddrStr) PepeatTalkSend01(s_AddrStr,xlFName001) NEXT MSGBOX("完了しました!!") //==================================== //以下、関数 //==================================== Procedure PepeatTalkSend01(CellAddr,ExcelFileName01) // 起動中のExcelオブジェクトを取得 // 無料版で開いているExcelを取得する裏ワザ excel = GETACTIVEOLEOBJ("Excel.Application") book = excel.Workbooks(ExcelFileName01) cellValue = book.Worksheets("Sheet1").Range(CellAddr).Value book.Worksheets("Sheet1").Range(CellAddr).Interior.Color = 65535 //黄色 //msgbox("ただいまのセルアドレスは " + CellAddr) IF cellValue = "" then msgbox("検索対象が無くなったので終わります。") Exit ELSE ENDIF MSGBOX("今から検索するのは 「" + cellValue + "」 さんです。") ret = MSGBOX("このまま続けてもよいですか?", BTN_YES OR BTN_NO) //msgbox(ret) IF ret = 4 THEN //MSGBOX("続行します") ELSEIF ret = 8 THEN EXITEXIT ENDIF //TALKSEND_01("名前の検索語句") TALKSEND_01(cellValue) book.Worksheets("Sheet1").Range(CellAddr).Interior.ColorIndex = -4142 FEND //==================================== //以下、関数 //==================================== Procedure TALKSEND_01(Name01) // FUKIDASI("処理が始まりました。送信準備が完了するまでしばらくお待ちください。 ■■■ 「Alt+F2」で中断できます。 ■■■") LineId=getid("LINE","Qt663QWindowIcon") //Msgbox("LINEの画面に") //検索ボックスをクリックして点滅カーソルを配置 ACW(GETID("LINE","Qt663QWindowIcon"),77,51,742,490,0) BTN(LEFT,DOWN,192,130,50) BTN(LEFT,UP,194,130,50) BTN(LEFT,CLICK,194,130,50) //検索語句の内容消去 KBD(VK_CTRL, DOWN) KBD(VK_A) KBD(VK_CTRL, UP) KBD(VK_DELETE) //検索語句の入力 //検索がかかる SENDSTR( LineId, Name01) sleep(3) //ヒットするまで待つ //ヒットしたリストをいったん下にしてその後上に戻す。 //トークの中身(右側ペイン)が正しく切り替えるために。 //完全一致で検索すれば、トップが本人なので KBD(VK_TAB) //下のリストペインへ移動 sleep(2) KBD(VK_DOWN) //いったん、下の人に移動 sleep(1) KBD(VK_DOWN) //いったん、下の人に移動。ここでトーク内容も切り替わる。//点滅カーソルも一緒に移動される。 sleep(1) KBD(VK_DOWN) FOR i = 1 TO 10 KBD(VK_UP) NEXT //トークの中身(右側ペイン)が切り替わるまで待つ //正常に機能せねば、ここで手動操作する sleep(3) //念のため、直接入力ボックスをクリックして点滅カーソルを表示 ACW(GETID("LINE","Qt663QWindowIcon"),77,51,742,490,0) BTN(LEFT,DOWN,507,438,188) BTN(LEFT,UP,507,438,47) BTN(LEFT,CLICK,679,453,63) //念のため、入力ボックスの内容消去 KBD(VK_CTRL, DOWN) KBD(VK_A) KBD(VK_CTRL, UP) KBD(VK_DELETE) // //トーク内容入力 // SENDSTR( LineId, "今LINE用にプログラム書いてて自動テスト送信です。" + CHR(13) + CHR(10) + "ごめんね。今から何回も送る。") //トーク文章をいったんクリップボードへ送る。改行コードを無視されたくないため SENDSTR(0, "今LINE用にプログラム書いてて自動テスト送信です。" + CHR(13) + CHR(10) + "ごめんね。今から何回も送る。", TRUE) // LINEの入力ボックスにフォーカスがある状態で Ctrl + V を押す(文言コピペ) KBD(VK_CTRL, DOWN) KBD(VK_V, CLICK) KBD(VK_CTRL, UP) //5秒待つ //FOR i = 5 TO 1 STEP -1 // FUKIDASI("残り " + i + " 秒") // SLEEP(1) //NEXT FOR i = 20 TO 1 STEP -1 FUKIDASI("■■■■■■■■■■■■■■■■■■■■■■■■■■" + CHR(13) + CHR(10) + "送信準備完了。" + CHR(13) + CHR(10) + CHR(13) + CHR(10) + " ただいま送信待ちです(20秒)。 " + CHR(13) + CHR(10) + " 残り " + i + " 秒です。" + CHR(13) + CHR(10) + + " 今なら「Alt+F2」で中断できます。" + CHR(13) + CHR(10) + "■■■■■■■■■■■■■■■■■■■■■■■■■■") SLEEP(1) NEXT //トーク送信 KBD(VK_ENTER) //念のため、検索ボックスにTABで戻る。 KBD(VK_TAB) sleep(0.5) KBD(VK_TAB) sleep(0.5) KBD(VK_TAB) //次の人の準備のため、2秒待つ。 SLEEP(2) FEND ' ' |
★UWSCのプログラムを呼び出すためだけの、Excel側のプログラム。
今のところ、それだけしかしてません。
Excelのセルの操作は、UWSC側でCOMオートメーションでやるので。
COMオートメーションが使えるフリーウェアなら、UWSCに類似のRPA?的なフリーウェアでもOKだと思います。もちろん、その場合は以下のコードは使えませんけど・・・。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' ' Sub ボタン1_Click() ActiveSheet.Range("G1") = ThisWorkbook.Name Call Shell("C:\uwsc5302\uwsc\UWSC.exe D:\1\LINEでシフト連絡.uws", vbNormalFocus) DoEvents End Sub ' ' |
|
1 2 3 4 5 6 |
' ' ' ' |