Excel VBA質問箱 IV

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

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


3867 / 13645 ツリー ←次へ | 前へ→

【59752】ATコマンドでファイルサーバーのブックが開けない ON 09/1/7(水) 9:26 質問[未読]
【59753】Re:ATコマンドでファイルサーバーのブック... ON 09/1/7(水) 9:45 質問[未読]
【59764】Re:ATコマンドでファイルサーバーのブック... ON 09/1/7(水) 16:33 質問[未読]
【59782】Re:ATコマンドでファイルサーバーのブック... ON 09/1/8(木) 11:20 発言[未読]

【59752】ATコマンドでファイルサーバーのブックが...
質問  ON  - 09/1/7(水) 9:26 -

引用なし
パスワード
   よろしくお願いいたします

エクセルVBAからATコマンドを実行しています

上記で登録したATコマンドで
ローカルPCのエクセルブックは開けますが

ファイルサーバーのブック指定の場合は、エクセルは起動しますが

'\\fuga\foo\hoge.xls' が見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください。
[ファイル] メニューの最近使用したファイルの一覧からファイルを開こうとしている場合は、そのファイルの名前が変更されていないこと、移動または削除されていないことを確認してください。

となってしまいます


  Dim RetVal

   'RetVal = Shell("at 18:39 /interactive ""C:\Program Files\Microsoft Office\OFFICE11\excel.exe"" C:\CP\hoge.xls")

   RetVal = Shell("at 9:16 /interactive ""C:\Program Files\Microsoft Office\OFFICE11\excel.exe"" \\fuga\foo\hoge.xls")

ファイルサーバーのブックを開くにはどう記述すればよいのでしょうか

よろしくお願いいたします


あわせて、
ATコマンドを登録テストしているとIDがどんどんあがってしまいますが
ID指定で上書き登録みたいなことは出来ますか


アドバイスよろしくお願いいたします

【59753】Re:ATコマンドでファイルサーバーのブッ...
質問  ON  - 09/1/7(水) 9:45 -

引用なし
パスワード
   追記です


あと、
ユーザー名の指定 ダイアログボックスが表示され

下のボックスにあなたの氏名と頭文字を入力してください

名前  :SYSYTEM
頭文字 :S

が表示されています

でそのままOKを押すと
空ブック Book1 拡張子無し が、開きます

【59764】Re:ATコマンドでファイルサーバーのブッ...
質問  ON  - 09/1/7(水) 16:33 -

引用なし
パスワード
   途中報告

名前  :SYSYTEM
頭文字 :S
については、
タスクマネージャで見ると
開かれたブックのプロセスのユーザーが SYSYTEM でした


で、とりあえず、サーバーブックでなくローカルブックで実行できればと
下記試してみました


動作説明

ブックのマクロの中身は
ブックが開かれたら
コンピュータ名、ユーザー名、接続モニタのシリアルNOを取得し
ファイルサーバーのmdbに書き込み
最後に自ブックを閉じて終了

テスト1
手動で、ローカルPCのブックのマクロを実行 は、問題ないが
セキュリティ警告のダイアログが出てしまう

テスト2
そこで、vbsで、上記のブックを開く ことにした 
は、問題がない

テスト3
テスト2のvbsをATコマンド経由で実行すると
ブックのユーザーがSYSYTEMになっていて下記の不具合が出ました


不具合1

mdbのopen時
cn.Openで

実行時エラー '-2147467259 (80004005)':
ファイル '\\bar\barbar\foofoo.mdb' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。

で、そのフォルダのアクセス権にeveryoneをつけて回避


不具合2

実際のPCのユーザー名(ログインユーザー名)が取得できなくなりました

そこでATコマンドで開くときブックのユーザー名が
SYSYTEMでなくログインユーザー名に出来れば上記の不具合がなくなる
と思っているのですが可能でしょうか

また
もっといい方法があるような気もしています


あわせてアドバイスあればよろしくお願いいたします


補足 関連Q

【59481】ローカルPCからのデータ取得
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=59481;id=excel

【10900】エクセルからアクセスへAddNewで
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=10900;id=access


コード

do_macro.vbs
-------------------------------------------
Dim wsh, env, exe
Dim ipaddress, computername, username

Set wsh = WScript.CreateObject("WScript.Shell")

'msgbox wsh.ExpandEnvironmentStrings("%COMPUTERNAME%")
msgbox wsh.ExpandEnvironmentStrings("%USERNAME%")

 Dim xl
 Dim book

 Set xl = Wscript.CreateObject("Excel.Application")
 'msgbox "Visible OK?"

 xl.Visible = True

 'Set book = xl.WorkBooks.Open("test.xls")
 Set book = xl.WorkBooks.Open("C:\CP\get_kiki_monita_info.xls")

 xl.Quit
 Set book = Nothing
 Set xl = Nothing

Set wsh = Nothing


get_kiki_monita_info.xls
-------------------------------------------

ThisWorkbook

Private Sub Workbook_Open()

  get_info_add_tbl
  
  'Me.Close
  
  'Excel.Application.Quit


End Sub


標準モジュール adox参照設定

Public Sub get_info_add_tbl()


  Dim login_user
  Dim Computer_nm
  Dim monitor_serial_number
  
  
  login_user = Environ("UserName")
  Computer_nm = Environ("ComputerName")
  monitor_serial_number = Get_Display_serno(Computer_nm)
  
  
  Dim cn As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim intFNum As Integer
  Dim strBuff As String
  Dim vnt As Variant
  Dim I As Long
  
  Set cn = New ADODB.Connection

   With cn
     .Provider = "Microsoft.Jet.OLEDB.4.0"
     .Properties("Data Source").Value = "\\bar\barbar\foofoo.mdb"
   End With
  
  Set rs = New ADODB.Recordset
  
  cn.Open
  
  rs.Open "T_KIKI_LOG2", cn, adOpenKeyset, adLockOptimistic
  
    rs.AddNew

    rs.Fields(0) = login_user
    rs.Fields(1) = Computer_nm
    rs.Fields(2) = monitor_serial_number
    rs.Fields(3) = Now()
    
    rs.Update

    
  rs.Close
  cn.Close
  
  Set rs = Nothing
  Set cn = Nothing

End Sub


ATコマンド
-------------------------------------------

SET_AT()

Dim RetVal
RetVal = Shell("at 16:00 /interactive wscript.exe C:\CP\2009\200901\do_macro.vbs")

End Sub

【59782】Re:ATコマンドでファイルサーバーのブッ...
発言  ON  - 09/1/8(木) 11:20 -

引用なし
パスワード
   結果報告です


Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
  (ByVal lpBuffer As String, nSize As Long) As Long


Windowsにログインしているユーザー名を取得
が取得できるかとやってみましたが
SYSTEM
が取得されてしまいました



初期セット時(ATコマンド、ローカルPCにブックセット時)
ブックに
ユーザー名
を記述することで希望の動作はかないました


わかりにくい質問で申し訳ありませんでした

一応解決ですが、他何かアドバイスありましたらよろしくお願いいたします

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