Excel VBA質問箱 IV

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

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


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

【55298】ダイアログの表示方法 aki-33 08/4/26(土) 12:19 質問[未読]
【55299】Re:ダイアログの表示方法 n 08/4/26(土) 12:48 発言[未読]
【55302】Re:ダイアログの表示方法 aki-33 08/4/26(土) 18:32 質問[未読]
【55303】Re:ダイアログの表示方法 neptune 08/4/26(土) 18:59 発言[未読]
【55304】Re:ダイアログの表示方法 aki-33 08/4/26(土) 20:03 質問[未読]
【55305】Re:ダイアログの表示方法 n 08/4/26(土) 20:27 発言[未読]
【55306】Re:ダイアログの表示方法 aki-33 08/4/26(土) 20:31 質問[未読]
【55307】Re:ダイアログの表示方法 n 08/4/26(土) 20:57 発言[未読]
【55308】Re:ダイアログの表示方法 neptune 08/4/26(土) 22:20 発言[未読]
【55309】Re:ダイアログの表示方法 neptune 08/4/26(土) 23:12 回答[未読]
【55311】Re:ダイアログの表示方法 n 08/4/26(土) 23:34 発言[未読]
【55316】Re:ダイアログの表示方法 neptune 08/4/27(日) 11:00 発言[未読]
【55314】Re:ダイアログの表示方法 aki-33 08/4/27(日) 9:37 質問[未読]
【55317】Re:ダイアログの表示方法 neptune 08/4/27(日) 11:14 回答[未読]
【55319】Re:ダイアログの表示方法 aki-33 08/4/27(日) 16:19 お礼[未読]
【55313】Re:ダイアログの表示方法 SS 08/4/27(日) 7:55 発言[未読]

【55298】ダイアログの表示方法
質問  aki-33  - 08/4/26(土) 12:19 -

引用なし
パスワード
   下記の記述のようにフォルダーを指定して写真を貼り付けるマクロを作成したのですが、ダイアログの表示(ChDir Ph)を前回挿入した写真を選択した表示にする方法はないでしょうか?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
  Dim fName As String
  Const Ph As String = _
  "C:"
  ChDir Ph
  With Application
    fName = .GetOpenFilename("画像ファイル(*.jpg), *.jpg", _
    Title:="画像を選択して下さい")
    If fName = "False" Then GoTo ELine
    .ScreenUpdating = False
  End With
  Cancel = True
  With ActiveSheet.Pictures.Insert(fName)
   .Left = Selection.Left: .Top = Selection.Top
   .Width = Selection.Width: .Height = Selection.Height
  End With

ELine:
End Sub

【55299】Re:ダイアログの表示方法
発言  n  - 08/4/26(土) 12:48 -

引用なし
パスワード
   こんにちは。
>ChDir Ph
これを設定しないようにすれば良いのではないでしょうか。
'ChDir Ph

【55302】Re:ダイアログの表示方法
質問  aki-33  - 08/4/26(土) 18:32 -

引用なし
パスワード
   ▼n さん:
>こんにちは。
>>ChDir Ph
>これを設定しないようにすれば良いのではないでしょうか。
>'ChDir Ph
nさん返信ありがとうございます。
ChDir Phを設定しなということは具体的にどうゆうことなのでしょうか?

【55303】Re:ダイアログの表示方法
発言  neptune  - 08/4/26(土) 18:59 -

引用なし
パスワード
   ▼aki-33 さん:
nさんではないですが、

>ChDir Phを設定しなということは具体的にどうゆうことなのでしょうか?
カレントフォルダは一度
ChDir Ph
を実行する事で変わっています。従って、次にgetopenfilenameを実行する際
は、前回のカレントフォルダを表示するようになっていますから、2回目に
ChDir Ph
を実行すると、その条件が初期化されてしまいますから、止めてはどうですか
という意味です。

で、私はExcelのgetopenfilenameをずいぶん長い間使った事無いので
初期のファイルの指定が出来るかどうかはHelpで調べてください。
出来るのなら、引数にあるはずです。

ちなみにWindowsのgetopenfilename(API)には初期ファイルを指定できたと
思いますのでExcelでもあるような気はします。

'ChDir Ph
で初期ファイルが指定されないようなら,
且つ、引数で指定できるなら、前回指定したファイル名をどこかに保存して
おいて指定しなければなりません。

【55304】Re:ダイアログの表示方法
質問  aki-33  - 08/4/26(土) 20:03 -

引用なし
パスワード
   ▼neptune さん:
>▼aki-33 さん:
>nさんではないですが、
>
>>ChDir Phを設定しなということは具体的にどうゆうことなのでしょうか?
>カレントフォルダは一度
>ChDir Ph
>を実行する事で変わっています。従って、次にgetopenfilenameを実行する際
>は、前回のカレントフォルダを表示するようになっていますから、2回目に
>ChDir Ph
>を実行すると、その条件が初期化されてしまいますから、止めてはどうですか
>という意味です。
>
>で、私はExcelのgetopenfilenameをずいぶん長い間使った事無いので
>初期のファイルの指定が出来るかどうかはHelpで調べてください。
>出来るのなら、引数にあるはずです。
>
>ちなみにWindowsのgetopenfilename(API)には初期ファイルを指定できたと
>思いますのでExcelでもあるような気はします。
>
>'ChDir Ph
>で初期ファイルが指定されないようなら,
>且つ、引数で指定できるなら、前回指定したファイル名をどこかに保存して
>おいて指定しなければなりません。
neptune さん下記の記述で前回指定したファイル名を取得することはできますが
getopenfilenameでファイル名の指定ができないのですがどうすればよいのでしょうか?
<ActiveCell.Value = fName>

【55305】Re:ダイアログの表示方法
発言  n  - 08/4/26(土) 20:27 -

引用なし
パスワード
   >getopenfilenameでファイル名の指定
また、読み違いましたすみませんm(_ _)m
#最近多いなorz
neptune さんフォローありがとうございます。

ExcelのGetOpenFilenameメソッドはファイル名指定できなさそうです。
SendKeysを使う方法しか思いつきません。

後、確認なのですが
>前回挿入した写真を選択した表示にする方法
とは、その前回挿入した写真『のみ』を表示する方法ですか?
それともファイルリストは全て表示して、前回挿入した写真のファイルにフォーカスさせる方法?

【55306】Re:ダイアログの表示方法
質問  aki-33  - 08/4/26(土) 20:31 -

引用なし
パスワード
   ▼n さん:
>>getopenfilenameでファイル名の指定
>また、読み違いましたすみませんm(_ _)m
>#最近多いなorz
>neptune さんフォローありがとうございます。
>
>ExcelのGetOpenFilenameメソッドはファイル名指定できなさそうです。
>SendKeysを使う方法しか思いつきません。
>
>後、確認なのですが
>>前回挿入した写真を選択した表示にする方法
>とは、その前回挿入した写真『のみ』を表示する方法ですか?
>それともファイルリストは全て表示して、前回挿入した写真のファイルにフォーカスさせる方法?
n さんお手数かけます。後者のほうです。

【55307】Re:ダイアログの表示方法
発言  n  - 08/4/26(土) 20:57 -

引用なし
パスワード
   >後者のほうです。
ぉわ。やっぱり?
今度はちゃんと読んでましたが、私には可能かどうかさえわかりませんです。
お役に立てずごめんなさい。

【55308】Re:ダイアログの表示方法
発言  neptune  - 08/4/26(土) 22:20 -

引用なし
パスワード
   ▼aki-33 さん:
▼n さん:
こんにちは


>>後、確認なのですが
>>>前回挿入した写真を選択した表示にする方法
>>とは、その前回挿入した写真『のみ』を表示する方法ですか?
>>それともファイルリストは全て表示して、前回挿入した写真のファイルにフォーカスさせる方法?
>n さんお手数かけます。後者のほうです。
後者はnさんのおっしゃるとおり標準の方法では出来ません。
従って、自分でそのような機能を持つダイアログを作成する必要があります。

前者なら、APIで可能です。
「Declare GetOpenFileName 初期ファイル名」でググって見て下さい。
但し、APIですから、それなりに難しいし、手間は掛かります。

【55309】Re:ダイアログの表示方法
回答  neptune  - 08/4/26(土) 23:12 -

引用なし
パスワード
   すみません。読み間違えていました。
訂正します。

>>>後、確認なのですが
>>>>前回挿入した写真を選択した表示にする方法
>>>とは、その前回挿入した写真『のみ』を表示する方法ですか?
>>>それともファイルリストは全て表示して、前回挿入した写真のファイルにフォーカスさせる方法?
>>n さんお手数かけます。後者のほうです。
前者は標準の方法では出来ません。
従って、自分でそのような機能を持つダイアログを作成する必要があります。

後者なら、APIで可能です。
「Declare GetOpenFileName 初期ファイル名」でググって見て下さい。
追加・・・サンプルを見つけられるはずです。

但し、APIですから、それなりに難しいし、手間は掛かります。
どうしても判らないなら、又聞いて下さい。

【55311】Re:ダイアログの表示方法
発言  n  - 08/4/26(土) 23:34 -

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

私はちょっと認識が違って、
■『前者』前回挿入した写真『のみ』を表示する方法
...は何とかSendKeysだけでもできると思うんですけど

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
                    Cancel As Boolean)
  Static Fname As String

  SendKeys Fname
  With Application
    Fname = .GetOpenFileName("画像ファイル(*.jpg), *.jpg", _
                Title:="画像を選択して下さい")
    If Fname = "False" Then
      Fname = ""
      GoTo ELine
    End If
    .ScreenUpdating = False
  End With
  Cancel = True
  With ActiveSheet.Pictures.Insert(Fname)
    .Left = Selection.Left: .Top = Selection.Top
    .Width = Selection.Width: .Height = Selection.Height
  End With

  Fname = Dir(Fname) & "{tab 2}"
ELine:
End Sub

■『後者』ファイルリストは全て表示して、前回挿入した写真のファイルにフォーカスさせる
...はAPIのGetOpenFileNameでできるんでしょうか?
ファイル名のComboBoxではなくて
ファイル一覧のListViewでのファイル名へのフォーカスだと思い、
>従って、自分でそのような機能を持つダイアログを作成する必要があります。
これに同意で、UserFormを使って自作したほうが近道のような気がしたのですが...

【55313】Re:ダイアログの表示方法
発言  SS  - 08/4/27(日) 7:55 -

引用なし
パスワード
   ▼aki-33 さん:
こんにちは、横から失礼します。
aki-33さんの質問への本来の回答ではないのですが、
もし画像の中身を見ながら選択する必要が無いなら
指定フォルダ内の画像ファイル名を一度読み込み
リストボックス等に整理して、ここから選択すると
言うのは如何でしょう?
これなら、前回選択ファイル名のフォーカス当てや
選択済みのファイルを別のリストに移すなどの工夫も
出来ると思いますが。


>下記の記述のようにフォルダーを指定して写真を貼り付けるマクロを作成したのですが、ダイアログの表示(ChDir Ph)を前回挿入した写真を選択した表示にする方法はないでしょうか?
>
>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
>Cancel As Boolean)
>  Dim fName As String
>  Const Ph As String = _
>  "C:"
>  ChDir Ph
>  With Application
>    fName = .GetOpenFilename("画像ファイル(*.jpg), *.jpg", _
>    Title:="画像を選択して下さい")
>    If fName = "False" Then GoTo ELine
>    .ScreenUpdating = False
>  End With
>  Cancel = True
>  With ActiveSheet.Pictures.Insert(fName)
>   .Left = Selection.Left: .Top = Selection.Top
>   .Width = Selection.Width: .Height = Selection.Height
>  End With
>
>ELine:
>End Sub

【55314】Re:ダイアログの表示方法
質問  aki-33  - 08/4/27(日) 9:37 -

引用なし
パスワード
   ▼neptune さん:
>すみません。読み間違えていました。
>訂正します。
>
>>>>後、確認なのですが
>>>>>前回挿入した写真を選択した表示にする方法
>>>>とは、その前回挿入した写真『のみ』を表示する方法ですか?
>>>>それともファイルリストは全て表示して、前回挿入した写真のファイルにフォーカスさせる方法?
>>>n さんお手数かけます。後者のほうです。
>前者は標準の方法では出来ません。
>従って、自分でそのような機能を持つダイアログを作成する必要があります。
>
>後者なら、APIで可能です。
>「Declare GetOpenFileName 初期ファイル名」でググって見て下さい。
>追加・・・サンプルを見つけられるはずです。
>
>但し、APIですから、それなりに難しいし、手間は掛かります。
>どうしても判らないなら、又聞いて下さい。
色々と調べてはみたのですがAPIはまったくわからないので教えて頂けますか?

【55316】Re:ダイアログの表示方法
発言  neptune  - 08/4/27(日) 11:00 -

引用なし
パスワード
   ▼n さん:
こんにちは

>私はちょっと認識が違って、
>■『前者』前回挿入した写真『のみ』を表示する方法
>...は何とかSendKeysだけでもできると思うんですけど
あっ、すみませんこれについては真剣に考えてませんでした。m(_ _)m
それに、昔、SendKeysでうまく動かないという経験をしてから、
SendKeysは使用しないことにしているもので。

こちらは自作の方向で考えていました。

>■『後者』ファイルリストは全て表示して、前回挿入した写真のファイルにフォーカスさせる
>...はAPIのGetOpenFileNameでできるんでしょうか?
>ファイル名のComboBoxではなくて
>ファイル一覧のListViewでのファイル名へのフォーカスだと思い、
こちらですがComboBoxの初期設定をすれば、「ListView」も選択状態になると、
誤った記憶をしておりました。

 ご指摘で、もしかしたら、GetOpenFileNameのフックでやれるかも?とも
思ったんですが、
・根性がない+やってもExcelでは使わない方が良い+ListViewをどのmessageで処理したらよいかが?
で、思っただけで実験もしてません。^ ^;;;

>これに同意で、UserFormを使って自作したほうが近道のような気がしたのですが...
そうかもしれませんね。

ご指摘ありがとうございました。
もう少しで嘘の書きっぱなしになるところでした。

【55317】Re:ダイアログの表示方法
回答  neptune  - 08/4/27(日) 11:14 -

引用なし
パスワード
   ▼aki-33 さん:
こんにちは

先ずお詫びですが、nさんのご指摘の通りListViewを選択状態にはできないようです。

但し、ファイル名を指定するコンボボックスのファイル名の初期値は
設定できます。それでよければ以下のサンプルをどうぞ。

getopenfilename APIの使用方法は
h tp://hanatyan.sakura.ne.jp/
で、左ペインの「VB6.0関係 サンプル一覧」の「ファイル操作関係」の中に
「ファイル選択(保存)ダイアログボックスを表示(API使用)」
と言うサンプルが公開されています。
これで先ず、動かせるところまで改造してください。

HWNDはExcelでは「FindWindow 」APIを使用します。クラス名は「XLMAIN」です。
このサンプルはExcelVBA系の掲示板の過去ログの沢山あると思います。

動くようになりましたら、その旨書き込んでいただけると、改造箇所、方法
を書き込みます。

もし、全く判らない、改造も出来ないなら、冷たいようですが、
APIの使用はあきらめて下さい。APIは全く判らずに使用するには危険ですから。
それに私は丸受けもしないので。

【55319】Re:ダイアログの表示方法
お礼  aki-33  - 08/4/27(日) 16:19 -

引用なし
パスワード
   ▼neptune さん:
▼aki-33 さん:
いろいろとありがとうございました。
私には難しすぎて手に負えそうにありませんのであきらめます。
もう少し勉強してからにしたいとおもいます。
本当にありがとうございました。

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