|
一応出来上がったので・・・。
PC80台 ユーザーは実質 約130名ほど
リンクの変更が自分でできる人 一割居るかいないか位の職場です。
成功率80%目標、後は個別対応
option Explicit
'ネットワークドライブ検査
’各ユーザーで割り当てが違ってる場合が多いので調査
Sub Net_D調査()
Dim Wsh_N As Object
Dim oDrives As Object
Dim i As Long
Set Wsh_N = CreateObject("WScript.Network")
Set oDrives = Wsh_N.EnumNetworkDrives
With ThisWorkbook.Sheets("Net_D書出し")
.Range("C2:D65530").ClearContents
For i = 0 To oDrives.Count - 2 Step 2
With .Range("C65530").End(xlUp).Offset(1)
If oDrives.Item(i) <> "" Then
.Value = oDrives.Item(i)
Else
.Value = "???" '何かわからん
End If
.Offset(, 1).Value = oDrives.Item(i + 1)
End With
Next i
End With
Set oDrives = Nothing
Set Wsh_N = Nothing
End Sub
'変換リストからネットワークドライブに割り当てられているドライブと変換先
'を追加していく
'Sheet2.Range("A2:B6")は変換リスト
'A列 B列
'現状 新リンク
'エンエンF-sv03エンA エンエンppエンdfsエンA第1部
'エンエンF-sv03エンB エンエンppエンdfsエンA第2部
Sub 変換リスト作成()
Dim f_R As Range
Dim S_r As Range
Dim Hit_R As Range
Dim HIT_RR As Range
With ThisWorkbook.Sheets("Net_D書出し")
.Range("A7:B65535").ClearContents
'接続先検索range設定(Sub Net_D調査で作成したリスト)
Set S_r = .Range("D2:D" & .Range("D65535").End(xlUp).Row)
'現状range設定()
Set Hit_R = .Range("A2:A" & .Range("A65535").End(xlUp).Row)
'接続先が新リンク先に当てはまるか?当てはまればリストに追加
For Each f_R In S_r
For Each HIT_RR In Hit_R
If LCase(f_R.Value) = LCase(HIT_RR.Value) Then '大文字小文字が違うかも・・・なので
.Range("A65535").End(xlUp).Offset(1).Value = f_R.Offset(, -1).Value
.Range("B65535").End(xlUp).Offset(1).Value = HIT_RR.Offset(, 1).Value
Exit For
End If
Next
Next
End With
End Sub
'これでThisWorkbook.Sheets("Net_D書出し")のA列は
'ネットワークドライブの割り当てを含め置換したいリスト
'B列に置換するリストが出来上がった。
'ここから、実際にリンクの設定をしなおす
Sub リンク変更()
Dim Find_R As Range '置換対象のリスト
Dim Tar_B As Workbook
Dim aLinks As Variant
Dim Hit_R As Range
Dim i As Long
Dim V_Path As Variant
With ThisWorkbook.Sheets("Net_D書出し")
Set Find_R = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With
Set Tar_B = ActiveWorkbook
aLinks = Tar_B.LinkSources
If Not IsEmpty(aLinks) Then
For i = 1 To UBound(aLinks)
With ThisWorkbook.Sheets("変換履歴").Range("A65536").End(xlUp).Offset(1)
.Value = i
V_Path = Split(aLinks(i), "\")
If V_Path(0) <> "" Then 'ネットワークドライブ割り当ての場合
.Offset(, 1).Value = V_Path(0)
Else '\\***\*** なので、0と1は ""
.Offset(, 1).Value = "\\" & V_Path(2) & "\" & V_Path(3)
End If
Set Hit_R = Find_R.Find(What:=.Offset(, 1).Value, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not Hit_R Is Nothing Then '実際はChangeLink メソッドで変更が
.Offset(, 2).Value = Replace(aLinks(i), .Offset(, 1).Value, Hit_R.Offset(, 1).Value)
End If
V_Path = ""
End With
Next i
Else
MsgBox "対象のリンクはありません"
End If
end sub
いろんな方々のコードをパクリました。
ご指導いただければうれしいです。
|
|