Skip to content

Instantly share code, notes, and snippets.

@baoo777
Last active July 2, 2019 09:57
Show Gist options
  • Save baoo777/8945689d7572fed656b548f987c615df to your computer and use it in GitHub Desktop.
Save baoo777/8945689d7572fed656b548f987c615df to your computer and use it in GitHub Desktop.
ファイル共有フォルダへの読み書きサンプル
Option Explicit
Public 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
'ネットワーク接続定数
Public Const RESOURCETYPE_DISK = &H1 'ディスク
Public Const CONNECT_UPDATE_PROFILE = &H1 '次回ログオン時に再接続
Public Const RESOURCE_CONNECTED = &H1
Public Const RESOURCETYPE_ANY = &H0
Public Const RESOURCEDISPLAYTYPE_SHARE = &H3
'ネットワークエラー定数
Public Const ERROR_SUCCESS = 0 '正常終了
Public Const ERROR_BAD_NETPATH = 53 'ネットワークパスが不正
Public Const ERROR_ACCESS_DENIED = 8 'ネットワーク資源へのアクセスが拒否されました。
Public Const ERROR_ALREADY_ASSIGNED = 85 'lpLocalName で指定したローカルデバイスは既にネットワーク資源に接続されています。
Public Const ERROR_BAD_DEV_TYPE = 66 'ローカルデバイスの種類とネットワーク資源の種類が一致しません。
Public Const ERROR_BAD_DEVICE = 1200 'lpLocalName で指定した値が無効です。
Public Const ERROR_BAD_NET_NAME = 67 'lpRemoteName で指定した値を、どのネットワーク資源のプロバイダも受け付けません。資源の名前が無効か、指定した資源が見つかりません。
Public Const ERROR_BAD_PROFILE = 1206 'ユーザープロファイルの形式が正しくありません。
Public Const ERROR_BAD_PROVIDER = 1204 'lpProvider で指定した値がどのプロバイダとも一致しません。
Public Const ERROR_BUSY = 170 'ルーターまたはプロバイダがビジー( おそらく初期化中)です。この関数をもう一度呼び出してください。
Public Const ERROR_CANCELLED = 1223 'ネットワーク資源のプロバイダのいずれかでユーザーがダイアログボックスを使って接続操作を取り消したか、接続先の資源が接続操作を取り消しました。
Public Const ERROR_CANNOT_OPEN_PROFILE = 1205 '恒久的な接続を処理するためのユーザープロファイルを開くことができません。
Public Const ERROR_DEVICE_ALREADY_REMEMBERED = 1202 'lpLocalName で指定したデバイスのエントリは既にユーザープロファイル内に存在します。
Public Const ERROR_EXTENDED_ERROR = 1208 'ネットワーク固有のエラーが発生しました。エラーの説明を取得するには、WNetGetLastError 関数を使います。
Public Const ERROR_INVALID_PASSWORD = 86 '指定したパスワードが無効です。
Public Const ERROR_NO_NET_OR_BAD_PATH = 1203 'ネットワークコンポーネントが開始されていないか、指定した名前が利用できないために、操作を行えませんでした。
Public Const ERROR_NO_NETWORK = 1222 'ネットワークに接続されていません。
Public Const ERROR_DEVICE_IN_USE = 2404 '指定したデバイスがアクティブなプロセスによって使用中のため、切断できません。
Public Const ERROR_NOT_CONNECTED = 2250 'lpName パラメータで指定した名前がリダイレクトされているデバイスを表していないか、lpName で指定したデバイスにシステムが接続していません。
Public Const ERROR_OPEN_FILES = 2401 '開いているファイルがあり、fForce が FALSE です。
'ネットワークドライブの接続
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" ( _
ByRef lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, _
ByVal lpUserName As String, _
ByVal dwFlags As Long) As Long
'ネットワークドライブの切断
Public Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" ( _
ByVal lpName As String, _
ByVal dwFlags As Long, _
ByVal fForce As Long) As Long
'**********************************************************************
' ネットワークドライブ接続(API)
'**********************************************************************
Sub Sub_ConnectionAddAPI()
Dim nrsNet As NETRESOURCE
Dim strUser As String
Dim strPass As String
Dim lngRet As Integer
'ネットワークリソース設定
With nrsNet
.dwType = RESOURCETYPE_DISK 'リソースタイプ
.lpLocalName = "X:" 'ローカル名(割り当てるドライブ)
.lpRemoteName = "\\hogehoge\Kyoyu" 'リモートパス(要はサーバ等の共用パス)
.dwScope = RESOURCE_CONNECTED
.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
End With
strUser = "user" 'ユーザ名
strPass = "pass" 'パスワード
'ネットワークドライブの接続
'例1)
'次回ログオン時に再接続の場合
'lngRet = WNetAddConnection2(nrsNet, strUser, strPass, CONNECT_UPDATE_PROFILE)
'例2)
'次回ログオン時に再接続しない場合
lngRet = WNetAddConnection2(nrsNet, strPass, strUser, 0)
Debug.Print ("接続:" & lngRet)
'例3)
'ユーザ名、パスワードが不要な場合
'lngRet = WNetAddConnection2(nrsNet, vbNullString, vbNullString, 0)
Select Case lngRet
Case ERROR_SUCCESS
Debug.Print ("接続処理:正常終了。:" & lngRet)
Case ERROR_BAD_NETPATH
Debug.Print ("接続処理:PCが見つかりません。:" & lngRet)
Case ERROR_BAD_NET_NAME
Debug.Print ("接続処理:パスが見つかりません。(共有になっていません):" & lngRet)
Case ERROR_ALREADY_ASSIGNED
Debug.Print ("接続処理:既に接続済みです。:" & lngRet)
Case Else
Debug.Print ("接続処理:サーバーに接続できません。:" & lngRet)
End Select
FileCopy "X:\hoge.txt", "C:\Users\baoo\Desktop\hogehoge.txt"
'ネットワークドライブ切断
'例1)
'「恒久的な接続でなくなった」とします。(次回ログオン時に再接続しない)
lngRet = WNetCancelConnection2("X:", CONNECT_UPDATE_PROFILE, True)
'例2)
'プロファイルを更新しない(次回ログオン時の設定は元のまま)
'lngRet = WNetCancelConnection2("T:", 0, True)
'例3)
'開いているファイルやジョブが存在する場合、切断しない
'存在する場合、エラーとなります。(lngRet<>0)
'lngRet = WNetCancelConnection2("T:", 0, False)
Select Case lngRet
Case ERROR_SUCCESS
Debug.Print ("切断処理:正常終了。:" & lngRet)
Case ERROR_NOT_CONNECTED
Debug.Print ("切断処理:既に切断済みです。:" & lngRet)
Case Else
MsgBox (lngRet)
Debug.Print ("切断処理:その他:" & lngRet)
End Select
End Sub
'**********************************************************************
' ネットワークドライブ接続(WshNetwork)
'**********************************************************************
Sub Sub_ConnectionAddWsh()
Dim objWshNetwork As Object
Set objWshNetwork = CreateObject("WScript.Network")
objWshNetwork.MapNetworkDrive "X:", "\\hogehoge\Kyoyu", False, "user", "pass"
FileCopy "X:\hoge.txt", "C:\Users\baoo\Desktop\hogehoge.txt"
objWshNetwork.RemoveNetworkDrive "X:"
Set objWshNetwork = Nothing
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment