食っちゃ寝システムができるまで

「食っちゃ寝システム」ができるまでの、棚卸&備忘録です。

「食っちゃ寝システム第一弾」(2):中間報告と作成物

「食っちゃ寝システム第一弾」(2):中間報告

1.食っちゃ寝システムに向けて

「食っちゃ寝システム第一弾」に関連して、活動したこと。

  1. Python3環境の構築
  2. はてなブログのアップデート
  3. VBAでマクロ作成

 ・・・そして仕事を辞めたこと(笑)

特に、辞める間際に仕事に関係して作業効率化のVBAマクロを立続けに作りました。もちろん食っちゃ寝の精神は忘れず(笑)。改めて作ってみると、いろんな発見があったので忘れないうちに記録してます。

 

 

2.作成したもの備忘録

 

①webデータベース上の入力値を読込判定するマクロ

画面や項目は、独自のデータベース内容に絡むので内容そのままの転載はしませんが・・・

 

独自のWebデータベースにアクセスするため、ページにそのままのアクセスが難しく

どのようにしたらと考えましたが・・・

  開いているのを読み込めばいいやん!!

ってことで

セキュリティを解除したページを直接読み込んで取込む方式で解決しました。

 

 <事前準備>

IE操作するため、ツール⇒参照設定で

f:id:taikobox:20181119190833p:plain


Microsoft HTML Object library

Microsoft Internet Controls

 を使用します。

 

[参照設定] ダイアログ ボックス | Microsoft Docs

 

www.atmarkit.co.jp

 

開いているエクスプローラーの判定⇒ページ上のボタンクリックするまでの処理を自動で行うために作成しました

以下その処理の順番です。

 

1)インターネットエクスプローラー確認

 Set shl = CreateObject("Shell.Application")'①シェルオブジェクトセットし開いているエクスプローラー確認

 ~

2)ページ判定

 For i = 0 To objIE.document.getElementsByTagName("h3").Length - 1 'h3要素を順次確認

 ~

3)指定ページにジャンプするため画面上のボタンをクリックする処理

 If (txtFlag = False And PageFlag = True And ckWAVEtype = "【物件ページ】") Then '該当ページがあるかの判定

 ~

 

===========================================

Sub ImportIE(ByVal ckWAVEtype As String) ', ByRef a As String

Dim shl As Object 'シェルオブジェクト生成
Dim htmlDoc As HTMLDocument
Dim win As Object, getFlag, txtFlag, PageFlag As Boolean
Dim targetTitle As String 'タイトル確認
Dim objTag As Object '指定ボタン押す
Dim objLink As Object '指定リンクを押す

Set shl = CreateObject("Shell.Application")'①シェルオブジェクトセットし開いているエクスプローラー確認

targetTitle = "*******" 'Webサイトのタイトル

For Each win In shl.Windows '起動中のウィンドウを順次確認

'IEエクスプローラがシェルで取得されるため、IEのみ処理

If TypeName(win.document) = "HTMLDocument" Then 'HTML形式の時読込

If win.document.Title = targetTitle Then 'Webサイトのタイトルがある場合

Dim objIE As New InternetExplorer
Set objIE = win 'Webサイトのタイトルがある場合 obiIEオブジェクトに格納

getFlag = True '正しく取得できたフラグをセット

Exit For

End If
End If

Next

If getFlag = False Then
MsgBox "目的のWebページが開かれていません。⇒IE開きます", vbExclamation
Call IEOpen
Exit Sub
End If

'②ページチェック
'HTMLタグがh3要素内の文言を判定し、対象のページか判断する
For i = 0 To objIE.document.getElementsByTagName("h3").Length - 1 'h3要素を順次確認
'別で指定されている変数ckWAVEtypeあればtxtFlag⇒true
If (objIE.document.getElementsByTagName("h3")(i).innerText = ckWAVEtype) Then
txtFlag = True
Exit For
'「判定用文言」あればがあればPageFlag⇒true
ElseIf (objIE.document.getElementsByTagName("h3")(i).innerText = "判定用文言") Then
PageFlag = True
Else
End If

Next i

'HTMLタグがh3要素が「進捗」で「***」移動してない場合⇒「Web上のボタン」をクリックして一度スクレイピングの処理を抜ける
'各種登録の場合、データのみクリップボードに格納し、物件詳細に戻る。例:「Web上のボタン」⇒詳細へ、もどる

If (txtFlag = False And PageFlag = True And ckWAVEtype = "【物件ページ】") Then '該当ページがあるかの判定
'送信(submit)をクリック
For Each objTag In objIE.document.getElementsByTagName("input") 'ネームタグに"input"あるかの判定

If InStr(objTag.outerHTML, "Web上のボタン") > 0 Then 'クリックするボタンがあるかの判定

'送信ボタンクリック
objTag.Click

'ループ脱出⇒タイミングよってはログアウトしているときがあるので一度確認必要
MsgBox ("ページ切り替えます。切り替わったページ確認して下さい")
GoTo ExitHTMLscraping


End If
Next
Else
End If


'<中略>


ExitHTMLscraping:
'エラー及び処理中断時のスキップ場所
'オブジェクト開放
Set shl = Nothing
Set win = Nothing
Set htmlDoc = Nothing


End Sub

 

 ====================================================

 

画面上のボタンをクリックして、次ページに自動で移動は

objTag.Click

で行っていますが。

submit コマンドでも同じこと可能です。

ただしClickコマンドの方が何かと融通が利くと思いますのでこちらを採用。

 

ちなみに下記のサイトにVBAでのIE操作が細かく記載されており

非常にありがたく参照させていただきました

www.vba-ie.net

 

続きは別ページで