リストボックスにだされた値を選択し、コマンドボタンを押すと、そのリストボックスの選択された値と同じファイル名のファイルを開きたいのですが、何かいい方法はありませんか?
> 何かいい方法はありませんか?
「いい方法」って事は、何が問題点(良くしたい点)があるんですよね?
とりあえず、「貴方が実際にやった方法」を提示した上で、
「問題点(良くしたい点)」を提示してください。
ListBoxにファイル名が入っている、って事ですか?
何にせよ、開発環境によって答えが変わってくると思うので、
その辺は書いた方がいいですよ。
うーん動きが無いなぁ……萎縮しちゃった?
「いい方法」と言うより「方法が思いつかない」と言った方がいい状況かもしれないですし、
何はともあれOS、言語(VBのバージョン)と、現在の状況(根本的にわからないのか、
とりあえずやってみたけど うまくいかない or シックリこない、思い通りに動かせない、等)を
書いてみたらどうでしょう?
「一応やってみた」なら、ソースコードのうち、問題となるプロシージャも
貼り付ける方がいいかも。
質問がハッキリしないと答える側も基本的に答えられないので。
(但し、少なくとも私が100%答えるという保証はできませんが)
vb6.0でまずある多数のファイル名が入っているcsvファイルから欲しいファイル名をリストボックスに出し、リストボックスにでたファイル名を選択して、コマンドボタンを押すと、そのファイルが開けれるプログラムを作りたいのですが。どうすればいいのかわからないので助けてください。
' 読み込むCSVファイル名
strFileName = "D:\files\" & _
"katee\" & _
"katefile\" & _
"kateelist.csv"
' ファイルシステムオブジェクトへの参照
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
' ファイルを開く
Set objFile = objFileSystem.OpenTextFile(strFileName)
' ファイルの最後に達するまでループ
Do Until objFile.AtEndOfStream
strRecBuff = Split(objFile.ReadLine, ",")
For intCounter = 0 To UBound(strRecBuff)
If strValue = strRecBuff(intCounter) Then
lstResult.AddItem strRecBuff(1)
End If
End Sub
Private Sub Command1_Click()
ここからどうリストボックスの選択された値と同名のファイルを開くのかまったくわかりません。どうか素人なのでよろしくお願いします。
取得するファイル名の、ファイルの種別が一定で、常に同じアプリケーションで開くのなら、
Shell 関数を調べてみてください。
それで済むのなら、一番手っ取り早いです。
ファイルの種別が不定の場合、ShellExecute APIを使うことになるかと思います。
(拡張子に関連付けられたアプリケーションで開く)
簡単な例を。
<Module1.bas>
Option Explicit
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
<Form1.frm - CommandButtonを1つだけ貼り付けてください>
Option Explicit
Private Sub Command1_Click()
Dim ret As Long
ret = ShellExecute(Me.hwnd, "open", "C:\boot.ini", "", "", 5)
If ret < 32 Then
MsgBox "起動に失敗しました。" & vbCrLf & "エラー値 = " & ret
End If
End Sub
念のため、boot.iniは下手に編集するとOSが起動しなくなるので、編集しないよう。
たぶんAPIの使い方は慣れていないのではないかと思うんですが、VB6を使い込んでいく上では
必須のスキルとなります。頑張りましょう。
今回のShellExecuteについては、以下の辺りを参照してみてください。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpshell/html/_win32_shellexecute.asp
http://www.winapi-database.com/Program/Shell/ShellExecute.html
ネット上で うまく情報を検索するのも、覚えていく上で重要なスキルですので
その辺も慣れていくのがいいと思います。
ちなみに、私もShellExecuteは今まで使う状況が発生しなかったのですが、今回
片手間に調べてみました(汗)
あ、もしも「ListBox中の文字列を参照する方法がわからない」のであれば……
頑張ってヘルプで探してみてください。
ListBoxが持っているプロパティの説明を1つ1つ確認してみてください。
そのぐらいは調べられないと、覚えられませんよ。
その上で、どうしても判らなければ、また質問してもらっても いいとは思いますが……
ありがとうございます。今からがんばってみます。もしどうしてもわからない時は、また質問させてもらいます。本当にありがとうございました。
何回もすみません。自分なりにやってみたんですがうごいてくれませんでした。ファイルは開けるようになったのですが、リストボックスの選択された値を変数に置いてその変数でファイルを開こうとすると開けないのですが、どうすればいいのでしょうか??
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpVerb As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Command1_Click()
Dim lngReturnCode As Long
Dim strFileName As String
Dim i As String
i = lstResult.Text
' ファイル名
strFileName = "D:\files\" & _
"katee\" & _
"katefile\" & _
"i"
lngReturnCode = ShellExecute(Me.hwnd, _
"open", _
strFileName, _
vbNullString, _
App.Path, _
SW_SHOWNORMAL)
End Sub
おしい。
strFileName にどういう文字列が入っているか、デバッグで確かめてみてください。
#ブレイクポイントや、ウォッチ式等。
> "i"
では、「『i』と言う文字」の意味になって、「『変数i』の内容」の意味にはなりませんよ。
> strFileName = "D:\files\" & _
> "katee\" & _
> "katefile\" & _
> i
こうすればどうでしょう?
やってみましたがエラー値=2とでてしまいました。どこがまちがっているんでしょうか?本当に何回もすみません・・・。
Private Sub Command1_Click()
Dim lngReturnCode As Long
Dim strFileName As String
Dim i As String
i = lstResult.Text
' ファイル名
strFileName = "D:\files\" & _
"katee\" & _
"katefile\" & _
i
' 関連付けられたアプリケーションを開く
lngReturnCode = ShellExecute(Me.hwnd, _
"open", _
strFileName, _
vbNullString, _
App.Path, _
SW_SHOWNORMAL)
If lngReturnCode < 32 Then
MsgBox "起動に失敗しました。" & vbCrLf & "エラー値 = " & lngReturnCode
End If
End Sub
先ほども言いましたが・・・
> strFileName にどういう文字列が入っているか、デバッグで確かめてみてください。
> #ブレイクポイントや、ウォッチ式等。
は、やってますか?
実際に、どういう文字列だったのか、提示してください。
また、リストで選択した文字列は、具体的に、なんという文字列でしょうか?
こちらも、提示してください。
初めてウォッチ式を使ったので間違っているかもしれませんが、はじめのiにはリストボックスにでた”鈴木みゆき”というファイル名が値に入っているのですが、strFileNameには””だけで何もでてきませんでした。
Watch : : i : "鈴木みゆき" : String : frmMain.Command1_Click
Watch : : strFileName : "" : String : frmMain.Command1_Click
お願いします・・・。
> Watch : : i : "鈴木みゆき" : String : frmMain.Command1_Click
"鈴木みゆき"って・・・本当に「ファイル名」だけなんですか?
拡張子(「.txt」とか「.gif」とか)は無いんですか?
根本的に、拡張子が無いと、ファイルは特定できませんよ。
#つまり、開けません。
> strFileNameには””だけで何もでてきませんでした
どのタイミングでウォッチしましたか?
> strFileName = "D:\files\" & _
> "katee\" & _
> "katefile\" & _
> i
を実行した後(つまり「lngReturnCode = ShellExecute(Me.hwnd, _〜」)まで
プログラムが進まないと、strFileNameには値は入りません。
ツイート | ![]() |