|
つまづいてしまい、どうにもこうにもいかないので
お知恵を貸してください。
便利なので、Accessでフレキシブルグリッドコントロールを使ったんですが、
配布すると、参照設定が参照不可になり、いちいちはずしてまたチェックしています。
何とか解消しようと思って、コードで
1)Windowsフォルダのパスを取得
2)msflexgrid.ocxの存在確認
3)無ければサーバーからコピーして再起動を促す
4)存在すれば、参照設定にチェックを
という事をしてみたんですが、
やはりうまくいかなかったんです。
いろいろ考えてみたんですが、
チェックの入った状態で配布して、コントロールが存在しない場合、
コードで参照設定をいったん外し、再度設定すればうまくいくかもと考えました。
しかしその方法が分からない・・・いくら検索しても設定方法しか分からないんです。
そもそもこの方法でうまくいくかどうかも分からないんですが、
チェックを外す方法を教えていただけませんか?
現在のコードは以下のとおりです。
' 宣言部
' システムフォルダを取得するための関数宣言
Declare Function GetSystemDirectory Lib "kernel32.dll" _
Alias "GetSystemDirectoryA" _
(ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
' 最大ファイル名文字数の定数
Public Const MAX_PATH = 260
Public Sub Sys_Load()
'処理済の場合はPublic変数[FLX=True]になってるのでExit
If FLX = True Then
Exit Sub
End If
FLX = False
Dim lngWin32ApiResultCode As Long
Dim strSystemFolder As String
' システムフォルダを取得
strSystemFolder = Space(MAX_PATH - 1)
lngWin32ApiResultCode = _
GetSystemDirectory(strSystemFolder, MAX_PATH)
strSystemFolder = _
Left(strSystemFolder, _
InStr(strSystemFolder, vbNullChar) - 1)
'Microsoft Flex Grid Conrtol 6.0のパス
strmsflexgrid = _
strSystemFolder & "\msflxgrd.ocx"
'フレキシブルグリッドコントロールのバージョン確認
Dim Fso As Object
Dim FilePath As String
Set Fso = CreateObject("Scripting.FileSystemObject")
FilePath = Fso.GetSpecialFolder(1)
If Fso.GetFileVersion(strmsflexgrid) <> "6.0.81.09" Then
'バージョンが違う時いったん削除(File_Delete)
File_Delete (strmsflexgrid)
'最新システムファイルコピー
CopyFromName = FLX_File_Path
CopyToName = strmsflexgrid
Call File_Copy '(File_Copy)
End If
Set Fso = Nothing
'コントロールが存在しない時コピー
If FileExists(strmsflexgrid) = False Then
CopyFromName = FLX_File_Path 'サーバーのコントロールファイルパス(定数)
CopyToName = strmsflexgrid
Call File_Copy
MsgBox "システムファイルのインストールを行いました。" & vbCrLf & _
"再起動後、再度開いてください。", vbOKOnly
Application.Quit
End If
'参照設定
Set Ref = References.AddFromFile(strmsflexgrid)
'処理が済んだのでPublic変数[FLX=True]にする。
FLX = True
End Sub
長々すいません。よろしくお願いします。
|
|