Excel VBA質問箱 IV

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

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


1875 / 13645 ツリー ←次へ | 前へ→

【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 発言[未読]

【71313】サーバーの更新
質問  Abebobo  - 12/2/21(火) 9:41 -

引用なし
パスワード
   質問お願いします。

Excel2000 XP Pr です。

3月にサーバーが更新されます。かなり大きなサーバーになります。
といっても、今の16G位のサーバーと比べてですが・・・。
それに伴って、DSF を使ってサーバー名もかわります。
多くの利用者が、各自でエクセルのリンクの設定をしなおさなくてはいけなくなります。

編集→リンクの設定→で ”リンク元” これを取得する方法がわかりません。

これを使って、Replace でサクット変更できたらと思っています。
よろしくお願いします。

【71314】Re:サーバーの更新
質問  hint  - 12/2/21(火) 10:00 -

引用なし
パスワード
   「リンク元の変更」処理をマクロ記録してみてはどうですか?
参考になるコードが得られると思います。

【71315】Re:サーバーの更新
発言  Abebobo E-MAIL  - 12/2/21(火) 10:15 -

引用なし
パスワード
   hint さんありがとうございます。

最後にChangeLink メソッドで変更したいのですが、

円円ABC円BCD円123 の場合は 円円DSF円HJI円123 に変更
円円EFG円RPG円123 の場合は 円円DSF円PPP円123 に変更
円円ABC円と円円EFG円以外は変更しない

と仕分けしたいのです。

【71317】Re:サーバーの更新
お礼  Abebobo E-MAIL  - 12/2/21(火) 10:25 -

引用なし
パスワード
   お騒がせしました。
LinkSources メソッドですね。

【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

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

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