Excel VBA質問箱 IV

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

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


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

【50778】changeイベントが働かないのですが Tsuyo 07/8/15(水) 11:56 質問[未読]
【50779】Re:changeイベントが働かないのですが ponpon 07/8/15(水) 13:29 発言[未読]
【50781】Re:changeイベントが働かないのですが Tsuyo 07/8/15(水) 14:16 質問[未読]
【50783】Re:changeイベントが働かないのですが ponpon 07/8/15(水) 14:55 発言[未読]
【50785】Re:changeイベントが働かないのですが Tsuyo 07/8/15(水) 16:00 質問[未読]
【50786】Re:changeイベントが働かないのですが Tsuyo 07/8/15(水) 16:34 質問[未読]
【50788】Re:changeイベントが働かないのですが ponpon 07/8/15(水) 17:08 発言[未読]
【50796】Re:changeイベントが働かないのですが Tsuyo 07/8/16(木) 12:25 お礼[未読]
【50848】不思議 Tsuyo 07/8/18(土) 11:19 発言[未読]
【50787】Re:changeイベントが働かないのですが ponpon 07/8/15(水) 16:37 発言[未読]

【50778】changeイベントが働かないのですが
質問  Tsuyo  - 07/8/15(水) 11:56 -

引用なし
パスワード
    EXCELは2007を使用しています。
 コマンドボタンで作成者の名前を選択して、その名前の名刺ファイルを
呼び出して、印刷する見積シートに貼り付けるVBAを作っているます。
見積シートのセル(Q6)にchangeイベントを設定して、セル(Q6)には
コマンドボタンをリンクさせています。
 コマンドボタンで選択すると、セル(Q6)の名前は変わっているのですが
Changeイベントが実行されないので困っています。
 別の手として、コマンドボタンのChangeイベントでこの処理を実行しようとも
考えたのですが、なぜか同じファイルが重なって3枚も貼り付けられ、これも
理由が分かりません。

Private Sub Worksheet_Change(ByVal Target As Range)
'見積作成者を見積書に貼り付ける
'事前にメインシートのコマンドボックスから作成者名をで持ってきている
If Not Intersect(Target, Range("Q6")) Is Nothing Then
   Dim 保存場所 As String
   Dim 作成者名 As String
   Application.ScreenUpdating = False
  
   保存場所 = "D:\業務\見積書作成\見積書\"
   作成者名 = 保存場所 & "名刺写し\" & Sheets("見積シート").Range("Q6").Value & ".jpg"
  
   Worksheets("見積出").Select
   ActiveSheet.Shapes.AddPicture 作成者名, False, True, 0, 0, 180, 120
   Application.ScreenUpdating = True
  
End If
End Sub

上記は印刷する見積シートのモジュールですが、この他にもActiveX
コントロールをシートで利用しようとして何度も失敗しているます。
いつもChangeイベントがセルの値が変化したことを認識しないのかエラーも
出ません。

 この問題が解決しないと先に進むことが出来ませんので
解決方法が解る方がいるようでしたら、書き込みお願いします。

【50779】Re:changeイベントが働かないのですが
発言  ponpon  - 07/8/15(水) 13:29 -

引用なし
パスワード
   コンボボックスで選択し、その値をコマンドボタンでQ6に入力していると言うことですよね。
コンボボックスやコマンドボタンは、フォームのものでしょうか?
それとも、コントロールツールボックスのものでしょうか?

エクセル2007は持っていないので何ともいえませんが、
エクセル2003では、
コントロールツールボックスのコンボボックスに適当にリストを入れて
簡単にテストしましたが、イベントは発生するようです。
しかし、フォームのコンボボックスでは、リンク先のイベントは発生しませんでした。
参考になれば・・・・


Private Sub ComboBox1_Change()
  Range("Q6").Value = ComboBox1.Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address(0, 0) = "Q6" Then
   MsgBox Target.Value
 End If
End Sub

【50781】Re:changeイベントが働かないのですが
質問  Tsuyo  - 07/8/15(水) 14:16 -

引用なし
パスワード
   早速の返信ありがとうございます。

>コンボボックスで選択し、その値をコマンドボタンでQ6に入力していると言うことですよね。
 そうなんですが、コンボボックスのプロパティでシートとセルを指定しています。

>コンボボックスやコマンドボタンは、フォームのものでしょうか?
>それとも、コントロールツールボックスのものでしょうか?
 コントロールツールボックスのものです。ですが上記のようにプロパティでQ6セルとリンクしていたのが悪かったようで、ponponさんが試されたようにコンボボックスのイベントとして記述して試したところ、名刺ファイルを呼び出すことができました。なんか納得いかないですがw

 そこでもう一つ問題が発生してしまったのですが、呼び出された名刺ファイルが同じものが3枚重なっているのです。他のモジュールが悪いのかと調べてみましたが、原因が見つかりません。3回同じ命令を繰り返しているのでしょうか?
 情報が少なくて申し訳ないのですが、この現象から想像がつくことがありましたら教えて下さい。

【50783】Re:changeイベントが働かないのですが
発言  ponpon  - 07/8/15(水) 14:55 -

引用なし
パスワード
   ▼Tsuyo さん:
> そこでもう一つ問題が発生してしまったのですが、呼び出された名刺ファイルが同じものが3枚重なっているのです。他のモジュールが悪いのかと調べてみましたが、原因が見つかりません。3回同じ命令を繰り返しているのでしょうか?
> 情報が少なくて申し訳ないのですが、この現象から想像がつくことがありましたら教えて下さい。

↓ ここのところですよね?
>  
>   保存場所 = "D:\業務\見積書作成\見積書\"
>   作成者名 = 保存場所 & "名刺写し\" & Sheets("見積シート").Range("Q6").Value & ".jpg"
>  
>   Worksheets("見積出").Select
>   ActiveSheet.Shapes.AddPicture 作成者名, False, True, 0, 0, 180, 120

特に3回も貼り付けているコードには見えませんが・・・

念のために
>Private Sub Worksheet_Change(ByVal Target As Range)
>'見積作成者を見積書に貼り付ける
>'事前にメインシートのコマンドボックスから作成者名をで持ってきている
>If Not Intersect(Target, Range("Q6")) Is Nothing Then
>   Dim 保存場所 As String
>   Dim 作成者名 As String
   Application.EnableEvents = False
  
   '処理
  
   Application.EnableEvents = True
としてみたらいかがえしょうか?

【50785】Re:changeイベントが働かないのですが
質問  Tsuyo  - 07/8/15(水) 16:00 -

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

>   Application.EnableEvents = False
>  
>   '処理
>  
>   Application.EnableEvents = True

 試してみたのですが、どうも原因は違うところにあるようです。

 他のモジュールと言いましたが見積を作成するプログラムを作っているため、
価格表から値段を呼び出したりと、別シートのモジュールもワークシート、標準モジュールともに幾つかあります。 その中に原因があるかもと思うのですが見つけられませんでした。

 気になるのは、このブックを保存終了し、また開いたときに、このChangeイベントが動いてしまうということです。 特にブックを開いたときのイベントは設定していないはずなのですが。

 また少ない情報ですが、コンボボックスなどに手を出すようになりおかしくなってしまったので、なにか見当がつくようでしたら教えてください。

【50786】Re:changeイベントが働かないのですが
質問  Tsuyo  - 07/8/15(水) 16:34 -

引用なし
パスワード
   > 気になるのは、このブックを保存終了し、また開いたときに、このChangeイベントが動いてしまうということです。 特にブックを開いたときのイベントは設定していないはずなのですが。

上記の現象だけでなく、セル(Q6)のみでなく、この見積シートのどこを変更してもchangeイベントが動いてしまいます。
もう一度今作成したモジュールを載せさせてもらいます。


Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("Q6")) Is Nothing Then
   Dim 保存場所 As String
   Dim 作成者名 As String
  
   Application.EnableEvents = False
   Application.ScreenUpdating = False
  
   保存場所 = "D:\2.開発中物件\見積書作成\見積システム\"
   作成者名 = 保存場所 & "名刺写し\" & Sheets("見積出").Range("Q6").Value & ".jpg"
  
   Worksheets("見積出").Select
   On Error Resume Next
   ActiveSheet.Shapes("作成者").Delete
   '
   ActiveSheet.Shapes.AddPicture 作成者名, False, True, 387, 105, 170, 140
   ActiveSheet.Pictures.Select
   Selection.Name = "作成者"
   Worksheets("メイン").Select
  
   If Target.Address(0, 0) = "Q6" Then
    MsgBox Target.Value
   End If

   Application.ScreenUpdating = True
   Application.EnableEvents = True
  
End If

End Sub

宜しくお願いします。

【50787】Re:changeイベントが働かないのですが
発言  ponpon  - 07/8/15(水) 16:37 -

引用なし
パスワード
   ▼Tsuyo さん:
>
> 試してみたのですが、どうも原因は違うところにあるようです。

ダメでしたか・・・
>
> 気になるのは、このブックを保存終了し、また開いたときに、このChangeイベントが動いてしまうということです。 特にブックを開いたときのイベントは設定していないはずなのですが。

私の方では、開き直してもイベントは発生しません。

>
> また少ない情報ですが、コンボボックスなどに手を出すようになりおかしくなってしまったので、なにか見当がつくようでしたら教えてください。

どこかにQ6の値を変えるようなコードはありませんか?
これ以上は、私にはわかりませんので、識者の回答をお待ちください。

【50788】Re:changeイベントが働かないのですが
発言  ponpon  - 07/8/15(水) 17:08 -

引用なし
パスワード
   selectがよくないのではとselectしない方法で
書き直してみました。
私の方では、これで画像が1枚貼り付けられましたが・・
試してみてください。

Private Sub ComboBox1_Change()
  Range("Q6").Value = ComboBox1.Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim 保存場所 As String
   Dim 作成者名 As String

If Not Intersect(Target, Range("Q6")) Is Nothing Then
 
   Application.EnableEvents = False
   Application.ScreenUpdating = False
 
   保存場所 = "D:\2.開発中物件\見積書作成\見積システム\"
   作成者名 = 保存場所 & "名刺写し\" & Sheets("見積出").Range("Q6").Value & ".jpg"
 
   With Worksheets("見積出")
     On Error Resume Next
     .Shapes("作成者").Delete
     On Error GoTo 0
     .Shapes.AddPicture(作成者名, False, True, 387, 105, 170, 140).Name = "作成者"
   End With
'   If Target.Address(0, 0) = "Q6" Then
'     MsgBox Target.Value
'   End If


   Application.ScreenUpdating = True
   Application.EnableEvents = True
 
End If

End Sub

【50796】Re:changeイベントが働かないのですが
お礼  Tsuyo  - 07/8/16(木) 12:25 -

引用なし
パスワード
   ▼ponpon さん:
原因が解りました!
コンボボックスのListFillRangeプロパティに入力した値が問題だったようです。

作業者が増えても自動的に選択リストをに表示してくれるように
=INDIRECT("作成者T!$B$4:$B$"&COUNTA(作成者T!$B:$B)-2+4)
この式に作業者名と言う名前を付け、ListFillRangeプロパティに作業者名と記入していました。
得意先名や工事名のコンボボックスにも同様のことをしていて異常は無かったのですが、なぜか質問をしていたこの設定で作業をすると前記の異常が出ていた様です。

完全に解決したとは言えないですが、ponponさんのおかげで、問題を絞り込むことができ、原因を見つけることができましたので先に進むことができます。
ありがとうございました。

コンボボックスで自動的に選択リストを増やすようにする設定方法は、また新規投稿として質問させてもらいます。

【50848】不思議
発言  Tsuyo  - 07/8/18(土) 11:19 -

引用なし
パスワード
   >原因が解りました!
>コンボボックスのListFillRangeプロパティに入力した値が問題だったようです。
>
再度ListFillRangeプロパティに同じ名前を入れてみたら、正常に動いてしまいました・・・

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