Excel VBA質問箱 IV

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

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


11088 / 13646 ツリー ←次へ | 前へ→

【17528】画像表示の件 しろろ 04/9/1(水) 19:01 質問[未読]
【17539】Re:画像表示の件 ichinose 04/9/1(水) 22:38 発言[未読]
【17540】Re:画像表示の件 こもれび 04/9/1(水) 22:57 回答[未読]
【17587】Re:画像表示の件 しろろ 04/9/2(木) 21:21 発言[未読]
【17588】Re:画像表示の件 つん 04/9/2(木) 22:07 回答[未読]
【17592】Re:画像表示の件 Kein 04/9/3(金) 0:14 回答[未読]
【17593】Re:画像表示の件 Kein 04/9/3(金) 0:25 回答[未読]
【18087】Re:画像表示の件 しろろ 04/9/14(火) 17:20 お礼[未読]
【18200】Re:画像表示の件 sion 04/9/17(金) 21:40 回答[未読]

【17528】画像表示の件
質問  しろろ  - 04/9/1(水) 19:01 -

引用なし
パスワード
   1画像を押した際、
2新たに画像を表示させたいのですが・・・。

2の記載方法がわかりません。。
教えていただきたいのですが・・・。

【17539】Re:画像表示の件
発言  ichinose  - 04/9/1(水) 22:38 -

引用なし
パスワード
   ▼しろろ さん:
こんばんは。

>1画像を押した際、
>2新たに画像を表示させたいのですが・・・。
>
>2の記載方法がわかりません。。
>教えていただきたいのですが・・・。
回答がないのは、詳しい情報がないので投稿がしにくいのではないかと思います。
画像をどこに表示させたいのか(例えば、シート上かUserformかとか・・、
それとImageコントロールを使用しているとか・・)

確かJakaさんが目安箱で投稿されていましたが、

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=55;id=FAQ

↑は、Userform上の内容ですが、これが参考になりませんか?

【17540】Re:画像表示の件
回答  こもれび  - 04/9/1(水) 22:57 -

引用なし
パスワード
   何処に画像を貼り付けたのでしょうか?

ワークシートに貼り付けられたのでしたら

1.クリックイベントに関しては…
「描画オブジェクトと図について」というヘルプ

2.新たな画像の表示は…
  ActiveSheet.Pictures.Insert([パスとファイル名]).Select
  Selection.ShapeRange.IncrementLeft -34.5
  Selection.ShapeRange.IncrementTop 86.25
  Selection.ShapeRange.ScaleWidth 1.98, msoFalse, msoScaleFromTopLeft
  Selection.ShapeRange.ScaleHeight 1.98, msoFalse, msoScaleFromTopLeft

【17587】Re:画像表示の件
発言  しろろ  - 04/9/2(木) 21:21 -

引用なし
パスワード
   ▼こもれび さん:
う〜ん。。よくわかりません。説明不足ですいません。

現在エクセルシートに画像1を置いております。
その画像1を押した際、
画像1が消えて、画像2を表示させたく思います。
どのように記載すればよいのでしょうか??


Sub 画像1_Click()
????
End Sub

【17588】Re:画像表示の件
回答  つん E-MAIL  - 04/9/2(木) 22:07 -

引用なし
パスワード
   こんばんは

ええと、その2つの画像は、同じ場所で表示を入れ替える(変な表現だ・・・)
ってことですよね?
でしたら、2つの画像を重ねて配置しておいて、

Sub zukei_Click()

  Dim strZukeiName As String
  
  strZukeiName = Application.Caller

  ActiveSheet.Shapes(strZukeiName).ZOrder msoSendToBack

End Sub

これを、2つの画像に「マクロの登録」をしておけばどうでしょうか?
やってみたら、クリックしたときに一瞬(クリックしてマウスを離す間)
画像が怖くなる(これまた変な表現)みたいですけど・・・・

でも、これ全く同じサイズの画像でないとダメですね・・・

【17592】Re:画像表示の件
回答  Kein  - 04/9/3(金) 0:14 -

引用なし
パスワード
   こんな感じでどうかな ?

[シートモジュール]

Private Sub Worksheet_Activate()
  Dim Wp As Single, Hp As Single
  Const FPic As String = _
  "C:\Documents and Settings\UserName\My Documents\My Pictures\001.jpg"
 
  With ActiveWindow.VisibleRange
   Wp = .Width - 10: Hp = .Height - 10
  End With
  Application.ScreenUpdating = False
  With Me.Pictures
   If .Count > 0 Then .Delete
   With .Insert(FPic)
     .Left = 0: .Top = 0
     .Width = Wp: .Height = Hp
     .OnAction = "Pic_Change"
   End With
  End With
  Application.ScreenUpdating = True
End Sub

[標準モジュール]

Sub Pic_Change()
  Dim x As Variant, Ary As Variant
  Dim Wp As Single, Hp As Single
  Static i As Integer
  Const Ph As String = _
  "C:\Documents and Settings\UserName\My Documents\My Pictures\"
 
  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  If InStr(1, x, "図") = 0 Then Exit Sub
  Ary = Array("001", "002", "005")
  If i = UBound(Ary) Then
   i = 0
  Else
   i = i + 1
  End If
  With ActiveWindow.VisibleRange
   Wp = .Width - 10: Hp = .Height - 10
  End With
  Application.ScreenUpdating = False
  With ActiveSheet
   .Pictures(x).Delete
   With .Pictures.Insert(Ph & Ary(i) & ".jpg")
     .Left = 0: .Top = 0
     .Width = Wp: .Height = Hp
     .OnAction = "Pic_Change"
   End With
  End With
  Application.ScreenUpdating = True: Erase Ary
End Sub

*使い方
まずシートモジュールのイベントマクロで、定数 Ph に「シートを開いたときに表示
する画像のフルパス」を指定します。標準モジュールの Pic_Change の定数 Ph は、
画像ファイルをまとめて保存しているフォルダのパスにします。
(末尾に \ をつけること) そして配列 Ary の要素には、ファイル名だけを羅列します。
拡張子が異なるものを混在させるなら、Ary = Array("XX.jpg", "YY.gif") などと
して、With .Pictures.Insert(Ph & Ary(i)) と拡張子なしの指定に変更します。
この配列 Ary の順番で、表示されている画像が切り替えられます。配列の下限は 0
ですから、最初の要素となるファイル名を、シートイベントマクロで指定したファイルに
しておけば、最後の要素の画像をクリックしたとき、元に戻るというわけです。
テストしてみると、概ねうまくいっているようですが、
Application.ScreenUpdating の設定では、切り替わりの瞬間に画面がぶれるのを
抑止することが出来ないみたいでした。問題点はそれぐらいです。お試し下さい。

【17593】Re:画像表示の件
回答  Kein  - 04/9/3(金) 0:25 -

引用なし
パスワード
   ちょっと改良します。Static i As Integer と、プロシージャレベルで変数の値を
保存してしまうと、シートアクティブで戻ったときも値が加算されたままになっいて
順序が狂います。そこで標準モジュールの先頭に移し、グローバル変数にしてみました。
今度は順番どおりに表示されるようです。
なおシートアクティブイベントは、一度他のシートを選択してから戻ったときに
発生します。ご存知かと思いますが、念のため。

[シートモジュール]
Private Sub Worksheet_Activate()
  Dim Wp As Single, Hp As Single
  Const FPic As String = _
  "C:\Documents and Settings\UserName\My Documents\My Pictures\001.jpg"
 
  With ActiveWindow.VisibleRange
   Wp = .Width - 10: Hp = .Height - 10
  End With
  Application.ScreenUpdating = False
  With Me.Pictures
   If .Count > 0 Then .Delete
   With .Insert(FPic)
     .Left = 0: .Top = 0
     .Width = Wp: .Height = Hp
     .OnAction = "Pic_Change"
   End With
  End With
  Application.ScreenUpdating = True: Cnt = 0
End Sub

[標準モジュール]
Public Cnt As Integer

Sub Pic_Change()
  Dim x As Variant, Ary As Variant
  Dim Wp As Single, Hp As Single
  Const Ph As String = _
  "C:\Documents and Settings\UserName\My Documents\My Pictures\"
 
  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  If InStr(1, x, "図") = 0 Then Exit Sub
  Ary = Array("001", "002", "008")
  If Cnt = UBound(Ary) Then
   Cnt = 0
  Else
   Cnt = Cnt + 1
  End If
  With ActiveWindow.VisibleRange
   Wp = .Width - 10: Hp = .Height - 10
  End With
  Application.ScreenUpdating = False
  With ActiveSheet
   .Pictures(x).Delete
   With .Pictures.Insert(Ph & Ary(Cnt) & ".jpg")
     .Left = 0: .Top = 0
     .Width = Wp: .Height = Hp
     .OnAction = "Pic_Change"
   End With
  End With
  Application.ScreenUpdating = True: Erase Ary
End Sub

【18087】Re:画像表示の件
お礼  しろろ  - 04/9/14(火) 17:20 -

引用なし
パスワード
   ▼Kein さん:
いろいろありがとうございます。
が・・。ちょっと私には難しいようです。
検討します!

【18200】Re:画像表示の件
回答  sion  - 04/9/17(金) 21:40 -

引用なし
パスワード
   Imageコントロールをクリックして他の画像を表示する場合でしたら、私も丁度考えてました。
Sheetのセルにパス名を入れ、フォームのTextBoxに入力させます。
 Private Sub UserForm_Initialize()
例 TextBox1.Value = Cells(行, 8).Value 
  Image1.Picture = LordPicture(TextBox1.Value)で表示させ、Image1〜Image4
をFrameを付けImage4から3,2,1とimage1が上に来るように貼り付けます。各ImageのClickイベントに下の様に書き入れます。そうすると4枚の画像が繰り返し表示されます。

それから画像の大きさをImageコントロールのプロパティで
PictureSizeMode = fmPictureSizeModeStretch に設定すれば統一されました。
尚下の各Imageのパス名は直接でも良いし又上に書いた様に
  TextBox1.Value = Cells(行, 8).Value 
  Image1.Picture = LordPicture(TextBox1.Value) でもいいです。

Private Sub Image1_Click()
  Image1.SpecialEffect = fmSpecialEffectSunken
  Image1.Visible = False
  Image2.picture = LoadPicture("C:\My Documents\16062301.jpg")
  Image2.AutoSize = False
  Image1.SpecialEffect = fmSpecialEffectRaised
 
    
End Sub

Private Sub Image2_Click()
  Image2.SpecialEffect = fmSpecialEffectSunken
  Image2.Visible = False
  Image3.picture = LoadPicture("C:\My Documents\ryouri1.jpg")
  Image3.AutoSize = False
  Image2.SpecialEffect = fmSpecialEffectRaised
End Sub

Private Sub Image3_Click()
  Image3.SpecialEffect = fmSpecialEffectSunken
  
  Image3.Visible = False
  Image4.picture = LoadPicture("C:\My Documents\16842602.jpg")
  Image4.AutoSize = False
  Image3.SpecialEffect = fmSpecialEffectRaised
End Sub

Private Sub Image4_Click()
  Image4.SpecialEffect = fmSpecialEffectSunken
  
  Image1.Visible = True
  Image2.Visible = True
  Image3.Visible = True
  
  Image4.SpecialEffect = fmSpecialEffectRaised
End Sub

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