وعليكم السلام ورحمة الله وبركاته
لا يوجد حل بشكل مباشر للتعامل مع الفورم في ملف آخر ومعرفة ما إذا كان الفورم مفتوح أم لا .. لكن يمكن عمل التالي كوسيلة للوصول للهدف
** في الملف المسمى 2 والذي يحوي الفورم ستقوم بوضع الأكواد التالية والتي ستكون مرتبطة بظهور الفورم ، حيث مع ظهور وفتح الفورم يتم وضع أي قيمة في أي خلية في أي ورقة عمل تحددها وبالتالي ستتمكن من معرفة أن الفورم مفتوح أم لا بناءً على هذه الخلية (لاحظ الأكواد وغير بما يتناسب مع ملفاتك)
Private Sub UserForm_Initialize()
ThisWorkbook.Worksheets("Sheet2").Range("K1").Value = "UserForm Loaded"
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ThisWorkbook.Worksheets("Sheet2").Range("K1").Value = Empty
End Sub
** في الملف المسمى 2 أيضاً ستقوم بوضع الكود التالي في موديول 1 وهو لفتح الفورم
Sub OpenUserForm()
UserForm1.Show
End Sub
** في الملف المسمى 1 ستقوم بوضع الأكواد التالية في أي موديول
Sub Check_UserForm_In_Another_WOrkbook()
Dim wb As Workbook
Set wb = Workbooks("2.xlsm")
If wb.Worksheets("Sheet2").Range("K1").Value <> Empty Then
MsgBox "UserForm In The Workbook Named '2.xlsm' Is Open", 64
End If
End Sub
Sub Open_UserForm_In_Another_Workbook()
Application.Run "'2.xlsm'!OpenUserForm"
End Sub
الكود الأول يقوم بمعرفة ما إذا كان الفورم في ملف 2 مفتوح أم لا (كما سبق وشرحت بناءً على قيمة الخلية)
والكود الثاني يقوم بفتح الفورم عن طريق Application.Run والذي ينفذ كود فتح الفورم (فيتم فتح الفورم من الملف رقم 1)
** ملحوظة: قم بتغيير خصائص الفورم في للخاصية ShowModal واجعل قيمتها False لتتمكن من التنقل بين أوراق العمل والملفات المفتوحة عندما يكون الفورم مفتوح.