Excel VBA質問箱 IV

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

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


7789 / 13644 ツリー ←次へ | 前へ→

【36579】サーバーにアクセスする時に、パスワードを問い合わせるダイアログを出すに... カド 06/4/4(火) 13:29 質問[未読]
【36586】Re:サーバーにアクセスする時に、パスワー... Jaka 06/4/4(火) 17:35 発言[未読]
【36589】Re:サーバーにアクセスする時に、パスワー... カド 06/4/4(火) 18:22 お礼[未読]
【36594】Re:サーバーにアクセスする時に、パスワー... Jaka 06/4/5(水) 9:23 発言[未読]
【36596】Re:サーバーにアクセスする時に、パスワ... 小僧 06/4/5(水) 10:09 発言[未読]
【36597】Re:サーバーにアクセスする時に、パスワー... JuJu 06/4/5(水) 10:46 発言[未読]
【36607】Re:サーバーにアクセスする時に、パスワー... Jaka 06/4/5(水) 12:19 発言[未読]
【36599】Re:サーバーにアクセスする時に、パスワー... Blue 06/4/5(水) 10:53 回答[未読]
【36851】みなさんありがとうございました。 カド 06/4/15(土) 18:38 お礼[未読]
【36872】Re:みなさんありがとうございました。 Jaka 06/4/17(月) 10:53 発言[未読]

【36579】サーバーにアクセスする時に、パスワード...
質問  カド  - 06/4/4(火) 13:29 -

引用なし
パスワード
   ネットワーク上のサーバーにあるファイルを開くには、下記コードで良いことを
教わりました。

Workbooks.Open "\\ComputerName\c:\temp\Book1.xls"

サーバーへのアクセス権がある人は、なんなくファイルが開けますが、
アクセス権がない人がアクセスした場合でも、アクセスを許可している
ユーザー名とパスを入力すれば開くことが出来るようにしたいのです。

試しに上記コードを実行しても、”ファイルが無い〜”と言ったダイアログが
出るだけで、パスの入力を求めるダイアログは出てきません。

どうすれば実現可能なのでしょうか?

【36586】Re:サーバーにアクセスする時に、パスワ...
発言  Jaka  - 06/4/4(火) 17:35 -

引用なし
パスワード
   修正前
1回目
カレントディレクトリーをサーバーに移動させる時に
サーバーと接続されていなかったら、エラーになりませんか?
エラートラップして、手動でつなげるように施しては?
私は、マクロで接続させる方法を知らないので.....。

修正後
サーバにアクセスできないのにブックを開くとエラーになりませんか?
エラートラップでいいんじゃないかと...。

【36589】Re:サーバーにアクセスする時に、パスワ...
お礼  カド  - 06/4/4(火) 18:22 -

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

回答ありがとうございます。
そうですか、VBAでも出来ないことがあるのですね。

補足
ネットワーク接続出来ていないSQLサーバー(と言っても良く知らないけど)に
VBAでアクセスして処理をしているコードを見たことがあるので
てっきり簡単に出来るものと思っていました。

【36594】Re:サーバーにアクセスする時に、パスワ...
発言  Jaka  - 06/4/5(水) 9:23 -

引用なし
パスワード
   ▼カド さん:
>そうですか、VBAでも出来ないことがあるのですね。
>
>補足
>ネットワーク接続出来ていないSQLサーバー(と言っても良く知らないけど)に
>VBAでアクセスして処理をしているコードを見たことがあるので
>てっきり簡単に出来るものと思っていました。
いや、出来ると思うんですけど、私が知らないだけです。

知らないから、こんな物を使ってたりします。

下記コードをメモ帳に張付け、拡張子をvbsに変更。
このファイルをサーバーの棒フォルダに入れ、このファイルのショートカットをデスクトップに作っておき極たまに使ってます。
単純に
ショーカット元のファイルがおいてあるフォルダをエクスプローラーで開くだけですけどね。

FulPass = WScript.ScriptFullName
BPth = left(FulPass,instrrev(FulPass,"\"))

'Shell "Explorer.exe /e," & BPth, vbNormalFocus
WScript.CreateObject("WScript.Shell").Run "Explorer.exe /e," & BPth '& , vbNormalFocus

【36596】Re:サーバーにアクセスする時に、パスワ...
発言  小僧  - 06/4/5(水) 10:09 -

引用なし
パスワード
   ▼カドさん、Jaka さん:
おはようございます。

AccessVBA関連のページですが下記リンクは如何でしょうか。

YU-TANG's MS-Access Discoveryさんより
DOS コマンドの実行結果を取得する方法
http://x7net.com/~access/AcTipsGetDosResult.html

中段やや下の「別ドメイン内の共有資源に接続する(Net Use コマンド)」が
参考になるかもしれません。

【36597】Re:サーバーにアクセスする時に、パスワ...
発言  JuJu  - 06/4/5(水) 10:46 -

引用なし
パスワード
   エクスプローラなどが表示するネットワークパス入力ダイアログは、Windows標準で実装されておりまして、
WNetAddConnection3などのAPIを使用することによって実現できます。

WNetAddConnection3を使ったサンプルはよく見かけますが、
パスワード入力の付きのサンプルはあまり見かけないようですので、手短に...

-------- 8< -------- 8= -------- 8< -------- 8= -------- 8< --------

Private Type NETRESOURCE
  dwScope As Long
  dwType As Long
  dwDisplayType As Long
  dwUsage As Long
  lpLocalName As String
  lpRemoteName As String
  lpComment As String
  lpProvider As String
End Type
Private Declare Function WNetAddConnection3 Lib "mpr.dll" Alias "WNetAddConnection3A" (ByVal hWndOwner As Long, lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
Private Const RESOURCETYPE_ANY = 0&
Private Const CONNECT_INTERACTIVE = &H8

Sub hoge()
  Dim udtResource As NETRESOURCE
  Dim lngRet As Long
  With udtResource
    .dwType = RESOURCETYPE_ANY
    .lpLocalName = vbNullString
    .lpRemoteName = "\\ComputerName"
    .lpProvider = vbNullString
  End With
  lngRet = WNetAddConnection3(0&, udtResource, vbNullString, vbNullString, CONNECT_INTERACTIVE)
  If lngRet = 0 Then
    ' 接続成功
  End If
End Sub

-------- 8< -------- 8= -------- 8< -------- 8= -------- 8< --------

エラー処理とかhWndOwnerの指定はしていないので、使用する状況によっては注意。

ではではぁ

【36599】Re:サーバーにアクセスする時に、パスワ...
回答  Blue  - 06/4/5(水) 10:53 -

引用なし
パスワード
   APIのWNetUseConnectionを使えば、あのダイアログが立ち上がります。

Option Explicit

Private Const RESOURCETYPE_DISK = &H1

Private Const CONNECT_INTERACTIVE = &H8
Private Const CONNECT_PROMPT = &H10

Private Type NETRESOURCE
  dwScope As Long
  dwType As Long
  dwDisplayType As Long
  dwUsage As Long
  lpLocalName As String
  lpRemoteName As String
  lpComment As String
  lpProvider As String
End Type

Private Declare Function WNetUseConnection Lib "mpr.dll" _
  Alias "WNetUseConnectionA" ( _
  ByVal hwndOwner As Long, _
  ByRef lpNetResource As NETRESOURCE, _
  ByVal lpUsername As String, _
  ByVal lpPassword As String, _
  ByVal dwFlags As Long, _
  ByVal lpAccessName As Any, _
  ByRef lpBufferSize As Long, _
  ByRef lpResult As Long) _
  As Long

Private Sub CommandButton1_Click()
  Dim NetR As NETRESOURCE
  Dim ErrInfo As Long
  Dim buffer As String
  Dim bufferlen As Long
  Dim success As Long
 
  NetR.dwType = RESOURCETYPE_DISK
  NetR.lpRemoteName = "\\サーバー名" ' 任意
 
  buffer = Space(32)
  bufferlen = Len(buffer)
 
  ErrInfo = WNetUseConnection(0, NetR, vbNullString, vbNullString, _
   CONNECT_INTERACTIVE Or CONNECT_PROMPT, buffer, bufferlen, success)
End Sub

参考)http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B256847

【36607】Re:サーバーにアクセスする時に、パスワ...
発言  Jaka  - 06/4/5(水) 12:19 -

引用なし
パスワード
   JuJuさん こんにちは。
30年ぶり?
本物?
香港で拉致されているのかと思ってました。
今までどこほっつき歩いていたんですか?

http://www16.plala.or.jp/ysakuda/ysScript.htm#New9
ネットワークドライブの接続(HTA)
connect.lzh
をロードしてVBAで接続が出来ないか試したことがあるんですけど、
エラーになっちゃって放り投げていました。
VBSと似たもんだと思っていたんですが(拡張子違うけど)、コードの意味が全然わかんなかった。
やっぱりAPIは必要?

今度からこれ使ったろ、と思います。
ありがとうございました。

書き直して追加
ダイアログ出さずに直接つなぐ方法ってある?
パスワードとかコードに直に書いて・・。
合ったらあせーて....。
でも、セキュリティー面から見て没ですね。

【36851】みなさんありがとうございました。
お礼  カド  - 06/4/15(土) 18:38 -

引用なし
パスワード
   みなさん回答ありがとうございました。
残念ながら色々簡単に試せる状況になく、今回は諦めます。

【36872】Re:みなさんありがとうございました。
発言  Jaka  - 06/4/17(月) 10:53 -

引用なし
パスワード
   ▼カド さん:
>残念ながら色々簡単に試せる状況になく、今回は諦めます。
どういうう風に試していたのか解りませんが、JuJuさんの方法で出来ませんでしたか?
JuJuさんのを勝手にいじってみました。

Private Type NETRESOURCE
  dwScope As Long
  dwType As Long
  dwDisplayType As Long
  dwUsage As Long
  lpLocalName As String
  lpRemoteName As String
  lpComment As String
  lpProvider As String
End Type
Private Declare Function WNetAddConnection3 Lib "mpr.dll" Alias "WNetAddConnection3A" (ByVal hWndOwner As Long, lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
Private Const RESOURCETYPE_ANY = 0&
Private Const CONNECT_INTERACTIVE = &H8

Sub hoge()
  Dim udtResource As NETRESOURCE
  Dim lngRet As Long
  
  With Worksheets("Sheet1").OLEObjects("ComboBox1").Object
     If .ListIndex >= 0 Then
      CpmNam = .List(.ListIndex)
     Else
      MsgBox "コンボボックスで選択"
      End
     End If
  End With
  
  With udtResource
    .dwType = RESOURCETYPE_ANY
    .lpLocalName = vbNullString
    .lpRemoteName = CpmNam '"\\ComputerName"
    .lpProvider = vbNullString
  End With

  '一応ログイン名とパスワード
  SendKeys CreateObject("WScript.Network").UserName
  'SendKeys "({Tab})"  '必要に応じて
  'SendKeys "パスワード" ' 同じ
  
  '無理やりSendKeys..。
  '私の所では、これだけで何もせず直に入れました。
  'そちらのログインの許可状況?っていうのかが、わかっていませんが...。
  SendKeys "({ENTER})"
  
  lngRet = WNetAddConnection3(0&, udtResource, vbNullString, vbNullString, CONNECT_INTERACTIVE)
  If lngRet = 0 Then
    MsgBox "接続成功"
  Else
    MsgBox "失敗"
  End If
End Sub

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