Excel VBA質問箱 IV

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

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


13528 / 13644 ツリー ←次へ | 前へ→

【4849】特定のホームページから画像をダウロードさせる方法 まつじゅん 03/4/10(木) 14:47 質問
【4855】Re:特定のホームページから画像をダウロード... こう 03/4/10(木) 16:33 回答
【4869】Re:特定のホームページから画像をダウロード... まつじゅん 03/4/11(金) 11:58 質問
【4900】ダウンロードなら「wininet.dll」で・・・ こう 03/4/13(日) 16:24 回答
【4924】かなり高度な物っぽいのですが・・・ まつじゅん 03/4/14(月) 9:07 質問
【4927】コピーして張り付けるダケ。簡単♪ こう 03/4/14(月) 12:58 回答
【4929】大量の画像を一括でDL出来るのでしょうか? まつじゅん 03/4/14(月) 14:40 質問
【4934】追伸です まつじゅん 03/4/14(月) 16:27 発言
【4935】FTP こう 03/4/14(月) 17:10 回答
【4952】ちょっと発見したかも?! まつじゅん 03/4/15(火) 11:20 質問
【5002】Re:ちょっと発見したかも?! こう 03/4/16(水) 22:34 回答

【4849】特定のホームページから画像をダウロード...
質問  まつじゅん  - 03/4/10(木) 14:47 -

引用なし
パスワード
   先日、「初めてのマクロで困ってます」でお世話になりました
まつじゅんです。

当初の目的をほぼクリアーし更に改造したいと思い
新規投稿とさせて頂きました。

さて、今回は…。
下記のようなコードを用いて画像表示をさせている
照明設置表において、
現在 画像ファイルを特定のホームページからダウンロードして
保存しているのですが、
季節毎に商品の入れ替えをする関係でListBoxに表示されていない
新製品の画像を直接読み込む事ができればより使いやすくなるかと思い
皆様のアドバイスをお願いしたく投稿しました。


前回の投稿で完成させたuserformのマクロです。

Private Sub ExitBtn_Click()
  Unload Me
  End
End Sub

Private Sub InputBtn_Click()
Dim MyPicture As Object
Dim MyRow As Long
Dim 設置場所 As String
設置場所 = StrConv(StrConv(TextBox1.Value, vbNarrow), vbUpperCase)

If ListBox1.ListIndex = -1 Then
  MsgBox "商品番号を選択して下さい。"
  ListBox1.SetFocus
  Exit Sub
ElseIf 設置場所 = "" Then
  MsgBox "設置場所を入力してください。"
  TextBox1.SetFocus
  Exit Sub
ElseIf Len(設置場所) <> 3 Or Val(Right(設置場所, 2)) _
      > 44 Or Val(Right(設置場所, 2)) < 15 Then
  MsgBox "設置場所に不適切な値が入力されています。"
  TextBox1.SetFocus
  Exit Sub
End If

Select Case Left(設置場所, 1)
Case "V"
   MyRow = 4
Case "W"
   MyRow = 6
Case "X"
   MyRow = 8
Case "Y"
   MyRow = 10
Case "Z"
   MyRow = 12
Case "A"
   MyRow = 14
Case "B"
   MyRow = 16
Case "C"
   MyRow = 18
Case "D"
   MyRow = 20
Case "E"
   MyRow = 22
Case "F"
   MyRow = 24
Case "G"
   MyRow = 26
Case "H"
   MyRow = 28
Case "I"
   MyRow = 30
Case Else
   MsgBox "設置場所に不適切な値が入力されています。"
   TextBox1.Value = ""
   TextBox1.SetFocus
   Exit Sub
End Select

Cells(MyRow, 46 - Val(Right(設置場所, 2))).Value = ListBox1.Value
Set MyPicture = ActiveSheet.Pictures.Insert("D:\picture1\" & ListBox1.Value & ".jpg")
With Cells(MyRow + 1, 46 - Val(Right(設置場所, 2)))
   MyPicture.Top = .Top
   MyPicture.Left = .Left
   MyPicture.Width = .Width
   MyPicture.Height = .Height
End With
TextBox1.Value = ""
ListBox1.SetFocus
End Sub

Private Sub ListBox1_Click()
  Image1.Picture = LoadPicture(ThisWorkbook.Path & "\" & ListBox1.Value & ".jpg")
End Sub
Private Sub UserForm_Initialize()
 Dim jpgDir As String
 Dim Fname As String
 
 jpgDir = ThisWorkbook.Path & "\*.jpg"
 Fname = Dir(jpgDir, vbNormal)
 Do
 ListBox1.AddItem Left(Fname, Len(Fname) - 4)
 Fname = Dir
 Loop While Fname <> ""
End Sub

【4855】Re:特定のホームページから画像をダウロー...
回答  こう E-MAIL  - 03/4/10(木) 16:33 -

引用なし
パスワード
   まつじゅんさん,こんにちわ。

>現在 画像ファイルを特定のホームページからダウンロードして
>保存しているのですが、
>ListBoxに表示されていない画像を直接読み込む事ができれば
ダウンロードしたファイルを特定のフォルダに格納。それを使用している。
直接Worksheet上にWeb上の画像を貼り付けたい。
ということでよいですか?

[挿入]-[図]-[ファイルから]で,ファイル名称にURLを書けばよいのでは?
Sub test01()
  Pictures.Insert ("http://www.vbalab.net/images/vbalablogo2.gif")
End Sub

【4869】Re:特定のホームページから画像をダウロー...
質問  まつじゅん  - 03/4/11(金) 11:58 -

引用なし
パスワード
   ▼こう さん:
初めまして。

>ダウンロードしたファイルを特定のフォルダに格納。それを使用している。
>直接Worksheet上にWeb上の画像を貼り付けたい。
>ということでよいですか?
>
>[挿入]-[図]-[ファイルから]で,ファイル名称にURLを書けばよいのでは?
>Sub test01()
>  Pictures.Insert ("http://www.vbalab.net/images/vbalablogo2.gif")
>End Sub

説明の仕方がまた足らなかったようです。すみません。

今考えているマクロは、ユーザフォーム内にある
ListBoxには無い、商品(=商品番号)を特定のホームページから選択して
その画像をファイルフォルダに格納する物です。
所謂「更新」的なマクロをと考えております。
(あ…そうすると今とは別にユーザーフォームがもう1ついるのか…)
ですから、直接EXCELの表に画像を挿入させるのとは少し違うような気がします。

【4900】ダウンロードなら「wininet.dll」で・・・
回答  こう E-MAIL  - 03/4/13(日) 16:24 -

引用なし
パスワード
   まつじゅんさん,こんにちわ。

>ユーザフォーム内にあるListBoxには無い商品番号
のイメージが湧きませんが,要はExcel内で管理している「商品番号」
に対応する画像ファイルをDLして格納する。ということですよね。

自分で確認した訳ではないのですが,
EYE-Kさんの「EYE-Kのユメのシマ」にサンプルがあります。
http://hp.vector.co.jp/authors/VA014315/index.html
[プログラム(VB)]→[ダウンローダーを作る。]とジャンプしてください。

【4924】かなり高度な物っぽいのですが・・・
質問  まつじゅん  - 03/4/14(月) 9:07 -

引用なし
パスワード
   ▼こう さん:
>まつじゅんさん,こんにちわ。
>
>>ユーザフォーム内にあるListBoxには無い商品番号
>のイメージが湧きませんが,要はExcel内で管理している「商品番号」
>に対応する画像ファイルをDLして格納する。ということですよね。

ListBoxにある商品番号以外の新製品のみを検索して
ダウンロードしたいと思っております。

>自分で確認した訳ではないのですが,
>EYE-Kさんの「EYE-Kのユメのシマ」にサンプルがあります。
>http://hp.vector.co.jp/authors/VA014315/index.html
>[プログラム(VB)]→[ダウンローダーを作る。]とジャンプしてください。

サンプルを拝見しましたが、初心者の私では
一体なんのことやらさっぱりわからい事が最初から記されておりました。
そして何やら「続く」感じが。
こんな私でもなんとかなるものでしょうか?

【4927】コピーして張り付けるダケ。簡単♪
回答  こう E-MAIL  - 03/4/14(月) 12:58 -

引用なし
パスワード
   >>自分で確認した訳ではないのですが,
>>EYE-Kさんの「EYE-Kのユメのシマ」にサンプルがあります。
>>http://hp.vector.co.jp/authors/VA014315/index.html
>>[プログラム(VB)]→[ダウンローダーを作る。]とジャンプしてください。
>
>サンプルを拝見しましたが、初心者の私では
>一体なんのことやらさっぱりわからい事が最初から記されておりました。
>そして何やら「続く」感じが。
>こんな私でもなんとかなるものでしょうか?

サンプルページのコードを「標準モジュール」にコピーして,
DownLoadFileを実行させるモジュールを1つ書けば動きますよ。
例)
Sub test01()
  Call DownLoadFile("http://www.vbalab.net/images/vbalablogo2.gif", "C:\temp\a.gif")
End Sub

ただし,サンプルページとはいえ著作権などの問題がありますので,
製品や業務用として使用する場合は注意が必要です。

自力でコードの作成が困難であれば,ダウンロード用の別ソフトや
部品を購入する案もあるかと思います。

(ftpが可能であればもっと簡単にできますよ)

【4929】大量の画像を一括でDL出来るのでしょうか?
質問  まつじゅん  - 03/4/14(月) 14:40 -

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

>サンプルページのコードを「標準モジュール」にコピーして,
>DownLoadFileを実行させるモジュールを1つ書けば動きますよ。
>例)
>Sub test01()
>  Call DownLoadFile("http://www.vbalab.net/images/vbalablogo2.gif", "C:\temp\a.gif")
>End Sub
>
>ただし,サンプルページとはいえ著作権などの問題がありますので,
>製品や業務用として使用する場合は注意が必要です。

個人レベルとは言え、仕事用として作っておりますので
やはり 著作権で引っかかるかもしれません。
それと 大量の画像データを一気にDLするので
それも心配の一つです。
(更新時に恐らくは 数十個の画像をDLするはずです)
このコードだと
予めわかった画像の「商品番号」を
一つづつDLするって感じですよね?

>自力でコードの作成が困難であれば,ダウンロード用の別ソフトや
>部品を購入する案もあるかと思います。
>
>(ftpが可能であればもっと簡単にできますよ)

部品購入???

【4934】追伸です
発言  まつじゅん  - 03/4/14(月) 16:27 -

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

>(ftpが可能であればもっと簡単にできますよ)

 「ftp」ってホームページビルダーでファイル転送の時に
 使う奴でしょうか?
 全然違ってたら笑って下さい。
 

【4935】FTP
回答  こう E-MAIL  - 03/4/14(月) 17:10 -

引用なし
パスワード
   >部品購入???
説明不足ですね。ごめんなさい。
たとえばVectorなど
http://www.vector.co.jp/vpack/filearea/win95/prog/dll/index.html
を参照すると。FTPとかHTTPとかの操作を行ってくれるDLLなんかが
あり,おそらくサンプルソースや使用方法なんかも親切に記述している
製品があるのではないかと...
あっ,フリーソフトもありますね。(あとは使用条件の問題か...)

>>(ftpが可能であればもっと簡単にできますよ)
> 「ftp」ってホームページビルダーでファイル転送の時に
> 使う奴でしょうか?
あってますよ。^_^
「奴」っていうよりは,プロトコル(手順)ですね。
コマンドファイルを作って,「ftp -s:コマンドファイル」とか...
#今日テスト用サーバが落ちてるので検証できません。
#必要であれば後日確認します。

【4952】ちょっと発見したかも?!
質問  まつじゅん  - 03/4/15(火) 11:20 -

引用なし
パスワード
   ▼こう さん:
今日は雨が降っていて肌寒いですね。
今回はちょっと質問が長いです。すみません。
わかる範囲及びお時間のある時で結構ですのでご説明頂ければ幸いです。

>http://www.vector.co.jp/vpack/filearea/win95/prog/dll/index.html
>を参照すると。FTPとかHTTPとかの操作を行ってくれるDLLなんかが
>あり,おそらくサンプルソースや使用方法なんかも親切に記述している
>製品があるのではないかと...
>あっ,フリーソフトもありますね。(あとは使用条件の問題か...)

DLしてみたのですが・・・いまいち使い方がわからず
撃沈です。
(以前教わった方の物だと思いますが・・・)

>あってますよ。^_^
>「奴」っていうよりは,プロトコル(手順)ですね。
>コマンドファイルを作って,「ftp -s:コマンドファイル」とか...
>#今日テスト用サーバが落ちてるので検証できません。
>#必要であれば後日確認します。

わっ。あってましたかぁ・・・(ちょっと嬉しい)
しかし・・・すみません!!言葉使いが悪すぎですね。(反省)
お時間ある時で結構ですので宜しくお願い致します。


あれから色々参考書とか雑誌とかを買いました。
ちょっとヒントになりそうなものを見付けたのですが
この「画像取得」の方法を改造すれば
ひょっとして丸ごとファイルフォルダを取得出来るかなぁ?っと思ったのですが
自分でやるには やはりまだまだ知識が足らない事を実感中です。

Sub pitc()
  '参照設定 Microsoft Internet Controls
  '参照設定 Microsoft HTML Object Library
  Dim myIE   As InternetExplorer
  Dim myDoc   As MSHTML.HTMLDocument
  Dim myImg   As MSHTML.HTMLImg
  Dim mySiteUrl As String
  Dim i     As Long
  mySiteUrl="http://mugen1020.cool.ne.jp/"  '検索先のURL 例自分のhp
  Set myIE = New InternetExplorer
  With myIE
    .Navigate mySiteUrl
    Do While .Busy
    Loop
    Do Until .ReadyState = READYSTATE_COMPLETE
    Loop
    Set myDoc = .Document
  End With
  i = 0
  Cells(1, 1).Select  'セルを設定
  With myDoc
    If .frames.Length > 0 Then
      For i = 0 To .frames.Length - 1
        For Each myImg In .frames(i).Document.images
          With ActiveSheet.Pictures.Insert(myImg.src).BottomRightCell
            Cells(.Row + 1, 1).Select
          End With
        Next
      Next
    Else
      For Each myImg In .images
        With ActiveSheet.Pictures.Insert(myImg.src).BottomRightCell
          Cells(.Row + 1, 1).Select
        End With
      Next
    End If
  End With
  myIE.Quit
  Set myIE = Nothing          'オブジェクト終了
  Set myDoc = Nothing
End Sub

この方法だと 現在使用中のsheetに画像が直接張り付けられます。
(ActiveSheetって書いてあるから当然ですよね?)
なので・・・
”画像ファイルを見付けたら 任意のファイルフォルダに画像を保存する”
って出来ないものでしょうか?

それと urlの設定でためしたのですが・・・
Topページのアドレスを入力する分には そこにある画像はSheet上に
表示されるのですが、
画像を保存しているファイルフォルダまでのアドレスを入力すると

With ActiveSheet.Pictures.Insert(myImg.src).BottomRightCell

↑この部分でエラー
実行時エラー'1004'
PicturesクラスのInsertプロパティを取得できません。
となってしまいます。

【5002】Re:ちょっと発見したかも?!
回答  こう E-MAIL  - 03/4/16(水) 22:34 -

引用なし
パスワード
   >>コマンドファイルを作って,「ftp -s:コマンドファイル」とか...
と言っておきながら,色々制約があります。^^;
・ftpのユーザID,パスワードが必要。
・エラーが検知できない。などなど...
ということで,重要な処理や開発用では使用しない方が賢明かも。
とりあえずサンプルです。

シート上に以下(A1〜A7)を作成しておき
 Aセル       '説明    
1 UserId       'ユーザID
2 PassWord      'パスワード
3 cd test       'ディレクトリの移動
4 binary       'バイナリモード指定
5 prompt       'mgetの問い合わせ抑止
6 mget *.jpg     'ディレクトリ内の*.jpgを根こそぎget
7 bye         'ftpの終了

Sub ftp_test()
  'カレントディレクトリの変更
  ChDir ("D:\")
  
  'ftp_batch.txtを作成する
  Open "ftp_batch.txt" For Output As #1
  For i = 1 To 7
    Print #1, Cells(i, 1)
  Next i
  Close #1
  
  'ftpの実行
  Shell ("ftp -s:ftp_batch.txt HostName")
End Sub

UserId,PassWord,HostNameには,それぞれの値に置き換えてください。
あと特にシートに記載された内容からテキストファイルを作成する必要
もありませんので,そこいらへんはお好みで変更してください。

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