اذهب الي المحتوي
أوفيسنا

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

قام بنشر (معدل)

السلام عليكم  أخى ابراهيم

نعم يوجد خطأ أعتقد أنه بسبب الـ  2 يوزر فورم  اجعل لكل منهما كود اغلاق

تحياتى

تم تعديل بواسطه مختار حسين محمود
قام بنشر

اخى مختار

منور والله

بس انا شايف ان الخطأ ملوش دعوه بالاغلاق

وانا اكتشفت ان الحل فى حاجتين

الاول

حزف السطر ده

 If Len(Worksheets(name.Value).name) = 0 Then

الثانى

جرب استدعاء الفورم الثانى عن طريق زر بدى من الليبل

فى انتظار مزيد من الاراء

تقبل تحياتى

 

 

قام بنشر

جرب كده

Sub CreateSheets_w_name()
    Dim ws As Worksheet
    Dim ra As Range
    Dim name As Range
    Set ws = Worksheets("اسماء ورقات العمل")
    With ws
    Set ra = .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
    End With
    Dim NW As Workbook
    Set NW = Workbooks.Add
    
    On Error Resume Next
    For Each name In ra
        If Len(Trim(name.Value)) > 0 Then
            If Len(Worksheets(name.Value).name) = 0 Then
                NW.Worksheets.Add(After:=NW.Worksheets(Worksheets.Count)).name = name.Value
            End If
        End If
    
    Next name
    On Error GoTo 1
1:
Workbooks("1").Activate

    
End Sub

 

قام بنشر

السلام عليكم

أخى ابراهيم

مصدر الخطأ فى هذا الكود فعلا هو هذا السطر

If Len(Worksheets(name.Value).name) = 0 Then

حيث أن الكود عندما يريد انشاء صفحة جديدة يبحث أولا هل اسم الذى سوف يضعة للصفحة موجود أم لا

واذا كان اسم الصفحة غير موجود يعطى الكود الخطأ الذى رقمه 9 ( والذى يعنى خارج النطاق )

ولتخطى الخطأ والذهاب الى السطر التالى تم اضافة السطر التالى فى اول الكود

On Error Resume Next

وقد قمت بتجربة حل الأستاذ مختار وعمل بشكل سليم

ويمكنك أيضا حذف الجزء

Workbooks("1").Activate

وتكتفى بالجزء التالى للتخلص من الخطأ

    On Error GoTo 1
1:
End Sub

وهذا والله أعلم

  • Like 1
قام بنشر

أخي الكريم إبراهيم

لست متابع للموضوع من البداية ، ولكن من خلال رد أخي الغالي رجب الأخير أفهم أن المشكلة في وجود ورقة العمل من عدم وجودها

لما لا تستخدم دالة معرفة تقوم بالأمر نيابةً عنك ومن خلالها يمكنك تجنب الخطأ

ادرس الكود التالي جيداً وحاول تستفيد منه

Sub TestRun()
    If Not SheetExists("Sheet1") Then
        MsgBox "The worksheet does not exist.", vbExclamation
    Else
        MsgBox "The worksheet already exists.", vbInformation
    End If
End Sub

Function SheetExists(strName As String) As Boolean
    Dim WS As Excel.Worksheet
    On Error Resume Next
    Set WS = Sheets(strName)
    SheetExists = (Err.Number = 0)
    Set WS = Nothing
End Function

تقبل تحياتي

  • Like 2
قام بنشر

بارك الله فيكما  أستاذى  رجب وأستاذى ياسر و جزاكما خيرا

أخى ابراهيم الكود توقف لأنك طبقته على ملف جديد  مش الملف 1  المرفق فى مشاركتك الاولى

Activate .("اسم الملف")  Workbooks   لتنشيط الملف 

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

لذا عند الضغط على زر غلق الفورم x  لايدرى اكسل أيهما يغلق ( الفورم أم الملف الجديد النشط )

ولذلك يحدث هذا الخطأ وبناء عليه لجأت الى تنشيط الملف الأصلى مرة أخرى   والله أعلى وأعلم

  • Like 1
قام بنشر

أخي الغالي مختار

لجأت أيضاً لـ Activate مع أنه يمكن الإشارة إلى المصنف المطلوب العمل عليه ثم استخدام الأمر إغلاق دون تنشيطة

حاول أن تتجنب التحديد قدر الإمكان

تقبل تحياتي

  • Like 1
قام بنشر

أخوانى الافاضل

جميعا مشكورين

على الاراء المتنوعه

وعلى المناقشه المثمره

بارك الله فيكم جميعا

على العموم

اعتقد انى هستخدم الداله المعرفه

لاخونا ياسر

اخى مختار الخطأ لاذى كان يحدث معى

بسبب كتابة اسم الملف بين علامتى تنصيص

معلش مخدش بالى

وانت كمان ياريس

على العموم

تقبلوا تحياتى جميعا

 

قام بنشر (معدل)

أخى وأستاذى ياسر 

يبدو أن النسيان مشى من عند أخى رجب و شرّف عندى  و تعمل ايه فى الاستسهال 

مع تقديرى و شكرى  ( ابن عم تحياتى )  :wink2:

تم تعديل بواسطه مختار حسين محمود
  • Like 1
قام بنشر (معدل)

أخى ابراهيم

على حد معلوماتى

كتابة اسم الملف بشكل مباشر بين علامتى تنصيص لا ينتج عنه خطأ

وينتج الخطأ عند تمرير اسم الملف من خلال متغير X  مثلا ووضع X  بين علامتى تنصيص هنا ينتج الخطأ

Sub r1()
'كود صحيح
Workbooks("1").Activate
End Sub
Sub r2()
'كود صحيح
x = "1"
Workbooks(x).Activate
End Sub
Sub r3()
'كود غير صحيح
x = "1"
Workbooks("x").Activate
End Sub

 

تم تعديل بواسطه رجب جاويش
قام بنشر

اخى واستاذى رجب

مشكورا على المتابعه

المستمره للموضوع

ولكن مش عارف بصراحه

ليه بيحدث خطأ معايا

عند استخدام علامة التنصيص

مش عارف بقى هل الموضوع ليه علاقه

بنسخة الويندوز ولا ايه

شاهد المرفق

untitled.JPG.543a1962aefaf0241f42da8845e

قام بنشر

أخى رجب  و حدود الدول  أيضا :biggrin:

أخى ابراهيم جرب تحط اسم الملف فى متغير

dim wb as workbook

set wb = activeworkbook

وفى نهاية الكود

On Error GoTo 1

:1

Application.Goto wb

  • Like 1
قام بنشر

اخى مختار انا جرب ده كله من البدايه

بس الشئ الى خالانى اصر على رفع الموضوع

هو انه

اشمعن ياعنى

مع الليبل بيحصل الخطأ

ولو استدعينا الفورم 2

مش هيحصل خطأ

ولو استخدمنا الكود بدون فورم بردو مفيش خطأ

على العموم مشكور اخى على الاراء الجميله دى

تقبل تحياتى

قام بنشر

بارك الله فيك أخى ابراهيم

حل آخير جربه   وهو الغاء ظهور الرسالة أصلا والاكتفاء بازالتها

استبدل السطرين  دول فى كود الليبل

kh_Err:
    If Err Then MsgBox "Err.Number : " & Err.Number: Err.Clear

بالسطرين دول

kh_Err:
    If Err Then Err.Clear

مع خالص تقديرى

  • Like 1

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.

×
×
  • اضف...

Important Information