لیندا یک سند Word دارد که حاوی بسیاری از (1800+) لینک به منابع موجود در اینترنت است. او باید تمام لینکها را تبدیل کند تا به یک URL در وب مطلق نباشند، بلکه به یک مکان نسبی در درایو USB اشاره کنند. نام فایل HTML در درایو USB همان چیزی است که در وب بود، فقط محل آن فایل HTML است که در حال تغییر است. لیندا در مورد بهترین راه برای انجام تبدیل تعجب می کند.
بهترین راه این است که تبدیل ها را با استفاده از ماکرو انجام دهید. هر لینک در سند شما در مجموعه Hyperlinks ذخیره میشود که به راحتی از طریق VBA قابل دسترسی است. این به شما این امکان را می دهد که از طریق مجموعه لینک ها قدم بردارید، آدرس های هر کدام را بررسی کنید و سپس تغییراتی در آنها ایجاد کنید. در اینجا نمونه ای از این ماکروها آورده شده است:
Sub ConvertHyperlinks()
Dim sNewBase As String
Dim sFile As String
Dim sNewFile As String
Dim sChanged As String
Dim sNotChanged As String
Dim sTemp As String
Dim J As Integer
Dim h As Hyperlink
sNewBase = "c:myplace"
sChanged = ""
sNotChanged = ""
For Each h In ActiveDocument.Hyperlinks
sTemp = h.Address
If Left(sTemp, 5) = "https:" Then
sFile = ""
For J = Len(sTemp) To 2 Step -1
If Mid(sTemp, J, 1) = "/" Then
sFile = Right(sTemp, Len(sTemp) - J)
Exit For
End If
Next J
If sFile > "" Then
sNewFile = sNewBase & sFile
h.Address = sNewFile
sChanged = sChanged & sTemp & " (changed to " & _
sNewFile & ")" & vbCrLf
Else
sNotChanged = sNotChanged & sTemp & vbCrLf
End If
Else
sNotChanged = sNotChanged & sTemp & vbCrLf
End If
Next h
Documents.Add
Selection.TypeText "The following hyperlinks were modified:" & vbCrLf
Selection.TypeText sChanged & vbCrLf & vbCrLf
Selection.TypeText "The following hyperlinks were not modified:" & vbCrLf
Selection.TypeText sNotChanged & vbCrLf
End Sub
ماکرو با قدم گذاشتن در مجموعه Hyperlinks شروع می شود. هر آدرس به متغیر sTemp اختصاص داده می شود، که سپس بررسی می شود که آیا با "https:" شروع می شود یا خیر. برخی از لینکها - برای مثال، آنهایی که برای آدرسهای ایمیل یا فایلهای موجود هستند - با این کاراکترها شروع نمیشوند. اگر مطابقت پیدا شد، کد از طریق آدرس به عقب برمیگردد تا اسلش نهایی را در آن آدرس پیدا کند. پیدا می شود، سپس sFile برابر با همه چیز بعد از اسلش نهایی تنظیم می شود، به این معنی که برابر با فایل HTML خواهد بود.
یک نکته جالب در اینجا این است که وقتی یک هایپرلینک در یک سند word ایجاد میکنید، Word کمی پردازش آنچه را که تایپ میکنید در مقایسه با آنچه واقعاً در هایپرلینک ذخیره میشود، انجام میدهد. به عنوان مثال، فرض کنید موارد زیر را در یک سند تایپ می کنید:
www.Tips.net
Word به طور خودکار آن را به عنوان یک وب سایت تشخیص می دهد و آن را به یک لینک تبدیل می کند. (البته با فرض اینکه Word را برای انجام تبدیل خودکار URL تنظیم کرده اید.) اگر به آدرسی که واقعاً در لینک ایجاد شده ذخیره شده است نگاه کنید، موارد زیر را مشاهده خواهید کرد:
https://www.Tips.net/
از آنجا که این آدرس با "https:" شروع می شود، ماکرو آن را چیزی قابل پردازش در نظر می گیرد. با این حال، حلقه ای که از طریق آدرس به دنبال آخرین کاراکتر اسلش به عقب برود، آن را در انتها پیدا خواهد کرد. این بدان معنی است که sFile به دلیل این کد خالی خواهد بود:
sFile = Right(sTemp, Len(sTemp) - J)
طول sTemp و J دقیقاً برای آخرین کاراکتر در رشته یکسان است، بنابراین sFile حاوی 0 کاراکتر سمت راست است، به این معنی که خالی است. نکته اصلی این است که حاوی نام فایل نخواهد بود، بنابراین URL اصلی به چیز دیگری تبدیل نمی شود.
برای اینکه ماکرو به درستی روی سیستم شما کار کند، باید رشته sNewBase را تغییر دهید تا حاوی هر چیزی باشد که می خواهید به ابتدای آدرس های پردازش شده اضافه شود. به یاد داشته باشید که همانطور که نوشته شده است، رشته پیش فرض اضافه شده به ابتدای یک فایل است. c:myplace". بنابراین "https://www.PCcloob.ir/privacy.html" به "c:myplaceprivacy.html" تغییر یافته است. این آدرس تبدیل شده، به طور دقیق، یک لینک نسبی نیست. هایپرلینک نسبی در ابتدا کاراکترهای c: را ندارد، بنابراین در نهایت چیزی شبیه به "myplaceprivacy.html" خواهد بود. همانطور که شما می خواهید آنها را نگاه کنید.
زمان زیادی طول نمی کشد تا ماکرو اجرا شود، بدون در نظر گرفتن تعداد لینک های موجود در سند شما، بسیار سریع است. هنگامی که ماکرو کامل شد، سند جدیدی ایجاد می کند که لینک های اصلاح شده و آن هایی را که اصلاح نشده اند را نشان می دهد.