اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

طلب مساعدة لانشاء كود VBA للأكسيل


الردود الموصى بها

السلام عليكم ورحمة الله وبركاته 

ارجو من اصحاب الخبرة مساعدتي في طلبي

اريد عمل كود VBA لاضافة Dynamic Hyperlink  بين خليتين في شيتين مختلفين تكون الصله بينهما فقط "=" من الاتجاهين كل لنك يوصلني للخلية في الشيت الاخر وبشرط ان لا يتأثر عند ادراج او مسح صفوف

تفاصيل
اذا كان محتوى الخلية "ُI5" في sheet1 يحتوي على "=sheet2!E17"
يتم انشاء ارتباط تشعبي في الخلية "I5" عند الضغط عليه يوجهني للخلية "E17" في الشيت 2
وعند الضغط على "E17" في الشيت 2 ينقلني للخلية "I5" في الشيت 1
فقط ان كانت الخلية في شي1 تحتوي "="
عند مسح محتوى الخلية التي بها "=" يتم مسح الارتباط التشعبي
وعند ادراج او مسح صف اعلى من الصفوف التي تحتوي "=" يتم تحديث الارتباطات التشعبية الموجودة حسب عناوين الخلايا الجديدة 

 

officena.xlsm

رابط هذا التعليق
شارك

39 دقائق مضت, pisces said:

كنت على امل بأنني سوف القى حل لديكم 
او حتى رد ب لا يوجد حل لها
واشكركم جميعً على شرف المحاوله

صراحة لم استوعب الفكرة جيدا حاول تجربة هدا يدويا وتعديله بما يناسبك

Sub InsertHyperlinks()
Dim a As Range, b As Range
Dim rCnt As Worksheet, xCnt As Worksheet
Dim WS As Worksheet, dest As Worksheet
Set WS = Sheet1: Set dest = Sheet2
On Error Resume Next
WS.Activate
Set a = Application.InputBox("الرجاء تحديد الخلية الأولى التي تحتوي على الارتباط التشعبي" & vbCrLf & vbCrLf & _
"NOTE: يمكن إضافة الارتباطات التشعبية فقط على النص وليس على الخلايا التي تحتوي على صيغ!" & "تحديد الارتباط التشعبي 1", Type:=8)

Set rCnt = a.Worksheet

dest.Activate
Set b = Application.InputBox("الرجاء تحديد الخلية الثانية التي تحتوي على ارتباط تشعبي" & "تحديد الارتباط التشعبي 2", Type:=8)

Set xCnt = b.Worksheet
WS.Hyperlinks.Add Anchor:=a, Address:="", SubAddress:= _
    "'" & xCnt.Name & "'" & "!" & b.Address, TextToDisplay:=CStr(b.Value)

dest.Hyperlinks.Add Anchor:=b, Address:="", SubAddress:= _
    "'" & rCnt.Name & "'" & "!" & a.Address, TextToDisplay:=CStr(b.Value)
    
End Sub

 

  • Like 1
رابط هذا التعليق
شارك

اشكرك اخي العزيز محمد

اعذرني فأنا لست ضليع بالاكواد ولكن احاول الحصول على مبتغاي 

لايمكنني وضع اللنكات بشكل يدوي لانها متغيره حسب الخلايا المرتبطة
وليست هذه هي المشكله فالملف الذي ارفقته لكم يتم وضع الارتباطات فيه بشكل جيد حسب فهمي ولكن يمكنك الاطلاع عليه وتصحيحه ان كان به خلل

الارتباطات توضع بشكل صحيح فيه 
ولكن به خللين
الاول هو عند الادراج والمسح لا يتم تحديث الارتباطات حسب عدد الصفوف الدرجة او الممسوحه ويسبب ذلك خلل للنك المرتبط من الخلية المرجعية للخلية الاصلية
والثاني هو عند مسح الارتباط في الشيت الاول لا يتم مسح الارتباط المقابل له في الشيت الثاني

 

رابط هذا التعليق
شارك

يمكنك استخدام الكود التالي في VBA لإضافة الDynamic Hyperlink بين خليتين في شيتين مختلفين:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    Dim formula As String, sheetName As String, cellAddress As String
    
    For Each cell In Target
        If InStr(cell.Formula, "=") > 0 Then
            formula = Mid(cell.Formula, InStr(cell.Formula, "=") + 1, Len(cell.Formula) - InStr(cell.Formula, "="))
            If InStr(formula, "!") > 0 Then
                sheetName = Mid(formula, 2, InStr(formula, "!") - 2)
                cellAddress = Mid(formula, InStr(formula, "!") + 1, Len(formula) - InStr(formula, "!"))
                If Sheets(sheetName).Range(cellAddress) = "" Then
                    cell.Hyperlinks.Add Anchor:=cell, Address:="", SubAddress:="", TextToDisplay:=cell.Value
                Else
                    Sheets(sheetName).Range(cellAddress).Hyperlinks.Add Anchor:=Sheets(sheetName).Range(cellAddress), Address:="", SubAddress:="'[Book1]Sheet1'!" & cell.Address, TextToDisplay:=Sheets(sheetName).Range(cellAddress).Value
                End If
            End If
        End If
    Next cell
End Sub


```

يرجى استبدال "Book1" في الكود بعنوان المصنف الخاص بك.

يجب نسخ الكود ولصقه في قسم الكود للشيت الذي ترغب في تنفيذ الديناميكية الHyperlink فيه. سيقوم الكود بإضافة الDynamic Hyperlink بين الخليتين عند تحقق الشرط وسيتم تحديث الارتباطات تلقائيًا عند إجراء أية تغييرات.

رابط هذا التعليق
شارك

4 ساعات مضت, pisces said:

السلام عليكم 

اشكرك اخي العزيز saleh

ظهر لي المسج التالي
Subscript out of range

فضلاً وليس امراً إن كنت تستطيع تثبيتها في ملف سيكون افضل لي 

**تحليل الخطأ:**

يحدث خطأ "Subscript out of range" عندما يحاول الكود الوصول إلى عنصر خارج نطاق المصفوفة أو المجموعة. في هذه الحالة، يبدو أن الخطأ يحدث في السطر التالي:

```

If Sheets(sheetName).Range(cellAddress) = "" Then


```

**الحل:**

من المحتمل أن يكون سبب الخطأ هو أن ورقة العمل `sheetName` لا تحتوي على نطاق `cellAddress`. للتحقق من ذلك، يمكنك إضافة سطرين للتحقق من وجود ورقة العمل والنطاق قبل محاولة الوصول إليهما.

**الكود المعدل:**

```
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    Dim formula As String, sheetName As String, cellAddress As String
    
    For Each cell In Target
        If InStr(cell.Formula, "=") > 0 Then
            formula = Mid(cell.Formula, InStr(cell.Formula, "=") + 1, Len(cell.Formula) - InStr(cell.Formula, "="))
            If InStr(formula, "!") > 0 Then
                sheetName = Mid(formula, 2, InStr(formula, "!") - 2)
                cellAddress = Mid(formula, InStr(formula, "!") + 1, Len(formula) - InStr(formula, "!"))
                If Sheets(sheetName).Exists Then
                    If Sheets(sheetName).Range(cellAddress).Exists Then
                        If Sheets(sheetName).Range(cellAddress) = "" Then
                            cell.Hyperlinks.Add Anchor:=cell, Address:="", SubAddress:="", TextToDisplay:=cell.Value
                        Else
                            Sheets(sheetName).Range(cellAddress).Hyperlinks.Add Anchor:=Sheets(sheetName).Range(cellAddress), Address:="", SubAddress:="'[Book1]Sheet1'!" & cell.Address, TextToDisplay:=Sheets(sheetName).Range(cellAddress).Value
                        End If
                    End If
                End If
            End If
        End If
    Next cell
End Sub
```

**ملاحظة:**

* تأكد من استبدال `[Book1]Sheet1` في السطر `SubAddress:="'[Book1]Sheet1'!" & cell.Address` باسم ورقة العمل الحقيقية التي تحتوي على النطاق `cellAddress`.
* يمكنك أيضًا إضافة معالجة إضافية للتعامل مع الحالات الأخرى، مثل عندما تكون ورقة العمل أو النطاق محميًا أو مخفيًا.

رابط هذا التعليق
شارك

10 دقائق مضت, pisces said:

السلام عليكم

ظهر لي نفس الخطأ

عند السطر
                If Sheets(sheetName).Exists Then
 

وعليكم السلام

**ملاحظة:**
من المحتمل أن يكون سبب الخطأ هو أن اسم ورقة العمل `sheetName` غير صحيح أو غير موجود في المصنف.
* تأكد من استبدال `[Book1]Sheet1` في السطر `SubAddress:="'[Book1]Sheet1'!" & cell.Address` باسم ورقة العمل الحقيقية التي تحتوي على النطاق `cellAddress`.
* يمكنك أيضًا إضافة معالجة إضافية للتعامل مع الحالات الأخرى، مثل عندما تكون ورقة العمل أو النطاق محميًا أو مخفيًا.

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته،

أود أن أعبر عن خالص شكري وتقديري لجميع أعضاء منتدى أوفسينا، خاصة أعضاء قسم إكسيل.
أشكر كل من خصص وقتًا لمساعدتي وأجاب على استفساراتي، وأقدر الجهد المبذول من قِبَلكم جميعًا لجعل هذا المنتدى بيئة تعليمية متميزة.
واخص بالشكر الاخ محمد هشام والاخ Saleh Ahmed Rabie  على محاولاتهم السابقة ( لم احصل على مبتغاي هذه المرة )

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information