前提・実現したいこと
VBAのサンプルコードを標準モジュールにコピペし、かつ必要なライブラリーの参照設定を行っても、いざ実行すると、エラーになります。
エラーの種類は、実行時エラー 1004'7Range'メッソッドは失敗しました:'global'オブジェクトです。
ここに質問の内容を詳しく書いてください。
VBAでHTMLサイトやWPサイトからコンテンツの抽出作業をおこなっています。
標準モジュールに、コードをコピペし実行したところ以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ 実行時エラー 1004'7Range'メッソッドは失敗しました:'global'オブジェクトと表示されます。
該当のソースコード
VBA
ソースコード
Option Explicit
Private Sub CommandButton1_Click()
'Dim driver As New Selenium.ChromeDriver
Dim driver As New Selenium.PhantomJSDriver
Dim elmDoc As WebElement Dim OutputTarget As Range Dim sKeyWord As String Range("4:999").Clear 'サンプルプログラムなので手抜き
** sKeyWord = Range("SearchKeyWord")**
If sKeyWord = "" Then
Exit Sub
End If
Set OutputTarget = Range("OutputArea") With driver .Start '.Window.SetSize 1920, 1080 .Get "https://www.library.toyota.aichi.jp/" '豊田市図書館のHPにアクセス '検索するキーワードを投入 .FindElementById("kensaku_keyword").SendKeys Range("SearchKeyWord") & vbCrLf 'スクレイピング開始 'doclistの中に1冊ごとにdoc,doc,doc… という繰り返しで本の情報が入っている For Each elmDoc In .FindElementByClass("doclist").FindElementsByClass("doc") '各CSS名にアクセス OutputTarget.Cells(, 1) = elmDoc.FindElementByClass("doc-title").Text '本のタイトル Set OutputTarget = OutputTarget.Offset(1) OutputTarget.Cells(, 2) = elmDoc.FindElementByClass("doc-writer").Text '著者 Set OutputTarget = OutputTarget.Offset(1) OutputTarget.Cells(, 2) = elmDoc.FindElementByClass("doc-recap").Text '本の概略 Set OutputTarget = OutputTarget.Offset(1) OutputTarget.Cells(, 2) = elmDoc.FindElementByClass("doc-available").Text '貸出可否 Set OutputTarget = OutputTarget.Offset(2) Next End With
End Sub
### 試したこと VBAのコードだけでなくVBAのプログラミングされたエクセルブック全体をDLして実行したところ、正しく動きました。 ### 補足情報(FW/ツールのバージョンなど) chromedriverは、最新のバージョンをインストールしてます。 デバッグボタンをクリックすると、8行目の sKeyWord = Range("SearchKeyWord")の部分が黄色くなります。 なにか関数とか、変数の定義を宣言していないということでしょうか? プログラミング初心者ですので、よろしくお願いいたします。 ここにより詳細な情報を記載してください。
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
Option Explicit
Private Sub CommandButton1_Click()
'Dim driver As New Selenium.ChromeDriver
Dim driver As New Selenium.PhantomJSDriver
Dim elmDoc As WebElement
Dim OutputTarget As Range
Dim sKeyWord As String
Range("4:999").Clear 'サンプルプログラムなので手抜き
sKeyWord = Range("SearchKeyWord")
If sKeyWord = "" Then
Exit Sub
End If
Set OutputTarget = Range("OutputArea")
With driver
.Start
'.Window.SetSize 1920, 1080
.Get "https://www.library.toyota.aichi.jp/" '豊田市図書館のHPにアクセス
'検索するキーワードを投入
.FindElementById("kensaku_keyword").SendKeys Range("SearchKeyWord") & vbCrLf
'スクレイピング開始
'doclistの中に1冊ごとにdoc,doc,doc… という繰り返しで本の情報が入っている
For Each elmDoc In .FindElementByClass("doclist").FindElementsByClass("doc")
'各CSS名にアクセス
OutputTarget.Cells(, 1) = elmDoc.FindElementByClass("doc-title").Text '本のタイトル
Set OutputTarget = OutputTarget.Offset(1)
OutputTarget.Cells(, 2) = elmDoc.FindElementByClass("doc-writer").Text '著者
Set OutputTarget = OutputTarget.Offset(1)
OutputTarget.Cells(, 2) = elmDoc.FindElementByClass("doc-recap").Text '本の概略
Set OutputTarget = OutputTarget.Offset(1)
OutputTarget.Cells(, 2) = elmDoc.FindElementByClass("doc-available").Text '貸出可否
Set OutputTarget = OutputTarget.Offset(2)
Next
End With
End Sub
すいません。
こちらのサイトがまだ不慣れで、ご迷惑をおかけします。
ここと、ご指摘された<code>をクリックしてでてきた画面と双方に、コードを貼り付けました。どうかよろしくお願いいたします。
okito
コードは「コードの挿入」で記入しましょう。
コードの引用元を明記しましょう。
了解しました。
マークダウンのcodeのことです。
分からない方は下記参考に。
https://teratail.com/questions/238564