Excel VBA質問箱 IV

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

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


1878 / 13645 ツリー ←次へ | 前へ→

【71247】FileDialog(msoFileDialogFilePicker) 亜矢 12/2/14(火) 20:00 質問[未読]
【71248】Re:FileDialog(msoFileDialogFilePicker) とおりすがりんご 12/2/14(火) 21:59 発言[未読]
【71249】Re:FileDialog(msoFileDialogFilePicker) UO3 12/2/15(水) 2:59 発言[未読]
【71251】Re:FileDialog(msoFileDialogFilePicker) 亜矢 12/2/15(水) 4:12 回答[未読]
【71256】Re:FileDialog(msoFileDialogFilePicker) 亜矢 12/2/15(水) 19:27 質問[未読]
【71259】Re:FileDialog(msoFileDialogFilePicker) UO3 12/2/15(水) 21:11 発言[未読]
【71261】Re:FileDialog(msoFileDialogFilePicker) 亜矢 12/2/15(水) 21:55 質問[未読]
【71262】Re:FileDialog(msoFileDialogFilePicker) UO3 12/2/15(水) 23:29 発言[未読]
【71263】Re:FileDialog(msoFileDialogFilePicker) とおりすぎ 12/2/16(木) 0:10 回答[未読]
【71266】Re:FileDialog(msoFileDialogFilePicker) sasa 12/2/16(木) 17:53 回答[未読]
【71260】Re:FileDialog(msoFileDialogFilePicker) UO3 12/2/15(水) 21:26 発言[未読]
【71264】Re:FileDialog(msoFileDialogFilePicker) UO3 12/2/16(木) 9:51 発言[未読]
【71265】Re:FileDialog(msoFileDialogFilePicker) UO3 12/2/16(木) 10:50 発言[未読]
【71267】Re:FileDialog(msoFileDialogFilePicker) こたつねこ 12/2/16(木) 17:54 発言[未読]
【71268】Re:FileDialog(msoFileDialogFilePicker) UO3 12/2/16(木) 20:30 発言[未読]
【71272】Re:FileDialog(msoFileDialogFilePicker) 亜矢 12/2/17(金) 4:11 お礼[未読]
【71306】Re:FileDialog(msoFileDialogFilePicker) 亜矢 12/2/20(月) 16:29 お礼[未読]

【71247】FileDialog(msoFileDialogFilePicker)
質問  亜矢  - 12/2/14(火) 20:00 -

引用なし
パスワード
   いつもお世話になります
With Application.FileDialog(msoFileDialogFilePicker)
  .Show
 Name=.SelectedItems(1) 
 TextBox2.Text= Name
End with
上記はエクセル2007で行って問題はありません。
 しかし、2003に移植すると、ファイル選択画面で固まってしまいます。
 これってエクセル2003では使用できないでしょう。
どうか、ご指導の程よろしくお願いします。

【71248】Re:FileDialog(msoFileDialogFilePicker)
発言  とおりすがりんご  - 12/2/14(火) 21:59 -

引用なし
パスワード
   これはどうなりました?
 
オートメーションについて
h t tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=71228;id=excel

【71249】Re:FileDialog(msoFileDialogFilePicker)
発言  UO3  - 12/2/15(水) 2:59 -

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

ユーザーフォームでの処理ですよね。
今、2003で、提示のコードを書き、ユーザーフォームを表示して
このコードを動かしましたが、ダイアログがでて、選択したブックのフルパス情報が
TextBox2にセットされましたよ。

##オートメーションの件、私も気になっています。

【71251】Re:FileDialog(msoFileDialogFilePicker)
回答  亜矢  - 12/2/15(水) 4:12 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>ユーザーフォームでの処理ですよね。
>今、2003で、提示のコードを書き、ユーザーフォームを表示して
>このコードを動かしましたが、ダイアログがでて、選択したブックのフルパス情報が
>TextBox2にセットされましたよ。
>
>##オートメーションの件、私も気になっています。

オートメーションは同じ名前でも私ではありません。
 コードを会社の方で動かして確認してみます。
 ありがとうございました。

【71256】Re:FileDialog(msoFileDialogFilePicker)
質問  亜矢  - 12/2/15(水) 19:27 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>ユーザーフォームでの処理ですよね。
>今、2003で、提示のコードを書き、ユーザーフォームを表示して
>このコードを動かしましたが、ダイアログがでて、選択したブックのフルパス情報が
>TextBox2にセットされましたよ。
会社で再テストを行いましたが、固まってしまいましたが、
 タスクバーをファイルをクリックすると開始できることがわかりました。
 ユーザーフォームはシート上のコマンドボタンから起動しています。
また、ユーザーフォームをUnloadするとうまくいきます。
 これらのことで何か解決のヒントがありませんでしょうか。
 よろしくお願いします。

【71259】Re:FileDialog(msoFileDialogFilePicker)
発言  UO3  - 12/2/15(水) 21:11 -

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

以下2点、おしえてください。
(できるだけ同じ状況を作り出すため)

1.ボタンクリックして起動されるプロシジャ(ユーザーフォームを表示しているプロシジャ)の
 コードを、すべて(Sub から End Sub まで)アップいただけませんか。

2.ユーザーフォーム側で、アップされたコードがあるプロシジャのコードをすべて
 (Sub から End Sub まで)アップいただけませんか。

状況としては、フォーカスがユーザーフォームにあって、でも、アップされたダイアログは
エクセル側からでていて、そのエクセルがフォーカスを持っていないので【固まっている】
そんな症状のような予感がします。

【71260】Re:FileDialog(msoFileDialogFilePicker)
発言  UO3  - 12/2/15(水) 21:26 -

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

アップされたコードが
TextBox2.Value = Name
となっているので、このコードはユーザーフォームモジュールに存在すると
そう理解していますが、それであってます?

【71261】Re:FileDialog(msoFileDialogFilePicker)
質問  亜矢  - 12/2/15(水) 21:55 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>以下2点、おしえてください。
>(できるだけ同じ状況を作り出すため)
>
>1.ボタンクリックして起動されるプロシジャ(ユーザーフォームを表示しているプロシジャ)の
> コードを、すべて(Sub から End Sub まで)アップいただけませんか。
>
>2.ユーザーフォーム側で、アップされたコードがあるプロシジャのコードをすべて
> (Sub から End Sub まで)アップいただけませんか。
>
>状況としては、フォーカスがユーザーフォームにあって、でも、アップされたダイアログは
>エクセル側からでていて、そのエクセルがフォーカスを持っていないので【固まっている】
>そんな症状のような予感がします。
それではコードをアップします。よろしくお願いします。
'シートにあるボタンです。
Private Sub CommandButton9_Click()
Call Module1.コンピュータ名を取得する_WSH
If Module1.PC名 = "NPC" Then
   On Error Resume Next
    DeleteSetting "NPC", "Main" 
   UserForm7.TextBox1.Text = GetSetting("NPC", "Main", "TEXt1")
   UserForm7.TextBox2.Text = GetSetting("NPC", "Main", "TEXt2")
   UserForm7.TextBox3.Text = GetSetting("NPC", "Main", "TEXt3")
   UserForm7.TextBox4.Text = GetSetting("NPC", "Main", "TEXt4")
   UserForm7.TextBox5.Text = GetSetting("NPC", "Main", "TEXt5")
ElseIf Module1.PC名 = "YMC" Then
    On Error Resume Next
    DeleteSetting "YMC", "Main"
   UserForm7.TextBox1.Text = GetSetting("YMC", "Main", "TEXt1")
   UserForm7.TextBox2.Text = GetSetting("YMC", "Main", "TEXt2")
   UserForm7.TextBox3.Text = GetSetting("YMC", "Main", "TEXt3")
   UserForm7.TextBox4.Text = GetSetting("YMC", "Main", "TEXt4")
   UserForm7.TextBox5.Text = GetSetting("YMC", "Main", "TEXt5")
Else
  MsgBox "このパソコンでは使用できません,管理者に相談して下さい"
End If
UserForm7.Show
End Sub

'ユーザーフォーム7にTextbox1からTextbox5を配置しています。

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  With Application.FileDialog(msoFileDialogFilePicker)
  .Show
 Name=.SelectedItems(1) 
 TextBox1.Text= Name
 End with
End sub
 ↑
Textbox1からTextbox5まである

【71262】Re:FileDialog(msoFileDialogFilePicker)
発言  UO3  - 12/2/15(水) 23:29 -

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

だめもとで

・ユーザーフォームモジュールの宣言部に以下を記述
Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
・TextBox1_MouseDownの最初に以下を記述
SetFocus Application.hwnd

これでどうなるか試していただけませんか。

今、手元にエクセル環境がなく、レジストリ変更のコードを含んだコードを実行したときに
フォーカスが、どうなるのか、確認していないので「あてずっぽう」ですが。

【71263】Re:FileDialog(msoFileDialogFilePicker)
回答  とおりすぎ  - 12/2/16(木) 0:10 -

引用なし
パスワード
   まず、上位のバージョンで作成した物を下位のバージョンで動かすことが問題。

SetFocusより、OpenIconの方が良いんじゃないかって気がする。
試して無いが。

【71264】Re:FileDialog(msoFileDialogFilePicker)
発言  UO3  - 12/2/16(木) 9:51 -

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

今、アップいただいたコードを当方の2003で作成し、まずはそのまま実行。
(コンピュータ名を取得する_WSH の中身がわかりませんでしたので、
PC名はセルから取得するようなコードにしてありますが)

★全く同じように、「固まりました」
 さらに私があてずっぽうで申し上げたSetFocusをいれても状況は変わりませんでした。

ということで、しばらく、いろいろ試してみます。

本線とは関係ないのですが、

・プロシジャ、コンピュータ名を取得する_WSH や 変数名 PC名 に Module1. と
 コード名修飾しておられる意味は何かありますか?
・また変数、NAME ですが、もちろん、Dim で宣言すれば使うことはできますが
 これは予約語ですから、別の名前にしておいたほうがよろしいのでは?
 (別の人が見ると、一瞬、ぎょっとしてしまうかも)
・ダイアログでファイルを選ばず、キャンセルを押すとエラーになりますね。
 そこの手当てはしておかれたらよろしいですよ。

【71265】Re:FileDialog(msoFileDialogFilePicker)
発言  UO3  - 12/2/16(木) 10:50 -

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

おはようございます

あてずっぽうにいろいろやりましたら(とりあえず)以下のことがわかりました。

・まず、レスしましたように、SetFocusは、全く役に立ちません。
・また、レジストリ関連処理を削除しても結果は同じく「固まります」
 ですので、レジストリ処理が、この原因でもありません。
・以下にするとOKになります。
 1)たとえばボタンやユーザーフォームのクリックイベントで提示のコードを記述して実行。
 2)各テキストボックスのEnterイベントで提示のコードを記述。
 3)あるいはダブルクリックイベントで提示の位コードを記述。

理由はわかりませんが、MouseDownが、このダイアログ表示と「相性が悪い?」
とりあえず、EnterイベントあるいはDblClickイベントで処理するということはできませんか?

【71266】Re:FileDialog(msoFileDialogFilePicker)
回答  sasa  - 12/2/16(木) 17:53 -

引用なし
パスワード
   >Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  With Application.FileDialog(msoFileDialogFilePicker)
>  .Show
> Name=.SelectedItems(1) 
> TextBox1.Text= Name
> End with
>End sub

MouseDownイベントで不具合の場合の定番ですが、
かわりにMouseUpイベントを用いれば良いとおもいます。
そうすればマウスクリックして処理するインターフェースも変わりませんし...
最後に AppActivate Caption も記述しておけば良いでしょう。

それより気になるのは
↓同じことの羅列です。まとめたほうが良いと思います。
 If Module1.PC名 = "NPC" Then
  '
  UserForm7.TextBox1.Text = GetSetting("NPC", "Main", "TEXt1")
  '省略
 ElseIf Module1.PC名 = "YMC" Then
  '
  UserForm7.TextBox1.Text = GetSetting("YMC", "Main", "TEXt1")
  '省略
 Else

【71267】Re:FileDialog(msoFileDialogFilePicker)
発言  こたつねこ  - 12/2/16(木) 17:54 -

引用なし
パスワード
   こたつねこと申します。

>理由はわかりませんが、MouseDownが、このダイアログ表示と「相性が悪い?」
イベントの発生順とオブジェクトの状態を考えればわかると思うのですが
「MouseDown」->「MouseUp」とイベントが発生しますが、イベント中のMouseDown
で一連のイベントを中断させるような、フォーカスの移動とかをしないことが
原則だと思います。

MouseDownイベントの処理をMouseUpイベントで処理すれば、正常に動きませんか?

【71268】Re:FileDialog(msoFileDialogFilePicker)
発言  UO3  - 12/2/16(木) 20:30 -

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

こんばんは

すでに、sasaさん、こたつねこさんからお答えがあるように、MouseDownをMouseUpに変更すれば正常稼動しますし
また、操作者から見ても従来と同じ操作で処理できますね。(2003環境で確認済み)
ダイアログでキャンセルボタンが押されたときのカバーもすると以下のような感じですね。

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call setFileName(TextBox1)
End Sub

Private Sub TextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call setFileName(TextBox2)
End Sub

Private Sub TextBox3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call setFileName(TextBox3)
End Sub

Private Sub TextBox4_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call setFileName(TextBox4)
End Sub

Private Sub TextBox5_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call setFileName(TextBox5)
End Sub

Private Sub setFileName(tx As MSForms.TextBox)
  With Application.FileDialog(msoFileDialogFilePicker)
    .Show
    If .SelectedItems.Count = 0 Then
      tx.Text = Empty
    Else
      tx.Text = .SelectedItems(1)
    End If
  End With
  AppActivate Caption
End Sub

【71272】Re:FileDialog(msoFileDialogFilePicker)
お礼  亜矢  - 12/2/17(金) 4:11 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>こんばんは
>
>すでに、sasaさん、こたつねこさんからお答えがあるように、MouseDownをMouseUpに変更すれば正常稼動しますし
>また、操作者から見ても従来と同じ操作で処理できますね。(2003環境で確認済み)
>ダイアログでキャンセルボタンが押されたときのカバーもすると以下のような感じですね。
>
>Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox1)
>End Sub
>
>Private Sub TextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox2)
>End Sub
>
>Private Sub TextBox3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox3)
>End Sub
>
>Private Sub TextBox4_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox4)
>End Sub
>
>Private Sub TextBox5_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox5)
>End Sub
>
>Private Sub setFileName(tx As MSForms.TextBox)
>  With Application.FileDialog(msoFileDialogFilePicker)
>    .Show
>    If .SelectedItems.Count = 0 Then
>      tx.Text = Empty
>    Else
>      tx.Text = .SelectedItems(1)
>    End If
>  End With
>  AppActivate Caption
>End Sub
たくさんの方からアドバイスありがとうございます。
 来週月曜日に会社の方で確認してからまた質問をさせてください。
 自宅では問題が無いので、とりあえず来週月曜日に実施したいと思います。

【71306】Re:FileDialog(msoFileDialogFilePicker)
お礼  亜矢  - 12/2/20(月) 16:29 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>こんばんは
>
>すでに、sasaさん、こたつねこさんからお答えがあるように、MouseDownをMouseUpに変更すれば正常稼動しますし
>また、操作者から見ても従来と同じ操作で処理できますね。(2003環境で確認済み)
>ダイアログでキャンセルボタンが押されたときのカバーもすると以下のような感じですね。
>
>Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox1)
>End Sub
>
>Private Sub TextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox2)
>End Sub
>
>Private Sub TextBox3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox3)
>End Sub
>
>Private Sub TextBox4_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox4)
>End Sub
>
>Private Sub TextBox5_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  Call setFileName(TextBox5)
>End Sub
>
>Private Sub setFileName(tx As MSForms.TextBox)
>  With Application.FileDialog(msoFileDialogFilePicker)
>    .Show
>    If .SelectedItems.Count = 0 Then
>      tx.Text = Empty
>    Else
>      tx.Text = .SelectedItems(1)
>    End If
>  End With
>  AppActivate Caption
>End Sub
本日(20日)上記のプログラムにて確認した結果問題なく動きました。
 重ね重ね御礼を申しあげます。
 ありがとうございました。

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