admin menu ≫  image  writes  admin
スポンサーサイト 
--.--.--.-- 
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
エクセルを使ったプログラムランチャー擬き・・・これで完成  
2009.05.20.Wed 
下書きしたまま忘れてました(^^;;
既に公開済みのモジュールと組合せれば、ダイアログボックスからファイルを選択し、そのファイルの拡張子名に関連づけた登録外部プログラムにファイルを読み込ませて実行する「プログラムランチャー擬き」になります(^^;

Option Explicit
Public IndexNo%

Sub Cmd_Start()
Const Title$ = "外部プログラムの実行"
Dim preActWbName, CmdSheet
Dim CmdLine$, File_ext$, File_Exts$, FileName$, ExeFilePath$
Dim ExeFileName$, msg$
Dim i%, Row%, Style%, Response%, PathLength%, Exe_PathLen%, sec%

'現在アクティブ表示されているブックの名前を取得
preActWbName = ActiveWorkbook.Name

ThisWorkbook.Activate

Set CmdSheet = Worksheets("外部プログラム")

'ダイアログボックスから選択されたファイル名を取得する
Row = 5
FileName = File_Name(CmdSheet, Row)

'外部プログラムの実行
If FileName = "False" Then
'"ファイルの選択がキャンセルされました"というメッセージを
'VBスクリプトのメッセージで2秒間表示
Else
'選択されたファイルの拡張子名を取得
File_ext = Right(FileName, 4)
'選択されたインデックス番号からシートの行番号を計算
Row = Int(IndexNo) + Row - 1
'行番号Rowの4カラム目に登録してある拡張子データを読み込む
File_Exts = CmdSheet.Cells(Row, 4).Value
'拡張子を比較
If InStr(File_Exts, File_ext) <> 0 Or _
InStr(File_Exts, LCase(File_ext)) <> 0 Then
'行番号Rowの2カラム目を読み込んで
'プログラム名とフォルダパス名を取得
CmdLine = CmdSheet.Cells(Row, 2).Value
Exe_PathLen = Len(CmdLine)
For i = 1 To Exe_PathLen
If Left(Right(CmdLine, i), 1) = "\" Then Exit For
Next i
ExeFileName = Right(CmdLine, i - 1)
ExeFilePath = Left(CmdLine, Len(CmdLine) - Len(ExeFileName))
'フォルダ内を検索してプログラムの有無を確認する。
If ExeFile_Check(ExeFilePath, ExeFileName) = True Then
'検索したフォルダ内で外部プログラムが見つかったら
'確認のメッセージを表示してから外部プログラムを実行
PathLength = Len(CurDir()) + 2
msg = "選択ファイル名:" & Mid(FileName, PathLength) & _
vbCrLf & _
"ファイルを読み込んで外部プログラムを実行しますか?"
Style = vbYesNoCancel + vbInformation
Response = MsgBox(msg, Style, Title)
If Response = vbYes Then
'外部プログラムの実行
CmdLine = CmdLine & " " & Chr(34) & FileName & Chr(34)
Shell CmdLine, 1
End If
Else
'外部プログラムが見つからなかった場合
'フォルダパスやプログラム名が間違っていないか等の
'メッセージをMsgBoxで表示する
End If
End If
End If

'処理開始前のブックをアクティブ表示する。
Windows(preActWbName).Activate

End Sub

Function File_Name$(CmdSheet, Row%)
'エクセルを使ったプログラムランチャー擬き(2)で公開したモジュール
'
'外部プログラムを登録したシート名と先頭の行番号の値を渡してダイアログ
'ボックスのフィルターを設定してからダイアログボックスを開き、ダイアログ
'ボックスで選択したフィルターインデックスをグローバル変数IndexNoに代入
'した後、選択されたファイル名を返す。
'
End Function

Function ExeFile_Check(ExeFilePath$, ExeFileName$) As Boolean
'エクセルを使ったプログラムランチャー擬き(3)で公開したモジュール
'
'指定されたフォルダ内を検索し、外部実行プログラムの有無を確認して値を返す
'
End Function


関連記事
スポンサーサイト
* スポンサーサイトエクセルを使ったプログラムランチャー擬き・・・これで完成 へのコメント *
お邪魔しました(^^)。
こんにちは。
今日も家で仕事に追われています。
自分のスキルを上げながら頑張ってます。
といいながら、ブログばかり見てますが(><)
またブログに遊びに来ます!
それでは。

「エクセルVBA備忘録」に書き込みありがとうございます。
自営業ですか??お仕事がんばってください(^^

   

台風画報


ナショジオニュース

降水短時間予報

RSSフィード

月別アーカイブ

ブログ内の検索

プロフィール


  • Designed by Il mio diario
  • Powered by FC2BLOG
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。