Замяна на хипервръзки в множество файлове

2 одобрения 0 неодобрения
попитан 2017 ноември 20 в VBA от Деян Драганов начинаещ (17 точки)
В следствие промяна име на сървър ми се налага да редактирам хипервръзки в множество файлове, някаква идея за скрипт или програма

2 отговори

2 одобрения 0 неодобрения
отговорени 2017 ноември 21 от vbafreak експерт (203 точки)
избран 2017 ноември 23 от BgExcelAdmin
 
Най-добър отговор

Този код преминава през всички Екселски файове от дадена папка и сменя всички хиперлинкове:

Sub LoopThroughFilesAndChangeAllHyperlinks()
Dim hLink As Hyperlink
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim MyObj As Object, MySource As Object, file As Variant
    'Set the destination folder. Replace username with your username.
    Const FOLDER As String = "C:\Users\username\Desktop\Excel\"
    file = Dir("C:\Users\username\Desktop\Excel\")
    'Disable screen updating
    Application.ScreenUpdating = False
   'loop through all files
   While (file <> "")
        'Find a Workbook
        If Right$(file, 4) = "xlsx" Or Right$(file, 3) = "xls" Then
        'Check whether you have found an Excel file in the specified directory
         MsgBox "found " & file
            'Open the Workbook
            Set wb = Workbooks.Open(FOLDER & file)
            For Each ws In Worksheets
               For Each hLink In ws.Hyperlinks
                    'Replace the hyperlinks here
                    hLink.Address = Replace(hLink.Address, "http://www.youroldwebsite.com/", "http://www.yournewwebsite.com/")
                Next hLink
            Next
            'Save the Workbook and close it
            ActiveWorkbook.Save
            wb.Close
      End If
     'Select another Workbook
     file = Dir
  Wend
End Sub

 

За целта създай macro-enabled Екселски файл и го постави в друга директория.

Тук има линк със всички методи и свойтва, които можеш да ползваш за тип хиперлинк: https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.hyperlink_members.aspx

Отбележи този отговор, ако ти върши работа. Успех!

3 коментари

коментиран 2017 ноември 23 от Деян Драганов начинаещ (17 точки)
Да върши ми работа, но въпроса е , че връзката е в около 1000 файла, за то исках инструмент за замяна в множество файлове :)
коментиран 2017 ноември 23 от vbafreak експерт (203 точки)
редактиран 2017 ноември 23 от vbafreak
Коригирах си отговора. Кодът минава през всички файлове от дадена директория и променя всички линкове. При положение, че имаш 1000 файла, това ще отнема доста време. За съжаление не се сещам за начин линковете да се сменят без макрото да отваря екселските файлове един по един. Тествай го върху няколко файла първо, за да видиш как ще работи. Може да помислиш за вариант как може да се оптимизира допълнително и да споделиш резултати. :)
коментиран 2017 ноември 23 от Деян Драганов начинаещ (17 точки)
да благодаря много! :)
0 одобрения 0 неодобрения
отговорени 2017 ноември 20 от Tormozko експерт (164 точки)

Здравей,

може да ползваш

1) тази програма

или

2) ако приемем, че искаш да замениш текст в *.config файлове в поддиректории:

$old = Read-Host 'What is the value you are looking to replace?'
$new = Read-Host 'What is the new value you want?'

get-childitem c:\somedir -recurse -include *.cfg | 
 select -expand fullname |
  foreach {
            (Get-Content $_) -replace $old,$new |
             Set-Content $_
            }

1 коментар

коментиран 2017 ноември 21 от Деян Драганов начинаещ (17 точки)
не мога да подкарам тая програма да търси в ексел файлове
Добре дошли в българския форум за Ексел и Майкрософт офис! Тук можете да питате хора със знания и опит, както и да споделите знанията и опита си с другите.
...