
いつもありがとうございます。
現在、サーバ上の2つの共有フォルダへネットワークドライブを作成するVBSを作成しております。
動作と致しましては、VBS実行時に共有フォルダへアクセスするユーザ名とパスワードを入力するフォームを表示して、認証をパスするとネットワークドライブを作成します。
※アカウント・パスワードは共通です。
ネット上からアドバイスをいただき、参考にして下記ソース(拙いコードで申し訳ありません)にて作成したのですが、接続に失敗した際のメッセージがうまくできません。
実現したいことは失敗した際の「ユーザ名、、またはパスワードが間違っています」を表示するようにしておりますが、ネットワークドライブ接続回分表示されます。(今回の場合は2回)
複数のネットワークに失敗した場合でも1回のみの表示にして処理を終了させたいのですが
アドバイス頂けないでしょうか。(最終行付近)
-----------------------------------------------------------------------------
Set objNetwork = WScript.CreateObject("WScript.Network")
Set objWShell = CreateObject("wscript.shell")
' ホスト名
strComputerName = UCase(Left(objNetWork.ComputerName, 6))
' 本スクリプト名
strScriptPath = WScript.ScriptName
' コンピュータ名から対象の学校を検索
Select Case strComputerName
Case "CN3002"
SchoolName = "会社A"
ServerIP = "\\192.168.1.30"
Drive_Letter1 = "S:"
Drive_Letter2 = "T:"
Drive_Letter3 = "U:"
Drive_Letter4 = "V:"
Drive_Letter5 = "W:"
Drive_Letter6 = "X:"
UNC_Path1 = ServerIP & "\共有A"
UNC_Path2 = ServerIP & "\共有B"
UNC_Path = Array(UNC_Path1, UNC_Path2)
Drive_Letter = Array(Drive_Letter1, Drive_Letter2)
Case Else
Wscript.echo "対象のサーバが確認できません。" & chr(13) & "ホスト名を確認して再度実行してください。"
WScript.Quit 10
End Select
Set colDrives = objNetwork.EnumNetworkDrives
Drive_Count = 0
ServerFlag = 0
Raku_ServerFlag = 0
For i = 0 to colDrives.Count - 1 Step 2
If Left(colDrives.Item(i + 1),15) = ServerIP Then
ServerFlag = 1
End If
If SchoolName = "会社B" AND Left(colDrives.Item(i + 1),15) = ServerIP2 Then
Raku_ServerFlag = 1
End If
Next
If ServerFlag <> 1 Then
call InputUser(strUser,strPassword)
Raku_ServerFlag = 1
End If
If SchoolName = "会社B" AND Raku_ServerFlag <> 1 Then
call InputUser(strUser,strPassword)
End If
' 認証のみで接続されているUNCパスへの対応
For i = 0 to colDrives.Count - 1 Step 2
Next
colD_Count = i - 1
For j = 0 to UBound(Drive_Letter)
Drive_Count = 0
For i = 0 to colD_Count Step 2
If Drive_Letter(j) = colDrives.Item(i) Then
Drive_Count = Drive_Count +1
End If
Next
' 洛陽2台目サーバ対策
If Drive_Count <> 1 AND SchoolName = "会社B" AND Drive_Letter(j) = Drive_Letter4 Then
On Error Resume Next
objNetwork.MapNetworkDrive Drive_Letter(j), UNC_Path(j), False, strUser, strPassword
Call ErrorCheck(Err.Number)
ElseIf Drive_Count <> 1 Then
If ServerFlag <> 1 Then
On Error Resume Next
objNetwork.MapNetworkDrive Drive_Letter(j), UNC_Path(j), False, strUser, strPassword
Call ErrorCheck(Err.Number)
Else
On Error Resume Next
objNetwork.MapNetworkDrive Drive_Letter(j), UNC_Path(j), False
Call ErrorCheck(Err.Number)
End If
End If
Next
' ユーザ名とパスワードを入力
Sub InputUser(strUser,strPassword)
On Error Resume Next
Set objExplorer = WScript.CreateObject _
("InternetExplorer.Application", "IE_")
objExplorer.Navigate "file:///C:\WINDOWS\System32\Password.htm"
objExplorer.Title = "学習系サーバ接続"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = 400
objExplorer.Height = 200
objExplorer.Left = 300
objExplorer.Top = 200
objExplorer.Visible = 1
Do While (objExplorer.Document.Body.All.OKClicked.Value = "")
Wscript.Sleep 250
Loop
strUser = objExplorer.Document.Body.All.UserName.Value
strPassword = objExplorer.Document.Body.All.UserPassword.Value
strButton = objExplorer.Document.Body.All.OKClicked.Value
objExplorer.Quit
Wscript.Sleep 250
If strButton = "Cancelled" Then
Wscript.Quit
End If
On Error Goto 0
End Sub
Sub ErrorCheck(Err_Number)
If Err_Number <> -2147024891 Then
Select Case Err_Number
Case -2147023570
Wscript.echo "ユーザー名かパスワードが間違っています。"
Exit Sub
Case 0
Exit sub
Case Else
Wscript.echo "ネットワーク状態を確認してください。"
End Select
End If
End Sub
-----------------------------------------------------------------------------
以上、あまり良い質問ではありませんが、どうぞよろしくお願い致します。
No.2ベストアンサー
- 回答日時:
二回目以降のエラーの場合には処理を中断して抜ける・・という事でしょうか?
なら、下記が参考になるかも?
適当なファイル名でお試しを
dim failcount '失敗数
for i = 1 to 6
wscript.echo i & "_" & failcount
if failcount > 1 then
wscript.echo failcount & "over "
wscript.quit
end if
call chk(i)
next
sub chk(i)
if i mod 2 = 0 then
failcount = failcount + 1
end if
end sub
個人的にはネットワークドライブが中途半端で設定されるのは嫌なので
一旦、総なめしてエラーが無かったらネットワークドライブの設定処理に入る
↑その分、倍近く処理時間が掛かってしまいます
か
先の回答者さんのようにエラー時には逐一Wscript.echoで出さずに
ため込んでいて最後に成功の可否を出すようにすると思います。
この回答への補足
ありがとうございます。
nicotinism様のおっしゃる通り、「2回目以降(ひとつの処理が失敗=2回目以降も失敗)はメッセージを表示せず、処理を終了する」といった動作を希望しています。
一度、教えて頂いたソースを参考にさせて頂きます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
TCPサーバ bind関数のエラーに...
-
【VBA】関数の宣言なしにプロシ...
-
ASP 0x80004005 クライアント...
-
EXECLマクロでshapeがグルーフ...
-
C# try-catch でcatchに飛ばす方法
-
エラー 'ASP 0115'
-
ASP更新・変更ができない
-
CreateObject("Excel.Applicati...
-
内部関数のエラーを外部に
-
画面のリフレッシュを意図的に...
-
ASP内で他のASPファイルを読み...
-
ネットワーク上のPCのIPとホス...
-
ペ-ジでエラ-が発生しました
-
asp.net でのドロップダウンリ...
-
エラー 'ASP 0115' について
-
winsock通信時エラーの回避
-
GridViewからテンプレートフィ...
-
CentOS6でyumコマンドやrpmコマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
vbscriptの変数宣言
-
TCPサーバ bind関数のエラーに...
-
VBSでIEを起動し、拡大率を変更...
-
VBSにてサーバー中のエクセルフ...
-
式はメソッドではありませんと...
-
名前が二重に定義されています
-
CreateObjectの同時実行時について
-
ASPでAccessのデータを更新、削除
-
VBA 関数(Function) カッコ...
-
誰かVisualBasicのデータフォー...
-
JScriptでアラートを表示するには
-
メール一括送信VBAへのアドレス...
-
EXCEL VBA API宣言でコンパイル...
-
1つの作業の制限時間を増やしたい
-
VisualStudioでXMLHTTPオブジェ...
-
EXCEL2010エラーVBA
-
submit できない
-
標準モジュールPublic宣言変数...
おすすめ情報