|    | 
     一応出来上がったので・・・。 
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 
 
いろんな方々のコードをパクリました。 
ご指導いただければうれしいです。 
 
 | 
     
    
   |