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

أضافه على كود ترحيل لعدم تكرار الترحيل


إذهب إلى أفضل إجابة Solved by طارق محمود,

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

السلام عليكم

الاخوة الكرام كل عام وانتم بكل خير

ارجو المساعدده فى اضافه على كود

اولا الكود للاخ الكريم ياسر خليل ... اكرمة الله بكل الخير

المطلوب اضافة الغرض منها  عدم تكرار الترحيل للبيانات المرحله اذا تم اضغط على رز الترحيل اكثر من مرة

 

 

Sub Transfer1()
  Application.ScreenUpdating = False
    On Error Resume Next
    Dim Cell As Range, T As String, LR As Long, LRT As Long
    Dim WS As Worksheet, Answer As Long

    Set WS = Sheets("1")
    LR = WS.Cells(35, 3).End(xlUp).Row
    T = WS.Range("A3").Value

    Application.ScreenUpdating = False
    WS.Unprotect "2191612"
        If Not IsEmpty(WS.Range("c6")) Then
            With Sheets(T)
                .Unprotect "2191612"
                LRT = .Cells(Rows.Count, 3).End(xlUp).Row + 1
               
                WS.Range("B6:G" & LR).Copy
                .Cells(LRT, 2).PasteSpecial xlPasteValues
                .Protect "2191612"
            End With
   
            Answer = MsgBox("تم ترحل البيانات .....هل تريد أن مسح البيانات المرحلة؟", vbYesNo + vbQuestion)
            If Answer = vbYes Then
                Sheets("1").Activate
                Sheets("1").Range("A3,C6:C35,F6:G35").Select
                Selection.ClearContents
            Else
                MsgBox "!! لم يتم الحذف"
            End If
            Sheets("1").Select
            ActiveWindow.SmallScroll Down:=-12
            Range("A3,C6").Select
        Else
            MsgBox "الخلية المحددة فارغة لذا لن يتم تنفيذ الكود": Exit Sub
        End If
    WS.Protect "2191612"
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

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

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

هناك طرق كثيرة واسهلها هو ان تقوم بتعطيل عمل الكوماند المسئول عن الترحيل

COMMANDBUTTOM 1. ENABLED =FALSE

,وذلك في نهاية كود الترحيل او في الموقع الذي يلائم اختيارات الترحيل

ثم اعادة تشغيله عند البدء بتسجيل بيانات جديدة

تحياتي

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

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

اخي الكريم انا تحت امرك في المحاسبة

اما ما يخص البرمجة فلا يفتى ولدينا الف مالك في المدينة

تحياتي

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

السلام عليكم

الاخوة الكرام هل من حل لعدم تكرار الترحيل 

عند تنفيذ الكود يتم كتابة تم الترحيل امام الخلايا التى تم ترحيلها فى العمود H

وذلك يكون شرط لعدم الترحيل .... اى عند وجود كلمه تم الترحيل فى العمود H 

 

مستحقات العاملين والاستعاضة.rar

تم تعديل بواسطه ۩◊۩ أبو حنين ۩◊۩
رابط هذا التعليق
شارك

  • أفضل إجابة

السلام عليكم

أخي العزيز

جرب التعديل التالي ، فأنا لم اجربه

Sub Transfer()
  Application.ScreenUpdating = False
    On Error Resume Next
    Dim Cell As Range, T As String, LR As Long, LRT As Long
    Dim WS As Worksheet, Answer As Long


    Set WS = Sheets("1")
    LR = WS.Cells(35, 3).End(xlUp).Row
    nR = 6
10   If Cells(nR, "H").Value = "تم الترحيل" Then nR = nR + 1: GoTo 10
    If nR > LR Then MsgBox "لن يتم الترحيل : برجاء ضبط العمود إتش": Exit Sub
    T = WS.Range("A3").Value


    Application.ScreenUpdating = False
    WS.Unprotect "2191612"
        If Not IsEmpty(WS.Range("C6")) Then
            With Sheets(T)
                .Unprotect "2191612"
                LRT = .Cells(Rows.Count, 3).End(xlUp).Row + 1
                WS.Range("B" & nR & ":G" & LR).Copy
                .Cells(LRT, 2).PasteSpecial xlPasteValues
                .Protect "2191612"
             End With
            WS.[H6].Value = "تم الترحيل"
            WS.Range("H6:H" & LR).FillDown
            Sheets("1").Select
            ActiveWindow.SmallScroll Down:=-12
            Range("A3,C6").Select
        Else
            MsgBox "الخلية المحددة فارغة لذا لن يتم تنفيذ الكود": Exit Sub
        End If
    WS.Protect "2191612"
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
  • Like 1
رابط هذا التعليق
شارك

أنا أضفت في الجزء العلوي

    nR = 6
10   If Cells(nR, "H").Value = "تم الترحيل" Then nR = nR + 1: GoTo 10
    If nR > LR Then MsgBox "لن يتم الترحيل : برجاء ضبط العمود إتش": Exit Sub
وأضفت في الجزء السفلي بعد              End With
            WS.[H6].Value = "تم الترحيل"
            WS.Range("H6:H" & LR).FillDown
  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

اهى الكريم طارق

جزاك الله خيرا على اهتمامك 

اخى الحبييب طارف

تم تجربة الكود الا انه مستمر فى الترحيل .... ولا يظهر اى شئ فى العمود h

الترحيل يتكرر بصوره مستمره غد استخدام الكود

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

السلام عليكم أخي الكريم

حضرتك جرب الكود كالتالي

Sub Transfer()
  Application.ScreenUpdating = False
    On Error Resume Next
    Dim Cell As Range, T As String, LR As Long, LRT As Long
    Dim WS As Worksheet, Answer As Long

    Set WS = Sheets("1")
    LR = WS.Cells(35, 3).End(xlUp).Row
    T = WS.Range("A3").Value

    Application.ScreenUpdating = False
    WS.Unprotect "2191612"
        If Not IsEmpty(WS.Range("C6")) Then
            With Sheets(T)
                .Unprotect "2191612"
                LRT = .Cells(Rows.Count, 3).End(xlUp).Row + 1
                
                For r = 3 To LRT
        If Sheets("Medi. Kha").Cells(r, 3) = Range("C6") Then MsgBox "This record is already exist, No shift will done": Exit Sub
    Next
                WS.Range("B6:G" & LR).Copy
                .Cells(LRT, 2).PasteSpecial xlPasteValues
                .Protect "2191612"
            End With
              
              Sheets("1").Select
            ActiveWindow.SmallScroll Down:=-12
            Range("A3,C6").Select
        Else
            MsgBox "ÇáÎáíÉ ÇáãÍÏÏÉ ÝÇÑÛÉ áÐÇ áä íÊã ÊäÝíÐ ÇáßæÏ": Exit Sub
        End If
    WS.Protect "2191612"
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

الجزء الذي تم إضافته هو

 For r = 3 To LRT
        If Sheets("Medi. Kha").Cells(r, 3) = Range("C6") Then MsgBox "This record is already exist, No shift will done": Exit Sub
    Next

تم الإعتماد على رقم الـ PR/NO لو مكرر مش هيتم الترحيل

ان شاء الله يكون ع الاقل قريب من المطلوب

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

السلام عليكم

اخى العزيز على الشيخ

جزاك الله كل الخير على المشاركه 

الا ان المطلوب عدم تكرار عمليه الترحيل 

لان المرحل علاج ومتعلقات ماليه لاشخاص والاكيد ان الاشخاص يكرر له علاج ومستحقات

لا يمكن جعل الشرط رقم العامل ... 

 

فكره الاخ طارق هى المطلوبه لانها توضح لى ان البيانات تم ترحيلها طالما فى العمود H كلمه تم الترحيل 

جزاك الله خيرا

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

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

اخي الكريم جرب المرفق لعله يفي بالغرض

 

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

I11

ووضع الخلية

G36

 

Sub Transfer()

  If Sheets("1").[i11] = 0 Then
  MsgBox "عفواً لا توجد بيانات للترحيل", vbInformation, "بيانات غير مكتملة "
  Else
  TEST_TRANSFER
  End If
End Sub

تحياتي

مستحقات العاملين والاستعاضة.rar

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

السلام عليكم

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

كل عام وانت بكل خير  واسال الله العظيم كل الخير لك فى شهر رمضان الكريم ولجميع المسلمين

الاخ الكريم..... الحل المقترح حل قد يصل الى المطلوب 

الا انه بعد مراجعه كود الاخ الكبير والمعلم الجليل طارق محمود تم الامر بصورة جيده 

جزا الله كل الخير للاخ الكريم طارق 

جزا الله كل الخير للاخ الكريم هانى 

وكل عام وانتم بالف خير

تم تعديل بواسطه ۩◊۩ أبو حنين ۩◊۩
رابط هذا التعليق
شارك

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