Excel VBA質問箱 IV

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

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


10944 / 76735 ←次へ | 前へ→

【71333】Re:サーバーの更新
発言  Abebobo E-MAIL  - 12/2/21(火) 18:00 -

引用なし
パスワード
   一応出来上がったので・・・。
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

いろんな方々のコードをパクリました。
ご指導いただければうれしいです。
10 hits

【71313】サーバーの更新 Abebobo 12/2/21(火) 9:41 質問
【71314】Re:サーバーの更新 hint 12/2/21(火) 10:00 質問
【71315】Re:サーバーの更新 Abebobo 12/2/21(火) 10:15 発言
【71317】Re:サーバーの更新 Abebobo 12/2/21(火) 10:25 お礼
【71333】Re:サーバーの更新 Abebobo 12/2/21(火) 18:00 発言

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