Excel VBA質問箱 IV

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

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


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

【53138】ファイル表示の方法 KAO 07/12/17(月) 9:21 質問[未読]
【53140】Re:ファイル表示の方法 Jaka 07/12/17(月) 10:12 発言[未読]
【53260】Re:ファイル表示の方法 KAO 07/12/24(月) 10:07 質問[未読]
【53261】Re:ファイル表示の方法 かみちゃん 07/12/24(月) 11:48 発言[未読]
【53266】Re:ファイル表示の方法 KAO 07/12/24(月) 16:53 お礼[未読]

【53138】ファイル表示の方法
質問  KAO E-MAIL  - 07/12/17(月) 9:21 -

引用なし
パスワード
   「セルに、表品番号を入力すると、同じ番号のファイルが開く」という設定で、
下記のようにVBAを作成しましたが、今のままだと、違う列のセルに文字を入力し、「ENTER」を押す度に、ファイルが何度も画面に現れてきてしまいます。
これを、一度きりしか表示されないようにするには、どうしたらよいのでしょうか?

Private Sub Worksheet_Change(ByVal C As Range)

  Dim strPartsNumber As String 
  Dim strfileName  As String  
  Dim LR As String
  Dim LRfileName As String
  
  strPartsNumber = Worksheets("DATA").Range("C65536").End(xlUp).Offset(0, 4)
  LR = Worksheets("DATA").Range("c65536").End(xlUp).Offset(0, 6)
 
  
strfileName = "Y:\検査\詳細" & "\" & strPartsNumber & ".pdf"
LRfileName = "Y:\検査\詳細" & "\" & LR & ".pdf"


   If Dir(strfileName) <> "" Then
     Call OpenFile(strfileName)
    
   Else
    Call OpenFile(LRfileName)
   
   End If

【53140】Re:ファイル表示の方法
発言  Jaka  - 07/12/17(月) 10:12 -

引用なし
パスワード
   >Private Sub Worksheet_Change(ByVal C As Range)
標準の物を変えている意図が良く解りませんが、
変更したセルが意図した物でなかったら、処理をしないで抜ける。
意図したセルであったら、まず該当するブックが開いているか確認し、
開いていなかったら、開く動作に行くといったような処理にしないとダメだと思います。

また、該当ファイルがネットワーク上であるなら、カレントフォルダをそのディレクトリーに移動させないと、Dir関数ではファイル名当は取れません。

【53260】Re:ファイル表示の方法
質問  KAO E-MAIL  - 07/12/24(月) 10:07 -

引用なし
パスワード
   大変返事遅くなりすみません。

JAKAさんの回答ありがとうございます。

超初心者でして・・・、いまいち読んでもピンとこないのが、いまの現状です。

セルの値と同じ名前のPDFが見つかれば、そのPDFファイルを開くというマクロを作ったのですが、一度、ファイルが開き、確認できれば、ファイルを閉じるのですが、閉じてもセルを移動するたびにファイルが出てきてしまいます。

それを回避するための具体的な方法を教えていただけるとうれしいです。
何度もすみません・・・

【53261】Re:ファイル表示の方法
発言  かみちゃん  - 07/12/24(月) 11:48 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

>「セルに、表品番号を入力すると、同じ番号のファイルが開く」という設定で、
>下記のようにVBAを作成しましたが、今のままだと、違う列のセルに文字を入力し、「ENTER」を押す度に、ファイルが何度も画面に現れてきてしまいます。
>これを、一度きりしか表示されないようにするには、どうしたらよいのでしょうか?

まず、
>Private Sub Worksheet_Change(ByVal C As Range)
このコードは、シートモジュールに記述していますか?

標準のものは、
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
となっていると思いますので、わざわざ変数名を変えている意図がわかりません。
ただ、わかりにくいだけというなら、別ですが・・・

それで、
Private Sub Worksheet_Change(ByVal Target As Range)
 MsgBox Target.Address & "-->" & Target.Value
End Sub
とすれば、変更されたセルの番号と、セルの値が表示されます。

strPartsNumber = Worksheets("DATA").Range("C65536").End(xlUp).Offset(0, 4)
の部分は、何をしているのか、今ひとつわからないのですが、本当に
> セルに、表品番号を入力すると、同じ番号のファイルが開く
としたいならば、
strfileName = "Y:\検査\詳細" & "\" & Target.Value & ".pdf"
でいいと思います。

LRfileName = "Y:\検査\詳細" & "\" & LR & ".pdf"
の部分は、よくわかりませんので、ご自身で考えてください。

なお、このままですと、
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
を記述したシートのどのセルに入力しても、同様の動きをしますので、
 If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
  MsgBox Target.Address & "-->" & Target.Value
 End If
とすると、A1:A2セルに入力したときだけ動作します。

他にも、セルの値を消去したらどうするとか、複数のセルが同時に変更されたら
どうするとかの対策も必要かと思います。

詳しくは、過去ログ等で「Worksheet_Change」を検索してみてください。

【53266】Re:ファイル表示の方法
お礼  KAO E-MAIL  - 07/12/24(月) 16:53 -

引用なし
パスワード
   かみちゃん さま


お返事ありがとうございます。
なんとなく、理解できそうな感じです。

今から、試してみます。

本当にありがとうございました

KAO

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