マンガでよめる痔のこと・薬のこと

VB初心者です。
すごく基礎的なことで恥ずかしいんですが
どうにもわからないのでご教示ください。 m(__)m

ドライブ直下にあるファイルの入出力処理をやりたいのです。
ドライブは「ドライブリストボックス」を使ってドライブ名を選択できるようにしたいのですが
ハードディスクのドライブ名が
 ”c:[windows]”
のようになってしまうのを防ぐ方法はないでしょうか?
単純に”c:” ”d:”のようにドライブ名だけ
表示・取得したいのですが…

方法をご存知の方、ご教示ください。
よろしくお願いします。

A 回答 (4件)

ドライブリストではなく、FileSystemObjectかAPI関数を使ってコンボボックスで代用するとか。

要は手作りでドライブリストボックスを作る。

この辺参考に
http://www.bcap.co.jp/hanafusa/VBHLP/FSO01.htm
http://vbvbvb.com/jp/gtips/0101/gGetLogicalDrive …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ドライブリストは使えそうで使えない面がありますね。
(このコントロールに限ったことではないですが…)

教えていただいたところを参考にして
コンボボックスに使用可のドライブを取得・表示する方法をとることにしました。

ご教示ありがとうございました。

お礼日時:2004/12/21 13:28

普通はVBに付いている(1)ドライブリストボックス(2)Dirリストボックス(3)ファイルリストボックス


の3段階でフルパス名を確定・指定するものと思います。
(1)は、自分のディスク等の現在のフォルダやファイルの有様を反映してくれるから、有り難いのだろうと思います。これがいやなら、(1)を普通のリストボックスで選択させればしまいのことではないでしょうか。リストボックスの項目(アイテム)はC:、D:(必要あればA:、E:など)を用意する。選択された文字列で(2)に(その後(3)に)繋ぐ。誤解していたら済みません。
    • good
    • 0

失礼しました。


マイコンピュータを開いてCドライブのアイコンで右クリックしてメニューからファイル名を変更するを選んで名前を空白にして決定して下さい。
それで大丈夫だと思います。
窓の手なんて関係ありませんでした。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

今回は自分で使用している機器のみで動かすのではなく
配布して他の人に操作していただくものになるので
その方法では残念ながら対応できないのです。

ボリュームラベルはその機器それぞれの設定になっていると思われますので…

お礼日時:2004/12/16 16:51

私の環境(Win2000pro,vb6.0sp6)ではそのようにはなりません。

問題なくc:どだけ表示されています。
ざっとドライブリストボックスのプロパティを見てみましたが、ここをいじれるところはないみたいです。
私の場合マシンは自作機ですから恐らくc:だけになっているのだと思います。
メーカー製の場合はWindows98などのラベルがついていたと思います。
つまりVBは関係なくて別のところをいじればよいのでしょうが、「窓の手」なんかが使えるかもしれません。ちょっと調べてみます。
あとVBによる解決方としてはドライブリストボックスを使用するのをやめて、「コンボボックス」なんかで代用してみてはいかがでしょう?
ドライブの数はそうそう変化するものではありませんから、一度ご自分の環境をメモっておいてそれをコンボボックスの初期値として設定しておけばよいと思います。
(これだとCDドライブとかにディスクが入ってもそれが反映されませんね…)
すみませんが私ではこれくらいしか思いつきませんでした。
    • good
    • 0

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

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

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

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVB.netで DirListBoxを使いたい

使用環境 VB2005 express です。
フォーム操作の中でDirListBoxとFileListBoxを使っています.
DirListBoxをクリックしてFileListBox内にファイル一覧を表示するのですが
表示するタイミングが遅く感じます. (PCの性能上ではなく)

(1)該当するフォームを一度選択してアクティブにします

(2)その次にもう一度選択してもファイル一覧が開かず
もう一度ダブルクリックします。

(3)つぎにもう一度選択して、中身のファイル一覧が見えます。

これが最短での操作になるのでしょうか?

今のところは下記 実行時で処理しています。
DirListBox1_SelectedValueChanged

下記も試してみましたが、あまり変わらないか、遅くなります。
DirListBox1_Change
DirListBox1_Click
DirListBox1_Validated

以上宜しくお願い致します。

Aベストアンサー

SelectedIndexChanged を。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard24.htm

Q保存先のフォルダ名を指定したいとき

希望する事は
ファイルを保存するフォルダを指定し、
ファイル名(インプットボックスをつかって
変数として入力させたもの)をつけて保存したい。
フォルダは事前に作成してあるが
保存したい場所はそのときによってまちまちなので
保存するたびにフォルダを指定したい。


具体的には
C:\入力済みデータ\【○○】としたいのですが
この【○○】の部分を、そのときに応じて選択するにはどうすればいいでしょうか。

または、浅知恵で
Application.Dialogs(xlDialogSaveAs).Show arg1:="c:\"
というかたちでダイアログボックスを出すまでは出来たのですが
ファイル名は空欄になってしまいますよね。

InputBoxでファイル名を変数として入力させたものを
上のファイル名に入れることは可能ですか?

どうぞよろしくお願いします。

Aベストアンサー

これでできませんか?
まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。
Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。

Sub hoge()
Dim initPath As String
initPath = "C:\入力済みデータ"
Dim saveFilePath As String
saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls")
If Not (saveFilePath = "False") Then
ThisWorkbook.SaveAs saveFilePath
End If
End Sub

"ファイル名を指定して保存" のダイアログが表示され、初期フォルダとして C:\入力済みデータ が開かれています。
ファイル名は何も指定されていません。
ダイアログの中には当然、先に作っておいたいくつかのサブフォルダが一覧表示されているので、ユーザーは
1) サブフォルダを選択する。
2) ファイル名を入力する。
3) [保存] ボタンをクリックする。
というアクションを行う。

私のところではダイアログ表示時の初期フォルダとして My Documents ではなく、きちんと C:\入力済みデータ が開かれましたよ。

これでできませんか?
まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。
Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。

Sub hoge()
Dim initPath As String
initPath = "C:\入力済みデータ"
Dim saveFilePath As String
saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls")
If Not (saveFilePath = "False") Then
ThisWorkbook.SaveAs saveFilePath
End If
End Su...続きを読む

QVB上で実行中の無限ループの止め方

今まで、CUIベースのBASICでのプログラムの経験はあるのですが
Visual系のBASICは初心者です。
原因はわかっているのでプログラムの修正はできるのですが
VB上でコンパイルして実行したときに無限ループに陥ってしまって
どうにもプログラムをとめられなくなります。
そんなことがないように、実行前に全てのプロジェクトを保存して
いますので、そんなに実害はないのですが、どうすればとめられるのでしょう・・
今現在は、タスクマネージャーから強制終了させています。

Aベストアンサー

無限ループの一番内側に
DoEvents
を入れておくと、ウィンドウ切替え->デバッガ終了操作が出来ますよ

危なそうなとこにも入れておくと、何かと安心です。

QVBAでネットワークコンピュータのファイルにアクセスできない(XL2000)

EXCEL2000で、EXCELのファイルと、データ専用のファイルを組にして運用しています。都度データファイルのバックアップを取るために、VBA中でネットワークコンピュータ(LAN)のフォルダにFileCopyしようとするのですが、ファイルが見つからないというエラーが出て、コピー出来ません。しかし、エクスプローラーで一回ネットワークフォルダーを開いてから終了し、再度VBAを実行すると問題なくコピー出来ます(何か道筋が出来るらしい)。
また、WEBで調べてAPIのCopyFileを用いると良いという記事をみて、トライしましたが事態は同じでした。なお、過去の類似の質問で、WindowsXPの場合のMicrosoftの情報が紹介されていましたが、本ケースでは両方のPCともWindows98です。
以上、宜しくお願いします。

Aベストアンサー

こんにちは。様子が見えてきましたね。
パスワードの件、おそらく他に正解があると思いますが、
ネットワークドライブを割当てるのが手っ取り早いかと。

Dim FS, WshNet
Const strDrive = "Z:"

Set FS = CreateObject("Scripting.FileSystemObject")
Set WshNet = CreateObject("WScript.Network")

If Not FS.DriveExists(strDrive) Then
WshNet.MapNetworkDrive strDrive, "\\コピー先PC\コピー先フォルダ", False, , "パスワード"
End If
FS.CopyFile "コピー元パス", strDrive & "\", True

Set WshNet = Nothing
Set FS = Nothing


です。
ドライブ割当ては、

WshNet.MapNetworkDrive "ドライブレター", "割当てパス", False, "ユーザ名", "パスワード"

の部分で、False を True にすると、起動時に再接続します。
また、WinMe で確認しましたがユーザ名は省略できるようです。

ファイルのコピーに FileSystemObject を使っているようなので大丈夫とは思いますが、
念のため、実行する端末には最新の Win98 用 スクリプトランタイムを入れてください。

下記からダウンロードできます。

参考URL:http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=E74494D3-C4E1-4E18-9C6C-0EA28C9A5D9D

こんにちは。様子が見えてきましたね。
パスワードの件、おそらく他に正解があると思いますが、
ネットワークドライブを割当てるのが手っ取り早いかと。

Dim FS, WshNet
Const strDrive = "Z:"

Set FS = CreateObject("Scripting.FileSystemObject")
Set WshNet = CreateObject("WScript.Network")

If Not FS.DriveExists(strDrive) Then
WshNet.MapNetworkDrive strDrive, "\\コピー先PC\コピー先フォルダ", False, , "パスワード"
End If
FS.CopyFile "コピー元パス", strDrive & "\", True...続きを読む

QExcel VBA でPictureBoxオブジェクトの取得

Excel VBA では、標準でImageBoxオブジェクトがありますが、これではなくVisualBasicのPictureBoxで持っている機能が使いたいのです。ExcelのUserFormにPictureBoxオブジェクトを貼り付ける方法があれば、教えて下さい。

Aベストアンサー

VBでActiveXコントロールを作成してみたらいかがでしょうか。

Qデバッグでエラートラップが効かない

以下のようなトラップで
EXEを実行させると
ファイルがないことで起こる
エラーは発生しないのですが
デバッグ実行すると
トラップが効かず
ファイルが存在しません
というエラーがでてしまいます
エラートラップが効かないようなのですが
なぜでしょう?

On Error GoTo KILLERROR

Kill "file"

KILLERROR:
Resume Next

Aベストアンサー

VBの設定で
[ツール]-[オプション]の全般タブで
エラートラップを”エラー発生時に中断”にすると
On Errorでトラップしていてもエラーが出ます。

一度チェックしてみてください。

QExcel VBA でファイルが開かれているか確認する

ExcelのVBAで、book1.xlsというファイルが現在開かれているか確認するにはどんなプロパティを使えばいいでしょうか?

実際にやりたい事は、book1.xlsに対して処理するマクロがあるのですが、そのbook1.xlsが開かれていなければ処理が出来ないのでマクロが入っているファイルを閉じる。というものです。

Aベストアンサー

Workbookは、Workbooksコレクションによって管理されているので、Worlbooksの中身を列挙することでチェック可能です。

Dim wb As WorkBook
Dim blnFlag As Boolean
For Each wb In Workbooks
  If wb.Name = "book1.xls" Then
    blnFlag = True
    Exit For
  End If
Next

もっと手っ取り早くですと、
Set wb = Workbooks("book1.xls")

これでエラーが発生したら開いていないと判断できます。

ただし、この処理を呼ぶ前にOn Error Resume Nextでエラートラップを無効にしておかないと処理が中断してしまいます。

QExcelの終了時に「クリップボードに…」を出なくする方法

Aファイル上でBファイルを開いて、BファイルのデータをAファイルにコピーして、Bファイルを閉じるマクロ(VBA)を作っています。
しかし、Bファイルを閉じるとき「クリップボードにデータがあり、他のアプリケーションで使用する場合は…」とかいうメッセージが出ます。
他のアプリケーションで使う予定はないので、このメッセージを出さずにBファイルを閉じたいのですが、どなたかおわかりの方、教えてください。
ちなみに、マクロの最後の部分は次のようになっています。

Application.Goto Reference:=strName
Selection.Copy
Windows(strMasterName).Activate
Application.Goto Reference:=strName & strNo
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Windows(strFileName).Activate
Sheets(strBase).Select
ActiveWindow.Close
Windows(strMasterName).Activate

Application.ScreenUpdating = True
MsgBox "コピーが終了しました"

Aファイル上でBファイルを開いて、BファイルのデータをAファイルにコピーして、Bファイルを閉じるマクロ(VBA)を作っています。
しかし、Bファイルを閉じるとき「クリップボードにデータがあり、他のアプリケーションで使用する場合は…」とかいうメッセージが出ます。
他のアプリケーションで使う予定はないので、このメッセージを出さずにBファイルを閉じたいのですが、どなたかおわかりの方、教えてください。
ちなみに、マクロの最後の部分は次のようになっています。

Application.Goto Reference:=...続きを読む

Aベストアンサー

マクロの最後に
Application.CutCopyMode = False
を追加してみて下さい。
切り取りモードまたはコピー モードを解除し、点滅している枠線を取り除きます。

Qファイルとフォルダのどちらも選択できるダイアログ

環境
 OS:Win2000及びWinXP
 バージョン:VB6.0 SP5

ファイルとフォルダのどちらも選択できるダイアログを使用する為のAPIを探しています。

詳しく言うと、Windowsのエクスプローラ上で右クリックから新規のショートカットを作成した際の、
ウィザードにて参照ボタンを押下した際に表示される使用されているダイアログのようなものです。

フォルダまたはファイルだけのダイアログをAPIにて表示できる方法は調べて分かったのですが、
フォルダとファイルをどちらでも選択できるダイアログが見つかりませんでした。

逆にフォルダまたはファイルだけのダイアログのAPIのオプションの違いなのでしょうか?

ヒント・キーワード・参考サイトだけでも良いので、
よろしくお願いします。

Aベストアンサー

ショートカット作成時にフォルダとファイルの両方選択されるようになっているのは
基本的には、フォルダ選択ダイアログを使えば可能です。
フォルダ選択を呼び出す時に、BrowseInfo構造体の ulFlags に BIF_BROWSEINCLUDEFILES を指定して
呼び出せば可能です。

ただし、BIF_BROWSEINCLUDEFILES フラグは Shellのバージョン依存がありますので気をつけて下さい。
(めんどくさかったら気にせずに結構ですw)

[キーワード]
SHBrowseForFolder フォルダ選択ダイアログ
BrowseInfo フォルダ選択ダイアログへの渡す構造体

参考URLはM$のMSDNのSHBrowseForFolderについて

参考URL:http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp


人気Q&Aランキング