Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


869 / 13645 ツリー ←次へ | 前へ→

【32289】貼り付けたHTMLのテキストを取得したい NJ 05/12/12(月) 11:22 質問[未読]
【32296】Re:貼り付けたHTMLのテキストを取得したい Kein 05/12/12(月) 12:38 回答[未読]
【32300】Re:貼り付けたHTMLのテキストを取得したい NJ 05/12/12(月) 13:47 質問[未読]
【32301】Re:貼り付けたHTMLのテキストを取得したい Kein 05/12/12(月) 14:15 発言[未読]
【32304】Re:貼り付けたHTMLのテキストを取得したい NJ 05/12/12(月) 16:26 質問[未読]
【32312】Re:貼り付けたHTMLのテキストを取得したい Kein 05/12/12(月) 17:15 発言[未読]
【32317】Re:貼り付けたHTMLのテキストを取得したい ichinose 05/12/12(月) 18:16 発言[未読]
【32325】Re:貼り付けたHTMLのテキストを取得したい NJ 05/12/12(月) 20:01 お礼[未読]
【77836】Re:貼り付けたHTMLのテキストを取得したい YH 16/1/8(金) 23:11 質問[未読]
【77842】Re:貼り付けたHTMLのテキストを取得したい γ 16/1/9(土) 18:10 発言[未読]
【77843】Re:貼り付けたHTMLのテキストを取得したい YH 16/1/9(土) 19:19 お礼[未読]

【32289】貼り付けたHTMLのテキストを取得したい
質問  NJ  - 05/12/12(月) 11:22 -

引用なし
パスワード
   いつも参考にさせていただいております。

ブラウザ(InternetExplorer等)に表示されているテキスト入力欄
(input type="text"で表示しているフォームオブジェクト)を
ブラウザ上でコピーし、Excelに貼り付けると入力されている内容ごと
テキスト入力欄が貼り付けられると思います。
その入力内容を取得する方法がわかりません。

入力欄自体は、ShapeオブジェクトのmsoOLEControlObjectというタイプであることまでは
分かりましたが、テキストはどのようにすれば取得できるのでしょうか。
デバッグし、ウォッチ式で値を確認しましたが、探し出せない状況です。

ご存知の方がいらっしゃいましたら、ご指導よろしくお願いいたします。

【32296】Re:貼り付けたHTMLのテキストを取得したい
回答  Kein  - 05/12/12(月) 12:38 -

引用なし
パスワード
   HTMLコードを取得する、ということで良ければ IE のインスタンスを生成しなくても

Dim oHttp As Object
Dim StHTML As String
Const MyURL As String = "http://www.Yahoo.co.jp/"

Set oHttp = CreateObject("Microsoft.XMLHTTP")
oHttp.Open "GET", MyURL, False
oHttp.Send
StHTML = oHttp.ResponseText
Set oHttp = Nothing

というコードで、変数 StHTML に格納できます。処理効率が良いので速いです。

【32300】Re:貼り付けたHTMLのテキストを取得したい
質問  NJ  - 05/12/12(月) 13:47 -

引用なし
パスワード
   ご回答ありがとうございます。
この場合、指定したアドレスのHTMLページをそのまま読み込むということですよね。
確かにこの方法が使えれば…

ただ今回、ページの一部分だけを使いたいということで、
シート上にブラウザの一部分をカット&ペーストしてしまうのです。
いったん、シートをHTML形式に保存して、テキスト形式で読み込んで<input type="text"〜>のvalue部分を取得する方法で行うしかないでしょうか?

もしその他の方法をご存知でしたら、教えてください。

よろしくお願いします。

【32301】Re:貼り付けたHTMLのテキストを取得したい
発言  Kein  - 05/12/12(月) 14:15 -

引用なし
パスワード
   >シートをHTML形式に保存
シート "に" 保存する、ということですか ? そんな必要は無いですよ。
変数 StHTML に全コードが保存されているので、そこから InStr関数と
Mid関数を使って目的の語句を切り出せば良いのです。その際はもちろん、
InStr関数で目的の語句の位置を一意で発見できるよう、検索文字の選定に
注意を払う必要がありますが。

【32304】Re:貼り付けたHTMLのテキストを取得したい
質問  NJ  - 05/12/12(月) 16:26 -

引用なし
パスワード
   質問が下手ですみません。

下記の作業を前提として、マクロで対応したいと考えております。
1.Internet Explorerであるサイトを表示します
(例えば、質問箱の新規投稿フォームなど)
2.ブラウザ上でテキストフィールドを含めた内容をコピーします。
3.Excelのシート上に2.をペースト
(ExcelのシートにHTMLのテキストフィールドオブジェクトが張り付けられます)

3.の状態でマクロを起動し、テキストフィールドに入力されている内容を取得したいのです。
(認証を経由した先の画面のHTMLを取得したいため、URLを指定してHTMLソースを取得するわけにはいかない状況にあります)

よろしくお願いいたします。

【32312】Re:貼り付けたHTMLのテキストを取得したい
発言  Kein  - 05/12/12(月) 17:15 -

引用なし
パスワード
   何かイマイチ理解できないのですが・・
>Internet Explorerであるサイトを表示
した段階では、まだ各種のボックスに値が入ってませんよね ? 例えば
>質問箱の新規投稿フォーム
なら、いちおう名前の欄だけは、記憶されたHNが入力された状態で出ますが・・。
で、そのように名前の欄以外のボックスは"中身が真っ白"な状態で
>テキストフィールドを含めた内容をコピー
すると、画像オブジェクトとして貼り付けることになりますから、それだけでも
文字列の取得は困難になります。だいいち中身が空のボックスをコピーしたところで
何の意味も無いはずですが・・。なおかつそこで・・
>認証を経由した先の画面
というワケの分からん処理が出てくると、ますます何がしたいのか分からなく
なります。「質問箱の新規投稿フォーム」を例に出したのなら、その場合に
「認証」というのは何を指しているのでしょーか ?
とにかく希望する処理の全体を、誰が見ても分かるように説明して下さい。

【32317】Re:貼り付けたHTMLのテキストを取得したい
発言  ichinose  - 05/12/12(月) 18:16 -

引用なし
パスワード
   ▼NJ さん、Keinさん、こんばんは。

>下記の作業を前提として、マクロで対応したいと考えております。
>1.Internet Explorerであるサイトを表示します
>(例えば、質問箱の新規投稿フォームなど)
>2.ブラウザ上でテキストフィールドを含めた内容をコピーします。
>3.Excelのシート上に2.をペースト
>(ExcelのシートにHTMLのテキストフィールドオブジェクトが張り付けられます)
>
>3.の状態でマクロを起動し、テキストフィールドに入力されている内容を取得したいのです。
>(認証を経由した先の画面のHTMLを取得したいため、URLを指定してHTMLソースを取得するわけにはいかない状況にあります)
ひょっとしてこれですか?


'=======================================================
Sub testtest()
  Dim shp As OLEObject
  With ActiveSheet
    For Each shp In .OLEObjects
     If UCase(TypeName(shp.Object)) = UCase("htmltext") Or UCase(TypeName(shp.Object)) = UCase("htmltextarea") Then
       MsgBox shp.Object.Value
       End If
     Next
    End With
End Sub


アクティブシートにHtml貼付けを行った後の処理です。
これは、このサイトの新規投稿画面のテキストを何とか取得できるように
したものです。
確認してください。

他には、こんな方法もいかがですか?

'==============================================================
Sub test()
  Dim IE
  Dim idoc As Object
  Dim idx As Long
  Dim obj As Object
  Cells.Clear
  Set IE = CreateObject("InternetExplorer.Application")
  With IE
    .Visible = True
    .navigate "http://www.vbalab.net/vbaqa/c-board.cgi?cmd=psn;id=excel"
    Do While .Busy = True Or .readyState <> 4
     Loop
    AppActivate Application.Caption
    ThisWorkbook.Activate
    ans = MsgBox("準備ができたらOKを押して", vbOKCancel)
    If ans <> 1 Then Exit Sub
    Set idoc = .document
    On Error Resume Next
    With idoc
     For Each obj In idoc.all
       Err.Clear
       tp = obj.Type
       If Err.Number = 0 And (tp = "text" Or tp = "textarea") Then
        If obj.Value <> "" Then
          ThisWorkbook.Worksheets(1).Cells(idx + 1, 1).Value = obj.Value
          idx = idx + 1
          End If
        End If
       Next
     End With
    Set idoc = Nothing
    On Error GoTo 0
    End With
  IE.Quit
  Set IE = Nothing
End Sub
このサイトの新規登録画面が表示されますから、
適当に入力して
「送信」する前にExcel側の「OK」ボタンを押してみてください。

確認してみてください。

【32325】Re:貼り付けたHTMLのテキストを取得したい
お礼  NJ  - 05/12/12(月) 20:01 -

引用なし
パスワード
   ichinoseさん、こんばんは。

ご回答ありがとうございます。
いただいたソースで試しましたところ、希望する動作をしました。
大変助かりました。ありがとうございました。

Keinさん

要領を得ない質問をしまして、申し訳ありませんでした。
今後は質問の仕方に気をつけます。

【77836】Re:貼り付けたHTMLのテキストを取得したい
質問  YH  - 16/1/8(金) 23:11 -

引用なし
パスワード
   皆様、はじめまして。彷徨い続けて、ここへ流れてきました。
こういう場所への投稿は初めてですので、失礼があったらお許しください。
本題へ入ります。
下記のマクロですが、MsgBoxに表示させるのではなく、
例えば、セルA1から下へ、貼り付けていくのにはどうすればよいでしょうか?
初心者で大変困っております。
どうぞよろしくお願いします。

>'=======================================================
>Sub testtest()
>  Dim shp As OLEObject
>  With ActiveSheet
>    For Each shp In .OLEObjects
>     If UCase(TypeName(shp.Object)) = UCase("htmltext") Or UCase(TypeName(shp.Object)) = UCase("htmltextarea") Then
>       MsgBox shp.Object.Value
>       End If
>     Next
>    End With
>End Sub
>
>

【77842】Re:貼り付けたHTMLのテキストを取得したい
発言  γ  - 16/1/9(土) 18:10 -

引用なし
パスワード
   > 皆様、はじめまして。彷徨い続けて、ここへ流れてきました。
> こういう場所への投稿は初めてですので、失礼があったらお許しください。
> 本題へ入ります。
> 下記のマクロですが、MsgBoxに表示させるのではなく、
> 例えば、セルA1から下へ、貼り付けていくのにはどうすればよいでしょうか?
> 初心者で大変困っております。
> どうぞよろしくお願いします。
>
> >'=======================================================
> >Sub testtest()
> >  Dim shp As OLEObject
> >  With ActiveSheet
> >    For Each shp In .OLEObjects
> >     If UCase(TypeName(shp.Object)) = UCase("htmltext") Or UCase(TypeName(shp.Object)) = UCase("htmltextarea") Then
> >       MsgBox shp.Object.Value
> >       End If
> >     Next
> >    End With
> >End Sub
> >

YHさんへ。

MsgBox shp.Object.Value
のかわりに
k = k + 1
Cells(k,1).Value = shp.Object.Value
とでもすればいいんじゃないのかなあ。

-----
>彷徨い続けて、ここへ流れてきました。
どのあたりを彷徨ったのですか?
ここは、場末の行き止まりなのかな?
なぜここに?

さておき。
なぜこれほど古いものにコメントをつけるのですか?
意味もなく昔のものを掘り出すのは、やめたほうがいいですね。

スレッドには、それぞれテーマが決まっているのですから、
別人が勝手に違う話を紛れ込ませるのはマナー違反です。

あなたが新しい質問を建てて、
単にコードだけコピーペイストしたらいいじゃありませんか。
以前の議論を参照しないといけないことでもないでしょ?
仮にそうであったら、リンク先を書けばいいだけです。

>例えば、セルA1から下へ、貼り付けていくのにはどうすればよいでしょうか?
書込先を移動していくという一般的な話なら、
なにも古い記事を持ち出す必要もないはず。
どのような経緯で、この古い記事に行き当たったのですかね。

以前の投稿者が、なんらかの理由で掘り起こしでもしているのか。
いずれにしても奇矯な行動に映るので、普通は誰も敬遠してしまうよ。
(私は変わり者なんでコメントしたけどね)

続けて質問がもしあるなら、
そして、削除のためのパスワードが設定してあったらという前提だが、
あなたの発言を削除して、新しいものを建てたほうが良いと思う。
私も、あえて一つ前のものにコメントし、削除できるようにしておく。

【77843】Re:貼り付けたHTMLのテキストを取得したい
お礼  YH  - 16/1/9(土) 19:19 -

引用なし
パスワード
   ▼γ さん:

γ 様。
厳しくも温かきご意見ありがとうございます。そして、大人の対応をしていただき感謝します。勉強になりました。

>> 皆様、はじめまして。彷徨い続けて、ここへ流れてきました。
>> こういう場所への投稿は初めてですので、失礼があったらお許しください。
>> 本題へ入ります。
>> 下記のマクロですが、MsgBoxに表示させるのではなく、
>> 例えば、セルA1から下へ、貼り付けていくのにはどうすればよいでしょうか?
>> 初心者で大変困っております。
>> どうぞよろしくお願いします。
>>
> > >'=======================================================
> > >Sub testtest()
> > >  Dim shp As OLEObject
> > >  With ActiveSheet
> > >    For Each shp In .OLEObjects
> > >     If UCase(TypeName(shp.Object)) = UCase("htmltext") Or UCase(TypeName(shp.Object)) = UCase("htmltextarea") Then
> > >       MsgBox shp.Object.Value
> > >       End If
> > >     Next
> > >    End With
> > >End Sub
> > >
>
>YHさんへ。
>
>MsgBox shp.Object.Value
>のかわりに
>k = k + 1
> Cells(k,1).Value = shp.Object.Value
>とでもすればいいんじゃないのかなあ。
>
>-----
>>彷徨い続けて、ここへ流れてきました。
>どのあたりを彷徨ったのですか?
>ここは、場末の行き止まりなのかな?
>なぜここに?
>
>さておき。
>なぜこれほど古いものにコメントをつけるのですか?
> 意味もなく昔のものを掘り出すのは、やめたほうがいいですね。
>
>スレッドには、それぞれテーマが決まっているのですから、
> 別人が勝手に違う話を紛れ込ませるのはマナー違反です。
>
>あなたが新しい質問を建てて、
> 単にコードだけコピーペイストしたらいいじゃありませんか。
> 以前の議論を参照しないといけないことでもないでしょ?
> 仮にそうであったら、リンク先を書けばいいだけです。
>
>>例えば、セルA1から下へ、貼り付けていくのにはどうすればよいでしょうか?
>書込先を移動していくという一般的な話なら、
>なにも古い記事を持ち出す必要もないはず。
>どのような経緯で、この古い記事に行き当たったのですかね。
>
> 以前の投稿者が、なんらかの理由で掘り起こしでもしているのか。
>いずれにしても奇矯な行動に映るので、普通は誰も敬遠してしまうよ。
> (私は変わり者なんでコメントしたけどね)
>
> 続けて質問がもしあるなら、
>そして、削除のためのパスワードが設定してあったらという前提だが、
>あなたの発言を削除して、新しいものを建てたほうが良いと思う。
> 私も、あえて一つ前のものにコメントし、削除できるようにしておく。

869 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free