EXCEL VBA
EXCEL 2003 で動作の確認をしています。
◆「要素の調査」について 追記しました。
エクセルのセルの内容を、Google 翻訳 から抽出してメッセージに表示。
翻訳したいときに、IE起動する手間を省く。
ちょっと、翻訳したい時に使用する。
書き換えるときは、「はい」
書き換えないときは、「いいえ」
この設定がされていないとエラーになります。
エクセルから AUTOCADや、その他のソフトを制御するときにも、この参照設定がないとエラーになります。
◆Alt+F8 で、VBE(Visual Basic Edtor) を起動して、ツールの参照設定をクリック
◆参照設定の画面が開くので、下記の2つを選択
これは、エクセルのバージョンによって異なります。
たくさんあるので、
探すときは、入力モードを、無変換にしておいて、「M」を入力すると、Maicrosoft 関係の行に、移動しますので、そこからは、↓で探します。
◆Google翻訳のボタンの探し方は、ブラウザの「要素を検証」で探します。
画面上のどこかで、右クリックすると、「要素の検証」があります。
これは、Fire Foxが、分かりやすかったです。
◆要素の検証について追記します。
Chromeでは「要素の検証」で、Fire Foxでは、「要素を調査」という名前です。
Fire FoxのGoogle 翻訳の画面の文字を入力する左側のIDを見てみます。
下記のコードの、"source" の部分になります。
objIE.document.getElementById("source").Value = WD001
左側の窓のところで、右クリックのメニュから、「要素を調査」をクリックします。
窓以外がグレイアウトして、窓の部分が白くなっています。
この状態で、画面の右したの「HTML」をクリックすると、このページのHTMLを確認出来るようになります。
選択されている 部分のコードが表示されています。
textarea id = "soure" と、表示されているので、IDは、「sourse」 ということが分かります。
同様に、右側の翻訳結果が表示される窓は、span id = "resoult_box" ということがわかります。
下記のコードでは、この1行の部分になります。
ReadWd = objIE.document.getElementById("result_box").innerText
翻訳結果を、VBAで取り込むことが出来ます。
Option Explicit
'Google翻訳
Sub Google翻訳()
Dim objIE As Object
Dim i
Dim WD001
Dim RowAc
Dim ColumnAc
Dim ReadWd
Set objIE = CreateObject("InternetExplorer.Application") 'IE起動
objIE.Visible = False
objIE.navigate "https://translate.google.co.jp/?hl=ja" 'Googleに接続
Call IEWait(objIE) 'IEを待機
WD001 = ActiveCell.Value
RowAc = ActiveCell.Row
ColumnAc = ActiveCell.Column
objIE.document.getElementById("source").Value = WD001
Call IEButtonClick(objIE, "翻訳") ' ボタンを押す
Call WaitFor(2) ' 停止
ReadWd = objIE.document.getElementById("result_box").innerText
objIE.Quit 'IE終了
Dim rc As VbMsgBoxResult
rc = MsgBox("書換?" & ReadWd, vbYesNo + vbQuestion)
If rc = vbYes Then
Cells(RowAc, ColumnAc) = ReadWd
End If
Set objIE = Nothing
End Sub
'IEを待機する関数
Function IEWait(ByRef objIE As Object)
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Loop
End Function
'指定した秒だけ停止する関数
Function WaitFor(ByVal second As Integer)
Dim futureTime As Date
futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Function
'ボタンを押す関数
Public Function IEButtonClick(ByRef objIE As Object, buttonValue As String)
Dim objInput As Object
For Each objInput In objIE.document.getElementsByTagName("INPUT")
If objInput.Value = buttonValue Then
objInput.Click
Exit For
End If
Next
End Function
コメント
コメントを投稿