Access2000でコモンダイアログBoxを使用してファイル名を取得
したいのですが、どうも上手く動きません!
取得方法を教えてください・・・

通常だと↓でText形式の保存。ではFile名は?

Dim strPath As String '指定ファイル名格納
'cdg = コモンダイアログ名
Me.cdg.Filter = "text|*.TXT" 
Me.cdg.FileName = "C:\*.txt"
'コモンダイアログボックス表示
Me.cdg.ShowOpen
strPath = "" & Me.cdg.FileName

このQ&Aに関連する最新のQ&A

A 回答 (3件)

サンプルです。



エクセル2000にて動作確認しました。

求めているものと違ったらレスをください。

Private Const CSIDL_DESKTOP   As Long = &H0    'デスクトップ フォルダ
Private Const CSIDL_PROGRAMS  As Long = &H2    'WINDOWS\プログラム フォルダ
Private Const CSIDL_CONTROLS  As Long = &H3    'コントロールパネル フォルダ
Private Const CSIDL_PRINTERS  As Long = &H4    'プリンタ フォルダ
Private Const CSIDL_PERSONAL  As Long = &H5    '共有フォルダ
Private Const CSIDL_FAVORITES  As Long = &H6    'お気に入り フォルダ
Private Const CSIDL_STARTUP   As Long = &H7    'スタートアップ フォルダ
Private Const CSIDL_RECENT   As Long = &H8    '最近使ったファイル フォルダ
Private Const CSIDL_SENDTO   As Long = &H9    '送る フォルダ
Private Const CSIDL_BITBUCKET  As Long = &HA    'ごみ箱 フォルダ
Private Const CSIDL_STARTMENU  As Long = &HB    'スタートメニュ- フォルダ
Private Const CSIDL_DESKTOPDIRECTORY As Long = &H10 'WINDOWS\デスクトップ フォルダ
Private Const CSIDL_DRIVES   As Long = &H11   'マイコンピュータ フォルダ
Private Const CSIDL_NETWORK   As Long = &H12   'ネットワーク フォルダ
Private Const CSIDL_NETHOOD   As Long = &H13   'NETHOOD フォルダ
Private Const CSIDL_FONTS    As Long = &H14   'フォント フォルダ
Private Const CSIDL_SHELLNEW  As Long = &H15   '新規作成 フォルダ

Private Const BIF_RETURNONLYFSDIRS = &H1

Private Type BROWSEINFO
  hWndOwner    As Long
  pidlRoot    As Long
  pszDisplayName As String
  lpszTitle    As String
  ulFlags     As Long
  lpfn      As Long
  lParam     As Long
  iImage     As Long
End Type

Private Declare Function SHBrowseForFolder Lib "SHELL32" (lpbi As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList Lib "SHELL32" (ByVal pIDL As Long, ByVal pszPath As String) As Long

Private Sub Main()
  Dim strRtnValue As String
  strRtnValue = ChoiceFolder("テスト")
  If strRtnValue = "" Then
    MsgBox "未選択"
  Else
    MsgBox strRtnValue
  End If
End Sub


'フォルダの参照ダイアログ
'【パラメータ】ダイアログ解説文
Public Function ChoiceFolder(Optional inGuide As String = "フォルダを指定して下さい。") As String
  Const MAX_PATH = 1000
  Dim lngRetValue   As Long
  Dim strPathBuffer  As String * MAX_PATH
  Dim udtBrowseInfo  As BROWSEINFO
  Dim ReturnPath   As String
  
  
  strPathBuffer = String(MAX_PATH, vbNullChar)
  
  With udtBrowseInfo
    .pidlRoot = CSIDL_PROGRAMS      'ルート フォルダ(CSIDL_xxx)
    .lpszTitle = inGuide & vbNullChar  'ダイアログの解説文
    .ulFlags = BIF_RETURNONLYFSDIRS
  End With
  
  lngRetValue = SHBrowseForFolder(udtBrowseInfo)
  
  If lngRetValue <> 0& Then
    ' パス名だけが返る
    lngRetValue = SHGetPathFromIDList(lngRetValue, strPathBuffer)
    If lngRetValue = 0 Then
      ' 無効なパス
      ReturnPath = ""
    Else
      ReturnPath = Left(strPathBuffer, InStr(strPathBuffer, vbNullChar) - 1)
      If Not (Right(ReturnPath, 1) = "\") Then ReturnPath = ReturnPath & "\"
    End If
  Else
    'キャンセルされた
    ReturnPath = ""
  End If
  ChoiceFolder = ReturnPath
End Function
    • good
    • 0
この回答へのお礼

解決しました!!
ありがとうございます。

お礼日時:2001/12/05 16:45

なるほど、そういうことですか。



現在アクセスにコモンダイアログコントロールを使用してるという状況ですよね?
それではファイルの指定はできても、フォルダを指定させるダイアログを表示させることはできません。

フォルダ参照ダイアログにはAPIが必要です。
現在VB環境が無いのですが、MS-Officeはあるのでなんとかサンプルを載せることができそうです。

今はちと忙しいので、あとでサンプルを載せておきます。
    • good
    • 0
この回答へのお礼

ワザワザすみません!
お待ちしております。

お礼日時:2001/12/04 18:43

>通常だと↓でText形式の保存



保存は
ShowOpenではなく
ShowSaveですよね?

strPath = "" & Me.cdg.FileName
MsgBox strPath
で確認したところ、strPathにはきちんとパスの文字列が帰ってきましたよ。。。

>どうも上手く動きません
とは、ダイアログが表示されないのですか?
それともパスが取れないのですか?

なにがうまく動かないのか、もう一度説明してください。

この回答への補足

返答が送れてゴメンナサイ!
実はこの質問自体が間違ってます。
>>ダイアログボックスで特定のフォルダPathを取得したい。
と思っておりました。
回答がまったく無かった為、削除・修正も出来なく困っておりました。
そろそろ削除できるかと思い閲覧しました。
回答ありがとうございます。
もしよろしければご教授おねがい致します。

補足日時:2001/12/04 16:17
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qイタリア語の"chi"の発音について質問します

Aさん:La macchina, chi la guida? Non so guidare.
Bさん:Neanch'io.
Aさん:Allora, chi l'ha portata?

以上はCD付きのイタリア語講座からです。男声の吹き込み者は最初のchiを「くぃ」、最後のchiを「き」と発音(同じ吹き込み者です)していました。2回スキットを読みましたが2回も同じ発音でした。

chiは

1)文中のどの位置にくるかによって発音が異なる
2)速く読めば当然「き」となる
3)個人差、地域差があるので一概には言えない

のどれが正しいのでしょうか。

Aベストアンサー

chiは「き」ですよね、3)個人差だと思います。
ただ、アクセントの落ちるchiだと「きー」や「きぃ」になりますけど、基本的には「き」ですね。

その時は、口に唾が溜まってたとか(~_~;)、下を噛みそうだったとか(-"-)、そんなのだと思いますよ。

Qコモンダイアログのshowopenについて

CommonDialog1.Filter = "テキスト(*.txt)|*.txt"
CommonDialog1.FilterIndex = 1
CommonDialog1.Flags = cdlOFNFileMustExist
CommonDialog1.ShowOpen
上記のようなプログラムを書いて「ファイルを開く」
ダイアログを表示させてます。
しかし、開いたダイアログのファイル名を入力する欄が
テキストではなく、コンボボックスになっています。
私はファイル名はテキストでただ入力しかできないよう
にしたいのですが、どのように設定すればよいのでしょうか?

それと、左側に「履歴」「デスクトップ」「マイコンピュータ-」「マイネッ
トワーク」のアイコンが表示されているのですがこれも消したいのです。
過去ログを検索しましたが似たような質問がなかったので
質問させていただきました。
よろしくお願い致します。

Aベストアンサー

>APIはまったく使ったことがなく、よくわかりません。

いきなりこのAPIは結構厳しいかも・・・

>どのDLLを使い、どのようにプログラムを書くのでしょうか?教えていただけると助かります。

順番が違いますね。
DLLを探すではなく、使用API関数を探すのが先です。
APIが見つかったら、どこのDLLのにあるかを探します。

で、ファイルを開くダイアログを表示するには、
GetOpenFileName
というAPIを使用します。
詳細は、MSDNを見てください。

とりあえず、APIでファイルを開くコモンダイアログを表示するサンプルです。

http://homepage1.nifty.com/MADIA/vb/API/GetOpenFileName.htm

>私はファイル名はテキストでただ入力しかできないよう
>にしたいのですが、どのように設定すればよいのでしょうか?

こっちはあきらめたほうがいいですよ。
単純にAPIを使うだけではないので。


>それと、左側に「履歴」「デスクトップ」「マイコンピュータ-」
>「マイネッ トワーク」のアイコンが表示されているのですがこれも消したいのです。

こっちなんですが、この左側の部分自体がVB6以降のOSであるWindows2000以降の機能なので、特別な対応が必要です。

urlのところにあるサンプルの中の、OPENFILENAME構造体をWindows2000用に変更する必要があります。


'OPENFILENAME構造体
Public Type OPENFILENAME
lStructSize As Long '構造体のサイズ
hwndOwner As Long 'ウインドウのハンドル
hInstance As Long 'インスタンスハンドル
lpstrFilter As String 'フィルター
lpstrCustomFilter As String 'カスタムフィルター
nMaxCustFilter As Long 'カスタムフィルターのサイズ
nFilterIndex As Long 'フィルタのインデックス
lpstrFile As String 'ファイル名のバッファ
nMaxFile As Long 'ファイル名のバッファのサイズ
lpstrFileTitle As String 'フルパス用のバッファ
nMaxFileTitle As Long 'フルパス用のバッファのサイズ
lpstrInitialDir As String 'ディレクトリを指定
lpstrTitle As String 'ダイヤログボックスのタイトル
flags As Long '定数(OFN_××参照)
nFileOffset As Integer 'フルパスの中のファイル名までのオフセット
nFileExtension As Integer '拡張子までのオフセット
lpstrDefExt As String 'デフォルトの拡張子
lCustData As Long 'lpfnHookで渡すデータ
lpfnHook As Long 'フック関数のポインタ
lpTemplateName As String 'テンプレート名
'---ここから追加---
pvReserved As Long
dwReserved As Long
FlagsEx As Long
'---ここまで追加---
End Type


「ここから追加」から、「ここまで追加」の間の行を追加してください。

あと、
Public Const OFN_EX_NOPLACESBAR = &1

という1行を追加して定数を宣言してください。

で、呼び出すところのEnd Withの前の行に、

.FlagsEx = OFN_EX_NOPLACESBAR

と記述すれば左側の部分が消えるはずです。

#このあたりの説明は、#1の参考urlに書いてあります。

理解していただけましたか?

>APIはまったく使ったことがなく、よくわかりません。

いきなりこのAPIは結構厳しいかも・・・

>どのDLLを使い、どのようにプログラムを書くのでしょうか?教えていただけると助かります。

順番が違いますね。
DLLを探すではなく、使用API関数を探すのが先です。
APIが見つかったら、どこのDLLのにあるかを探します。

で、ファイルを開くダイアログを表示するには、
GetOpenFileName
というAPIを使用します。
詳細は、MSDNを見てください。

とりあえず、APIでファイルを開くコモンダイアログ...続きを読む

Qa couple of について

英会話の本に「for a couple of weeks」を「2週間」と訳していました。
いろいろ調べたのですが、「2,3週間」訳していることもありました。
「for a couple of weeks」は厳密な2週間(例えばfor two weeks)ではなく、大体2週間という感じなのでしょうか?

また、a few と a couple of の違いも教えて下さるとうれしいです。

ご教授おねがいします。

Aベストアンサー

2週間ではないでしょうか。だいたいの期間を言っていてその期間が2週間くらいということなので、2,3週間と訳すことも可能なのかもしれません。

a fewについては、おおざっぱに少量のという意味しかなく、2,3という意味がそもそもないそうです。きいたはなしですが、料理の最中に、a few beansといって、てでおおかまに豆をつかんだばらばらいれたというはなしをきいたことがあります、2,3どこらか、20粒くらいはいったらしいです。

これにたいして、a couple of はめがねとかずぼんとか、はさみとか、一対でひとつになっているものをかぞえるときにつかうので、あきらかに2を指す場合がたくさんあるということで、基本は2と訳していいのだと理解しています。

ただし、2,3週間のようなあいまいさもふくむことができるとおもうので、締切などがかかわってくる場合には、締切日などを日付で確認したほうがいいかとおもいます。

QFOR文でtext1,text2,text3...などとどうやって処理させればいいのですか

超初心者な質問ですみません。
たとえばFOR文を使ってtext1~10まで連続に処理させるには
どういったコードを記述すればよいのでしょうか?
初心者用の本やHPを探しても見当たりませんでした。
お願いします。

Aベストアンサー

textエリアをインデックス配列にすればいいです。
Text1のエリアをファーム上でコピーし、貼り付けると
Text1(0)~ Text1(9) の配列になります。
それを
 
(例)

i =0
for i=0 to 9
text1(i) = x
next

のようにすればいいです。

Qa couple of days と 2日間の違い

外人と話していると、彼らはいつも a couple of days とか a couple of hours とか言いますね。

もし、two days とか two hours とか私が言ったら、彼らはどんな感じで受け取るのでしょうか?

また、two weeks よりも fortnightを使うのが普通なんでしょうか?

宜しくお願いします。

Aベストアンサー

★もし、two days とか two hours とか私が言ったら、彼らはどんな感じで受け取るのでしょうか?
→two daysの方が厳密です。本当に2日という意味ですが、a couple of daysですと、2~3日というような、ぼやけた表現と受け取ります。

★また、two weeks よりも fortnightを使うのが普通なんでしょうか?
→いいえ。fortnightは、fourteen nightを略した形で、主にイギリス英語で使われる表現ですが、今の時代、廃れた表現です。

以上、ご参考になればと思います。

QRst.FindFirst "名称コード" & "=" & "'101'"

タイトルのコードでは問題ないのですが、 101 を文字変数にすると「抽出条件でデータ型が一致していません」のエラーになります。この場合シングルクオーテーションはどういう意味なのでしょうか。
どうすれば良いのでしょうか。

dim Vcode as string
Vcode = "101"
Rst.FindFirst "名称コード" & "=" & Vcode

Aベストアンサー

FindFirst や、フォームの Filter プロパティで設定する場合は、SQL文のWHERE句の
内容を設定する必要があります。

フィールド名がテキスト型の場合は、

SELECT * FROM テーブル名 WHERE フィールド名 = "xxx"

のようになります。
で、FindFirst メソッドなんかで使う場合は、

rst.FindFirst フィールド名 = "xxx"

としたいところですが、条件の部分は文字列にしないといけません。
で、

rst.FindFirst "フィールド名 = "xxx""

こうすると、

フィールド名 =

で、切れてしまいます。
そこで、

rst.FindFirst "フィールド名 = 'xxx'"

このようにすればOKです。
次のステップとして、xxx の部分を変数を使ってやりたい場合。
単純に変数名に置き換えると、

rst.FindFirst "フィールド名 = '変数名'"

ですが、変数を、"" の中に記述すると、文字列として扱われますので、"" の外に
出してやる必要があります。
その場合、文字列と変数をつなぐためには、& を使います。

rst.FindFirst "フィールド名 = '" & 変数名 & "'"

で、このようになります。

FindFirst や、フォームの Filter プロパティで設定する場合は、SQL文のWHERE句の
内容を設定する必要があります。

フィールド名がテキスト型の場合は、

SELECT * FROM テーブル名 WHERE フィールド名 = "xxx"

のようになります。
で、FindFirst メソッドなんかで使う場合は、

rst.FindFirst フィールド名 = "xxx"

としたいところですが、条件の部分は文字列にしないといけません。
で、

rst.FindFirst "フィールド名 = "xxx""

こうすると、

フィールド名 =

で、切れてしまいます...続きを読む

Qcouple of days

教えていただきたいのですが。
Couple of days と a few daysはどちらが日数的には多いのでしょう?

couple of daysは2~3日
a few daysは数日・・・・・・・・・・

ニュアンス的にはa few daysのほうが多いような・・・

でもほとんどの訳って、a fewでも2.3日って書いてあるような

Aベストアンサー

厳密な違いはありませんが、強いて比較するなら私は「couple of days」のほうが日数が少ないと感じます。ちなみに、「a few」は厳密な数を特定できませんが、「a couple」はハッキリと「2」と訳すことも可能です。

QVB.NET コンボボックスからのitem名のTEXTとりいれについて

VB.NET 勉強しはじめてまだ3ヶ月の初心者です。
(もし、表現が幼稚ならお許しください。)

コンボボックスに3個(りんご、バナナ、みかん)のITEMがあります。
まず、りんごをボックスから選んだと同時に、にわざわざ、"りんご”というtextは別には書かないで、そのままボックスにでているりんごの表示をを果物名(labelFruits) に持ってきたいのですが。できますでしょうか。 me.labelFruits.text = ???????

果物名以外の表示には収穫量、消費量など計算させるところがあります。

Aベストアンサー

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Me.labelFruit.Text = ComboBox1.Text
End Sub

ComboBoxを選択した際のイベントに
Labelへの代入を加えてみるとか。

QI will play in a couple big parades this week.

英語初心者です。
I will play in a couple big parades this week.

この意味は、「今週、2つの大きなパレードで演奏するつもり」でいいのしょうか?
この a couple といのは、few times のような意味ですか?
それとも、カップル??
自分なりに調べてみましたが、分からないのでどなたか教えていただけないでしょうか。
よろしくお願いします。

Aベストアンサー

a couple (of)~ 二つ三つの
として使用される表現です。

http://eow.alc.co.jp/search?q=a+couple+of

http://eow.alc.co.jp/search?q=a+couple+of+days

I will play in a few big parades this week.
と言い換えることも可能です。

日本語訳は御解釈の通りで全く問題ありません。

QDim x As Integer = 0

いつもお世話になっております。

只今、本に記載してあるソースコードを手入力しています。
標記のように入力したら、『コンパイルエラー 修正候補:ステートメントの最後』というエラーが出ました。

(1)このエラーは無視してもよいのでしょうか?
(2)そもそも、変数の宣言文の後ろに=0をつけている意味がわかりません。当方VB初心者です。

よろしくお願いいたします。

Aベストアンサー

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsugi.ed.jp/vba4graduate/vba_hensuusyokika.htm
ーーー
定数のConstであればこういう書き方はOK
Sub test01()
Const x As Integer = 0
MsgBox x
End Sub
ーーー
VB.NETでは、OK
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim x As Integer = 10
MsgBox(x)
End Sub
ーー
Javaでは可能であるようです
http://msugai.fc2web.com/java/var2.html
ーーーーー
>ろに=0をつけている意味がわかりません
宣言と同時に値を与える=初期化する

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsug...続きを読む


人気Q&Aランキング

おすすめ情報