Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1870 / 2272 ツリー ←次へ | 前へ→

【4851】フレキシブルグリッドコントロールの参照設定について。 まさき 05/4/9(土) 13:13 質問[未読]
【4870】Re:フレキシブルグリッドコントロールの参... 小僧 05/4/11(月) 14:55 回答[未読]

【4851】フレキシブルグリッドコントロールの参照...
質問  まさき E-MAIL  - 05/4/9(土) 13:13 -

引用なし
パスワード
   つまづいてしまい、どうにもこうにもいかないので
お知恵を貸してください。

便利なので、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

長々すいません。よろしくお願いします。

【4870】Re:フレキシブルグリッドコントロールの参...
回答  小僧  - 05/4/11(月) 14:55 -

引用なし
パスワード
   ▼まさき さん:

こんにちは。
当方フレキシブルグリッドコントロールなる物に
全く知識がありませんが、参照設定を外すコードなら
なんとか…。

Sub test1()
Dim V As Variant

For Each V In Application.References
  If V.Name = "MSFlexGridLib" Then
    Application.References.Remove V
  End If
Next
End Sub

1870 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078242
(SS)C-BOARD v3.8 is Free