Excel VBA質問箱 IV

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

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


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

【4787】初めてのマクロで困ってます。 まつじゅん 03/4/7(月) 16:43 質問
【4801】Re:初めてのマクロで困ってます。 ポンタ 03/4/8(火) 11:38 回答
【4811】Re:初めてのマクロで困ってます。 まつじゅん 03/4/8(火) 16:07 質問
【4812】Re:初めてのマクロで困ってます。 ポンタ 03/4/8(火) 16:51 回答
【4838】Re:初めてのマクロで困ってます。 まつじゅん 03/4/10(木) 8:52 質問
【4839】Re:初めてのマクロで困ってます。 ポンタ 03/4/10(木) 9:41 発言
【4847】Re:初めてのマクロで困ってます。 まつじゅん 03/4/10(木) 13:52 お礼

【4787】初めてのマクロで困ってます。
質問  まつじゅん  - 03/4/7(月) 16:43 -

引用なし
パスワード
   初めまして、VBA初心者のまつじゅんです。

VBAの本等を参考に照明配置図を作っております。
ユーザーフォームを使って各照明器具毎のワークシートに
配置を出来るようにしたいと思い下記の様は物を作ってみました。

リストボックスに商品番号を表示させて、イメージボックスにその画像を
表示させる事は出来たのですが、
任意のセル(例 B4 設置番地 V44、B6 設置番地 W44の)に
テキストボックス1で入力した商品番号をセル番地(設置番地)に転送し、
そのすぐ下のセルには、イメージボックスの拡大された別画像を転送させたいと
思っております。
(イメージボックの画像と拡大された画像は別のファイルフォルダに保存ます)
参考にしたマクロでは、選んだ商品番号を新たなワークシート名として
画像を表示させるような物だと思うのですが、
新たなワークシートは作成されなくて良いのです。
マクロをほぼ丸写しなのでどこを改造して良いのかわからず
ひょっとしたら全然違うマクロを作っているような気がして投稿しました。

何方か良いアドバイスをよろしくお願いします。


Dim ImgName As String

Private Sub ExitBtn_Click()
  Unload Me
  End
End Sub

'ここからが転送についてのマクロだと思います'
Private Sub InputBtn_Click()
Dim WSName As String
Dim i As Variant

WSName = NameBox.Text

If WSName = "" Then
  MsgBox "商品番号をお入れ下さい"
  NameBox.SetFocus
  Exit Sub
ElseIf ImgName = "" Then
  MsgBox "商品の写真をお選び下さい"
  ListBox1.SetFocus
  Exit Sub
End If

For Each i In Worksheets
   If i.Name = WSName Then
     GoTo FAIL
   End If
Next

Worksheets("WSName").Copy before:=Worksheets("WSName")
ActiveSheet.Name = WSName

With Worksheets(WSName)
   .Range("E4") = WSName
   .Range("E6") = ClassBox.Text
   .Image1.Picture = LoadPicture(ImgName)
End With

   NameBox = ""
   ClassBox = ""
   ListBox1.SetFocus
   Exit Sub
   
FAIL:
   MsgBox "既に同じ番号が登録されております" & Chr(13) _
        & "番号を確かめてもう1度入力して下さい"
   NameBox.SetFocus
End Sub
'ここまで'

Private Sub ListBox1_Click()
  ImgName = ListBox1.List(ListBox1.ListIndex)
  ImgName = ActiveWorkbook.Path & "\" & ImgName
  Image1.Picture = LoadPicture(ImgName)
End Sub
Private Sub UserForm_Initialize()
 Dim jpgDir As String
 Dim Fname As String
 
 jpgDir = ActiveWorkbook.Path & "\*.jpg"
 
 Fname = Dir(jpgDir, vbNormal)
 ListBox1.AddItem Fname
 
 Do
 
  Fname = Dir
  ListBox1.AddItem Fname
 
 Loop While Fname <> ""
 
End Sub

【4801】Re:初めてのマクロで困ってます。
回答  ポンタ  - 03/4/8(火) 11:38 -

引用なし
パスワード
   >参考にしたマクロでは、選んだ商品番号を新たなワークシート名として
>画像を表示させるような物だと思うのですが、
>新たなワークシートは作成されなくて良いのです。
>マクロをほぼ丸写しなのでどこを改造して良いのかわからず
>ひょっとしたら全然違うマクロを作っているような気がして投稿しました。

シート上に画像を読み込んでいるコードが見当たらないので、
望み通りの動きはしないと思います。

とりあえず、書き直しましたので、
現在のコードすべてを下記のコードと入れ替えてみてください。

Option Explicit

Private Sub ExitBtn_Click()
  Unload Me
  End
End Sub

'ここからが転送についてのマクロだと思います'
Private Sub InputBtn_Click()
  Dim MyPicture As Object


  If NameBox.Value = "" Then
    MsgBox "商品番号をお入れ下さい"
    NameBox.SetFocus
    Exit Sub
  ElseIf ListBox1.Value = "" Then
    MsgBox "商品の写真をお選び下さい"
    ListBox1.SetFocus
    Exit Sub
  End If
  
  Range("E4") = NameBox.Value
  Range("E6") = ClassBox.Value
  Set MyPicture = ActiveSheet.Pictures.Insert(ActiveWorkbook.Path & "\" & ListBox1.Value)
  With Range("E7")
    MyPicture.Top = .Top
    MyPicture.Left = .Left
  End With
  NameBox.Value = ""
  ClassBox.Value = ""
  ListBox1.SetFocus
End Sub

Private Sub ListBox1_Click()
  Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\" & ListBox1.Value)
End Sub

Private Sub UserForm_Initialize()
 Dim jpgDir As String
 Dim Fname As String

 jpgDir = ActiveWorkbook.Path & "\*.jpg"

 Fname = Dir(jpgDir, vbNormal)
 ListBox1.AddItem Fname

 Do

  Fname = Dir
  ListBox1.AddItem Fname
 
 Loop While Fname <> ""

End Sub


ただ、不明な点がいくつかあるので、
これでも完璧には動作しないと思います。

以下の5つの質問に答えていただけたら、もう一度書き直します。

1.『リストボックスに商品番号を表示させて』と書いてありますが、
 このコードですと、リストボックスには画像のファイル名が表示されるはずです。
 画像のファイル名=商品名ということですか?

2.『任意のセル(例 B4 設置番地 V44、B6 設置番地 W44の)に』とありますが、
 任意のセルというどういう意味ですか?
 また、B4 ならば V44、B6 ならば W44 というのはなぜですか?

3.『テキストボックス1で入力した商品番号を』とありますが、
 画像のファイル名=商品名ではないのですか?

4.『(イメージボックの画像と拡大された画像は別のファイルフォルダに保存ます)』とありますが、
 別のフォルダとはどこですか?

5.コードの中に『.Range("E6") = ClassBox.Text』とありますが、
 "ClassBox" とはなんですか?(TextBoxですか?)
 また、どんな値を入力するものですか?

※半角カタカナは文字化けの原因になります。
 インターネット上ではお使いにならない方が良いと思います。

【4811】Re:初めてのマクロで困ってます。
質問  まつじゅん  - 03/4/8(火) 16:07 -

引用なし
パスワード
   ▼ポンタ さん:

ご回答有難うございます。
まずは、下記のご質問にお答え致します。


>1.『リストボックスに商品番号を表示させて』と書いてありますが、
> このコードですと、リストボックスには画像のファイル名が表示されるはずです。
> 画像のファイル名=商品名ということですか?

 はい、おっしゃる通り、画像ファイル名=商品名です。
 NL1234.jpg等
 

>2.『任意のセル(例 B4 設置番地 V44、B6 設置番地 W44の)に』とありますが、
> 任意のセルというどういう意味ですか?
> また、B4 ならば V44、B6 ならば W44 というのはなぜですか?

  EXCEL上に設置番地を項目とした表を作りました。
  A列4に「V」 以下 6「W」 8「X」と順に 1行飛ばしで「A」まで
  B3から横方向に B3 「44」 C3 「43」こちらは連続して「15」まで
  数値に関しては、設置するコーナー毎に変わります。
  下記の例は 天井照明コーナー用に作ってあります。
    A     B    C    D
1 
2   パス名            
3  G:\picture\     44    43    42
4      V 商品番号 商品番号 商品番号             
5        画像   画像   画像    
6      W 商品番号 商品番号 商品番号
7         画像   画像   画像  
8      X 商品番号 商品番号 商品番号            
9        画像   画像   画像


>3.『テキストボックス1で入力した商品番号を』とありますが、
> 画像のファイル名=商品名ではないのですか?

  今の画像ファイル名だと拡張子がついたままで表示されてしまうので
  表の中での表記には不用かと思いあえて 商品番号のみを入力し
  転送させるようにしてみました。


>4.『(イメージボックの画像と拡大された画像は別のファイルフォルダに保存ます)』とありますが、
> 別のフォルダとはどこですか?

  この照明配置図に関しての資料は今の所全て G:\の中に入れてあり、 
  この表とイメージボックスの画像はその中の
  「picture」と言うファイルフォルダにいれてあります。
  拡大されている画像は 同じG:\の中の別な「picuture1」へ入れています。

>5.コードの中に『.Range("E6") = ClassBox.Text』とありますが、
> "ClassBox" とはなんですか?(TextBoxですか?)
> また、どんな値を入力するものですか?

  TextBoxの表示について再考しました。
  
  TextBox1=商品番号入力用
  TextBox2=設置場所入力用

  何れの入力も全て英数のみの入力となります。
  入力に関しては TextBoxの1と2だけにしてみました。
  全ての入力が完了したところで「転送」ボタンを押す。

以上の回答で更なるアドバイスが頂ければ幸いです。
ポンタさんのを拝見する限り、私のマクロはかなり余分な物が多い気がします。

>※半角カタカナは文字化けの原因になります。
> インターネット上ではお使いにならない方が良いと思います。

 ご指示有難うございます。以後気をつけます。

【4812】Re:初めてのマクロで困ってます。
回答  ポンタ  - 03/4/8(火) 16:51 -

引用なし
パスワード
   >今の画像ファイル名だと拡張子がついたままで表示されてしまうので
>表の中での表記には不用かと思いあえて 商品番号のみを入力し
>転送させるようにしてみました。

  ListBox1.AddItem Left(Fname, Len(Fname) - 4)

と書き直せば、拡張子は省けます。
よって、

>TextBoxの表示について再考しました。
>
>TextBox1=商品番号入力用
>TextBox2=設置場所入力用

はTextBox2さえあれば事足りると思います。

>A列4に「V」 以下 6「W」 8「X」と順に 1行飛ばしで「A」まで

V から始まって A で終わるという規則が理解できませんでした。

V→W→X→Y→Z→A

ということですか?
そう仮定して書き直しました。
お試しください。


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(TextBox2.Value, vbNarrow), vbUpperCase)
  If ListBox1.ListIndex = -1 Then
    MsgBox "商品番号を選択して下さい"
    ListBox1.SetFocus
    Exit Sub
  ElseIf 設置場所 = "" Then
    MsgBox "設置場所を入力して下さい"
    TextBox2.SetFocus
    Exit Sub
  ElseIf Len(設置場所) <> 3 Or Val(Right(設置場所, 2)) _
      > 44 Or Val(Right(設置場所, 2)) < 15 Then
    MsgBox "設置場所に不正な値が入力されています"
    TextBox2.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 Else
    MsgBox "設置場所に不正な値が入力されています"
    TextBox2.Value = ""
    TextBox2.SetFocus
    Exit Sub
  End Select
  Cells(MyRow, 45 - Val(Right(設置場所, 2))).Value = ListBox1.Value
  Set MyPicture = ActiveSheet.Pictures.Insert("G:\picuture1\" & ListBox1.Value & ".jpg")
  With Cells(MyRow + 1, 45 - Val(Right(設置場所, 2)))
    MyPicture.Top = .Top
    MyPicture.Left = .Left
  End With
  TextBox2.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

【4838】Re:初めてのマクロで困ってます。
質問  まつじゅん  - 03/4/10(木) 8:52 -

引用なし
パスワード
   ▼ポンタ さん:

おはようございます。
下記の質問を踏まえてマクロを書きました。
アドバイスがあればまお願いいたします。

それと、更に質問があります。
この全ての画像は、ホームページから画像保存しているのですが、
これを直接ホームページに読みに行く事は出来るのでしょうか?
年に数度商品の入れ替えがある為、新商品のチェックをしたいと思います。


>>A列4に「V」 以下 6「W」 8「X」と順に 1行飛ばしで「A」まで
>
>V から始まって A で終わるという規則が理解できませんでした。
>
>V→W→X→Y→Z→A
>
>ということですか?
>そう仮定して書き直しました。
>お試しください。
>

'ここからマクロ
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("G:\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

【4839】Re:初めてのマクロで困ってます。
発言  ポンタ  - 03/4/10(木) 9:41 -

引用なし
パスワード
   > この全ての画像は、ホームページから画像保存しているのですが、
> これを直接ホームページに読みに行く事は出来るのでしょうか?

できるはずですが、私はやったことがないので、分かりません。

【4838】のコードがちゃんと動くのであれば、

Cells(MyRow, 46 - Val(Right(設置場所, 2))).Value = ListBox1.Value
Set MyPicture = ActiveSheet.Pictures.Insert("G:\picture1\" & ListBox1.Value & ".jpg")

上記2行の間に、
「ListBox1.Value & ".jpg"という画像ファイルを
 http://www.detarame.co.jp/ からダウンロードし、
 G:\picture1\ というフォルダに ListBox1.Value & ".jpg"
 という名前で保存する」
というコードを挿入するだけ良いと思います。

今回の質問とは全然別の内容になりますから、
新規に質問し直した方がよいと思います。

それと、回答者はタイトルを見て答えられそうな質問だと判断したときだけ、
内容を読みに行きますから、質問内容が想像しやすいタイトルをつけたほうが
回答をもらいやすいです。

一応、HPから画像をダウンロードする方法を調べて見ますが、
もし、お役に立つことが出来なかったとしても、ご容赦ください。

【4847】Re:初めてのマクロで困ってます。
お礼  まつじゅん  - 03/4/10(木) 13:52 -

引用なし
パスワード
   ▼ポンタ さん:

お答え有難うございます。
教えて頂いたコードはきちんと作動しますので、
ご指摘頂いた通り 新規投稿とさせて頂きます。


>Cells(MyRow, 46 - Val(Right(設置場所, 2))).Value = ListBox1.Value
>Set MyPicture = ActiveSheet.Pictures.Insert("G:\picture1\" & ListBox1.Value & ".jpg")
>
>上記2行の間に、
>「ListBox1.Value & ".jpg"という画像ファイルを
> http://www.detarame.co.jp/ からダウンロードし、
> G:\picture1\ というフォルダに ListBox1.Value & ".jpg"
> という名前で保存する」
>というコードを挿入するだけ良いと思います。
>
>一応、HPから画像をダウンロードする方法を調べて見ますが、
>もし、お役に立つことが出来なかったとしても、ご容赦ください。

お急がしのに本当に細部に入りお返事頂き有難うございます。
もし ダウンロード方法がわかりましたら
新規投稿へお返事頂ければ幸いです。
私も念の為 検索機能を使って調べてみます。

第一段階はクリアーと言う事でこちらの投稿は
このお返事にて終了とさせて頂きます。
有難うございました。

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