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

Foksh

أوفيسنا
  • Posts

    3735
  • تاريخ الانضمام

  • Days Won

    151

مشاركات المكتوبه بواسطه Foksh

  1. منذ ساعه, AbuuAhmed said:

    لأسف، خبر غير جيد.

    والخبر الجيد بحكم تجربتي مع استيراد بيانات من جوجل شيت الى جداول اكسيس

    نعم ، يمكنك تحويل الملف إلى Google Sheets واستبدال أكواد VBA بـ Google Apps Script (لغة برمجة مختلفة) :biggrin: 

    طبعاً للوهلة الأولى هذا غير ممكن بشكل مباشر ، لكن يمكنك استخدام Google Apps Script كما أخبرتك لإنشاء وظائف مماثلة في Google Sheets :wink2: 

    وطبعاً مستقبلاً سأحاول ادراج موضوع بهذا الخصوص ( لضيق الوقت 😇 )

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

    بالنسبة للسطرين التاليين :-

    6 ساعات مضت, Abdelaziz Osman said:
    d:
    cd BACKUP$

    سيتم الذهاب الى المجلد Backup ، طبعاً بغض النظر عن وجود المجلد أو لا ( أي أنه لا يتم التحقق من وجود المجلد قبل فتحه ) .. ثم لاحظت انك انتقلت الى المجلد :-

    6 ساعات مضت, Abdelaziz Osman said:
    cd\periodic

    فما الهدف !!!!! إلا إذا كان مقصدك ان المجلد السابق موجود داخل المجلد Backup :excl:

    هنا يجب ان تكون الجملة :-

    cd D:\BACKUP$\periodic

    أيضاً لاحظ أن عبارة :-

    6 ساعات مضت, Abdelaziz Osman said:
    md "%date:~0,2%_%date:~3,2%_%date:~4%_%time:~0,2%_%time:~3,2%_%time:~6,4%"

    لإنشاء مجلد بالتاريخ والوقت الحالي قد يلحقك بمشكلة إذا كانت الساعة أقل من 10 ، وهذا مثال على نتيجة السطر :-

    20_5-_-07-12_ 1_46_01.3

    لاحظ أن الساعة 1:47 لكن دقق في النتيجة لإسم المجلد يوجد فراغ قبل الرقم 1 :excl::excl::excl: .

     

    بالعموم ، فكرتك جميلة وقابلة للتطوير اذا اجتهدت عليها أكثر :clapping: .

     

    فشكراً لك على هذه المشاركة الجميلة لفكرة نسخ إحتياطي لقاعدة البيانات من مجلد رئيسي بمجلداته الفرعية مع ضبط بعض الخصائص ..

     

     

  3. 1 دقيقه مضت, jo_2010 said:

    اريد التقرير يظهر امام النموذج وبعد ذلك تظهر الرسالة تطلب منى الطباعة ام لا كيف اطبع تقرير غير موجود امامى لمراجعتة قيل الطباعة

    اسمح لي بمداخلة أخي جو ..

    الآن عند فتح التقرير والرسالة أمامه ، فلن يسعك رؤية التقرير ( إن كان صفحة أو أكثر .. ) لأسباب متعددة ، منها أن التقرير في وضع المعاينة سيكون ذا خط صغير ولن تستطيع تحريك أشرطة التمرير أو تكبير صفحة التقرير - Zoom - لرؤيته بشكل واضح ، صحيح ؟؟

    إذا فإن عرض التقرير أو عدمه لن يغنيك بشيء.

    لذا ومن باب المنطق إما أن تجعل زر الطباعة داخل التقرير ، وبهذا ستتمكن من رؤيته كاملاً وتفحصه . أو رسالة الطباعة دون الإستناد لشرط عرض التقرير ( قد يكون مفتوحاً بوضع الإخفاء مثلاً .. ) 

     

    هذه وجهة نظري الغير ملزمة طبعاً 😇 

  4. 5 ساعات مضت, طاهر اوفيسنا said:

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

    أخي طاهر ،،

    بارك الله فيك ، وغفر لك ولوالديك في الدنيا والآخرة.

    كلامك اللطيف دلالة على معدنك الطيب 🤗

    شكراً لك من القلب على تهنئتك ، وأتمنى أن نراكم قريباً بجانبنا 💐

  5. 17 دقائق مضت, ابوخليل said:

    شكرا جزيلا  ... النتيجة مع 5 تمام  ومع غيرها غير منضبطة .. غير رقم 5 الى ارقام اخرى اكبر وانظر الناتج

    كلامك صحيح .. لم أقم بالتجربة على أرقام مختلفة ..

    في مديول :-

    Function MultiplyTime(ByVal tm As Date, ByVal factor As Long) As String
        Dim totalMinutes As Long
        totalMinutes = DateDiff("n", #12:00:00 AM#, tm) * factor
        MultiplyTime = Format(totalMinutes \ 60 & ":" & totalMinutes Mod 60, "hh:nn")
    End Function

    جرب على الإستدعاء من خلال الاستعلام :-

    SELECT MultiplyTime(#4:30#, 10) AS النتيجة

     

    • Like 1
  6. 20 دقائق مضت, ابوخليل said:

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

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

    كمثال خطر ببالي من داخل استعلام على سبيل المثال :-

    SELECT Format(TimeValue("4:30") * 5, "hh:nn") AS النتيجة;

     

    14 دقائق مضت, ابوخليل said:

    اول ما تبادر لبالي .. اني احول الوقت الى دقائق ثم اضربه بالعدد ثم ارجع احوله الى ساعات ودقائق

    أو استخدام الدالة CLng كمثال :-

    SELECT Format((CLng(#12/30/1899 4:30:0#*1440)*5)/1440,"Short Time") AS الناتج;

     

    • Like 1
  7. وعليكم السلام ورحمة الله وبركاته ..

    أخي الفاضل تحية طيبة وعطرة من القلب ,,

    برأيك ( العنوان و المطلوب ) = من كلمتين يكفي للشرح والتوضيح للمطلوب ؟؟؟؟؟

    حتى أن المرفق

    image.png.04c09e658ebf07b5f2b004ca10d7b7a0.png

     

    لا يستند الى أي معلومة تفيد المطلوب وتوضحه

    راجياً منك الإفصاح والتوضيح في معطيات الموضوع لتسهيل فهم للهدف ( وخصوصاً أخوك صاحب هذا التعليق 😇 )

  8. تفضل أخي الكريم ..

    تعديلات وإضافة مرونة أكثر للإستخدام وتقليل التكرارات . في الدالة الرئيسية :-

    Public Function GetTxtHeight(annee As String, grade As String, wilaya As String, nomRapport As String) As Single
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Dim hauteur As Single
    
        Set db = CurrentDb
        Set rs = db.OpenRecordset( _
            "SELECT hauteur_rang FROM tab_hauteur_range " & _
            "WHERE annee = '" & Replace(Trim(annee), "'", "''") & "' " & _
            "AND grade = '" & Replace(Trim(grade), "'", "''") & "' " & _
            "AND wilaya = '" & Replace(Trim(wilaya), "'", "''") & "' " & _
            "AND nom_raport = '" & Replace(Trim(nomRapport), "'", "''") & "'", dbOpenSnapshot)
    
        If Not rs.EOF Then
            hauteur = Nz(rs!hauteur_rang, 0) * 567
        Else
            hauteur = 0.7 * 567
        End If
    
        rs.Close: Set rs = Nothing: Set db = Nothing
        GetTxtHeight = hauteur
    End Function

     

    دالة لتقليل تكرار عند فتح التقرير ، وإضافة مرونة في Tag مختلف من نفس الاستدعاء ..

    Public Sub ApplyHeightFromTempVars(ByVal rpt As Report, Optional ByVal tagMatch As String = "moho58")
        On Error GoTo SafeExit
    
        Dim h As Single
        Dim ctrl As Control
    
        h = Nz(TempVars!Temp_Hauteur, 0.7 * 567)
    
        For Each ctrl In rpt.Controls
            If ctrl.ControlType = acTextBox Then
                If LCase(Trim(Nz(ctrl.Tag, ""))) = LCase(tagMatch) Then
                    ctrl.Height = h
                End If
            End If
        Next ctrl
    
        rpt.Section(acDetail).Height = h
    
    SafeExit:
    End Sub

     

    في أحدث عند النقر للأزرار :-

    Private Sub أمر2_Click()
        Dim h As Single
        h = GetTxtHeight(Me.annet, Me.grade1, Me.wilaya1, "rap_pv")
        TempVars!Temp_Hauteur = h
        DoCmd.OpenReport "rap_pv", acViewPreview
    End Sub
    
    Private Sub أمر3_Click()
        Dim h As Single
        h = GetTxtHeight(Me.annet, Me.grade1, Me.wilaya1, "rap_pv2")
        TempVars!Temp_Hauteur = h
        DoCmd.OpenReport "rap_pv2", acViewPreview
    End Sub

     

    في حدث عند الفتح في التقارير :-

    Private Sub Report_Open(Cancel As Integer)
        ApplyHeightFromTempVars Me
    '    ApplyHeightFromTempVars Me, "Foksh" تستطيع طبعاً استخدام تاج مختلف
    End Sub

     

     

    ملفك بعد التعديلات :-

     

    baseM5.zip

    • Like 1
  9. أخي العزيز الأستاذ عبد اللطيف ،

    بداية هذه الرسالة تظهر وأعتقد لأنه يوجد لديك تطبيق واتس أب سطح المكتب ..

    حيث ، انظر لهذا السطر على سبيل المثال :-

    https://api.whatsapp.com/send/?phone=962787787573&text&type=phone_number&app_absent=0

    لاحظ الرقم 0 في نهاية العنوان !! انظر لطبيعة ونوع الرسالة التي تظهر لك عندما يكون لديك تطبيق واتس اب سطح المكتب .

    ثم جرب وعدل 0 = 1 ، وانظر الفرق بين الرسالتين !!!!

    طبعاً في النهاية سيتم فتح التطبيق في حال تم تثبيته لأن له الأولوية على موقع الويب .

     

    1.png.3d07ea3b3851e0c85c9f9a2768452ef9.png

     

    2.png.21e367b4b66d7c8551b0bb5dc7e61596.png

     

     

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

     

    ولاحظت أيضاً انه عندما لا يكون هناك ايميل ، فيظهر لك خطأ ..

    قم بإضافة هذا السطر في بداية حدث النقر لمربع النص الخاص بإرسال الإيميل

    Private Sub EMAIL_Click()
    If IsNull(Me.EMAIL) Or Me.EMAIL = "" Then Exit Sub

     

    • Like 1
  10. وعليكم السلام ورحمة الله وبركاته ,,

    فيما يخص الإيميل ، فهذه فكرة بسيطة من خلال النقر على مربع نص الإيميل على سبيل المثال :-

    Private Sub EMAIL_Click()
        Dim EmailAdd As String
        Dim GmailURL As String
        
        EmailAdd = Me.EMAIL.Value
        
        If Not IsValidEmails(EmailAdd) Then
            MsgBox "عنوان البريد الإلكتروني غير صالح", vbExclamation + vbMsgBoxRight, ""
            Exit Sub
        End If
        GmailURL = "https://mail.google.com/mail/?view=cm&fs=1&to=" & EmailAdd
        Application.FollowHyperlink GmailURL
    End Sub
    
    Function IsValidEmails(EMAIL As String) As Boolean
        Dim regex As Object
        Set regex = CreateObject("VBScript.RegExp")
        regex.Pattern = "^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"
        regex.IgnoreCase = True
        IsValidEmails = regex.Test(EMAIL)
    End Function

     

    والطلب الثاني ، وهو فتح واتس أب ويب على دردشة محددة للرقم الذي تم النقر عليه ، حذح محاولتي البسيطة ( مشتقة من أحد ملفاتي سابقاً ) ..

    Private Sub MOB_Click()
        Dim WhatsURL As String
        Dim PhoneNum As String
        
        PhoneNum = Me.MOB.Value
        PhoneNum = CleanPhoneNum(PhoneNum)
        
        If PhoneNum = "" Then
            MsgBox "رقم الهاتف غير صالح", vbExclamation + vbMsgBoxRight, ""
            Exit Sub
        End If
        WhatsURL = "https://wa.me/" & PhoneNum
        Application.FollowHyperlink WhatsURL
    End Sub
    
    Function CleanPhoneNum(phone As String) As String
        Dim i As Integer
        Dim result As String
        
        result = ""
        For i = 1 To Len(phone)
            If IsNumeric(Mid(phone, i, 1)) Then
                result = result & Mid(phone, i, 1)
            End If
        Next i
        
        If Left(result, 2) = "00" Then
            result = Right(result, Len(result) - 2)
        ElseIf Left(phone, 1) = "+" Then
            result = Right(result, Len(result) - 1)
        End If
        CleanPhoneNum = result
    End Function

     

     

    • Like 3
  11. 2 ساعات مضت, Mohamed Wahba said:

    مبارك الأخ الكريم @Foksh

    بالتوفيق والنجاح دايما ان شاء الله. ونشكركم على هذا المنتدى الطيب المبارك وجزاكم الله خيرا

    جزاكم الله كل خير على تهنئتكم الكريمة ، وأسأل الله لكم مزيداً من التوفيق والنجاح 💐

  12. أخي الكريم وعليكم السلام ورحمة الله وبركاته 🤗 

    وبما أن المشروع ليس من تأسيسك ، فأعتقد انك بحاجة الى إعادة بناء المشروع ، وليس كما تظن 3 طلبات فقط.

    لذا ..

    أنصحك بالتوجه الى عرض طلباتك واحداً واحداً في مواضيع مستقلة  ، مع الشرح الكافي مصحوباً بملف يحتوي سجلات بسيطة .

     

    ملاحظة:- لم أطلع على الملف .

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

    باعتقادي ، وبما أنك تجعل اسم الوثيقة هو رقم ، فهنا يجب أن تجعل اسم الوثيقة مربوطاً أيضاً برقم الموظف ( الأفضل ) ، أو اسم الموظف على سبيل المثال .

    هنا الوثيقة 1 للموظف1 ستختلف في الاسم عن الوثيقة 1 للموظف2 ، صحيح 😁 .

     

    لم أطلع على الملف ، أتابع من الهاتف حالياً.

    • Like 1
  14. 5 دقائق مضت, M.Abd Allah said:

    اعتقد أن اللقب الجديد مش هيضيف للبروف شئ جديد لأنه من يزين الألقاب مجدا 

    الف الف مبروك يا بروف دائما موفق

    أهلاً يا فنان ..

    وحشتني يا راجل ، طمني عنك عامل إيه 🤗 ..

    الله يبارك فيك على كلامك اللطيف الجميل 😇😇

  15. 26 دقائق مضت, عبد الله قدور said:

    كيف يمكنني زيادة الحجم اكثر من 127

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

    كإجابة على سؤالك ، للأسف لا يمكن تحقيق طلبك .

    كأحد الحلول هو استخدام صورة جاهزة يتم إضافتها للتقرير.

    أو تصدير تقريرك الى وورد وهناك تقوم بالتكبير لحجم الخط إما بشكل يدوي أو من خلال كود التصدير للوورد .

  16. جميل ، وهذا ما كنت اعمل عليه في هذه الفكرة ,,

    ودون شرحها هنا ، في المرفق نموذجين كأفكار قابلة للتحوير والتعديل حسب حاجتنا . مع العلم أنني قمت بإضافات قد لا تحتاجها ، ولكنها من باب الفضول والزيادة 😅 

     

    data1-1.zip

    • Like 2
  17. 3 ساعات مضت, ابوخليل said:

    السلام عليكم

     

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

    كمشاركة أولى بدون دالة ، وتتكون من 3 أشكال متدرجة ، الإستعلام الأول :-

    SELECT c.UserId, c.chekIn, c.chekOut, IIf(
            TimeValue(c.chekIn) > DateAdd("n", f.start_free, f.start_work),
            DateDiff("n", DateAdd("n", f.start_free, f.start_work), TimeValue(c.chekIn)),
            0
        ) AS In_Loss, IIf(
            TimeValue(c.chekOut) < DateAdd("n", -f.end_free, f.end_work),
            DateDiff("n", TimeValue(c.chekOut), DateAdd("n", -f.end_free, f.end_work)),
            0
        ) AS out_Loss, Format(
            IIf(
                TimeValue(c.chekIn) > DateAdd("n", f.start_free, f.start_work) OR 
                TimeValue(c.chekOut) < DateAdd("n", -f.end_free, f.end_work),
                DateDiff("n", 
                    IIf(TimeValue(c.chekIn) > DateAdd("n", f.start_free, f.start_work), 
                        TimeValue(c.chekIn), 
                        DateAdd("n", f.start_free, f.start_work)
                    ),
                    IIf(TimeValue(c.chekOut) < DateAdd("n", -f.end_free, f.end_work), 
                        TimeValue(c.chekOut), 
                        DateAdd("n", -f.end_free, f.end_work)
                    )
                ) / 1440.0,
                f.countWorkHours
            ), 
            "hh:nn"
        ) AS work_Hours_count
    FROM tblcomIn AS c, tbl_Ftrat AS f
    WHERE f.ftraName = 'الفترة الرئيسية'
    ORDER BY c.UserId, c.chekIn;
    Query2
    UserId chekIn chekOut In_Loss out_Loss work_Hours_count
    1111 2025-07-05 3:50:10 PM 2025-07-05 11:50:12 PM 0 0 07:30
    2222 2025-07-05 4:20:16 PM 2025-07-05 11:20:28 PM 0 0 07:30
    3333 2025-07-05 4:32:20 PM 2025-07-05 11:28:31 PM 2 0 06:28
    4444 2025-07-05 5:01:25 PM 2025-07-05 11:32:34 PM 31 0 05:59

     

    الإستعلام الثاني :-

    SELECT c.UserId, c.chekIn, c.chekOut, IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)),0) AS In_Loss, IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)),0) AS out_Loss, Format(IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work) Or TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),DateDiff("n",IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn),DateAdd("n",f.start_free,f.start_work)),IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)))/1440,f.countWorkHours),"Short Time") AS work_Hours_count, 'التفاصيل: ' & IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),'تأخر ' & DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)) & ' دقيقة','حضور في الموعد') & ' - ' & IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),'انصراف مبكر ' & DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)) & ' دقيقة','انصراف في الموعد') AS Details
    FROM tblcomIn AS c, tbl_Ftrat AS f
    WHERE (((f.ftraName)='الفترة الرئيسية') And ((DateValue(c.chekIn))=#7/5/2025#))
    ORDER BY c.UserId;
    Query3
    UserId chekIn chekOut In_Loss out_Loss work_Hours_count Details
    1111 2025-07-05 3:50:10 PM 2025-07-05 11:50:12 PM 0 0 07:30 التفاصيل: حضور في الموعد - انصراف في الموعد
    2222 2025-07-05 4:20:16 PM 2025-07-05 11:20:28 PM 0 0 07:30 التفاصيل: حضور في الموعد - انصراف في الموعد
    3333 2025-07-05 4:32:20 PM 2025-07-05 11:28:31 PM 2 0 06:28 التفاصيل: تأخر 2 دقيقة - انصراف في الموعد
    4444 2025-07-05 5:01:25 PM 2025-07-05 11:32:34 PM 31 0 05:59 التفاصيل: تأخر 31 دقيقة - انصراف في الموعد

     

    الإستعلام الثالث :-

    SELECT c.UserId, c.chekIn, c.chekOut, IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)),0) AS In_Loss, IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)),0) AS out_Loss, Format(DateDiff("n",IIf(TimeValue(c.chekIn)<f.start_work,f.start_work,TimeValue(c.chekIn)),IIf(TimeValue(c.chekOut)>f.end_work,f.end_work,TimeValue(c.chekOut)))/1440,"Short Time") AS work_Hours_count, 'التفاصيل: ' & IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),'تأخر ' & DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)) & ' دقيقة',IIf(TimeValue(c.chekIn)<f.start_work,'حضور مبكر ' & DateDiff("n",TimeValue(c.chekIn),f.start_work) & ' دقيقة','حضور في الموعد')) & ' - ' & IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),'انصراف مبكر ' & DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)) & ' دقيقة',IIf(TimeValue(c.chekOut)>f.end_work,'انصراف متأخر ' & DateDiff("n",f.end_work,TimeValue(c.chekOut)) & ' دقيقة','انصراف في الموعد')) AS Details
    FROM tblcomIn AS c, tbl_Ftrat AS f
    WHERE (((f.ftraName)='الفترة الرئيسية') And ((DateValue(c.chekIn))=#7/5/2025#))
    ORDER BY c.UserId;
    Query4
    UserId chekIn chekOut In_Loss out_Loss work_Hours_count Details
    1111 2025-07-05 3:50:10 PM 2025-07-05 11:50:12 PM 0 0 07:30 التفاصيل: حضور مبكر 10 دقيقة - انصراف متأخر 20 دقيقة
    2222 2025-07-05 4:20:16 PM 2025-07-05 11:20:28 PM 0 0 07:00 التفاصيل: حضور في الموعد - انصراف في الموعد
    3333 2025-07-05 4:32:20 PM 2025-07-05 11:28:31 PM 2 0 06:56 التفاصيل: تأخر 2 دقيقة - انصراف في الموعد
    4444 2025-07-05 5:01:25 PM 2025-07-05 11:32:34 PM 31 0 06:29 التفاصيل: تأخر 31 دقيقة - انصراف متأخر 2 دقيقة

     

    data1.zip

     

    أم تفضل استخدام دالة 😁 .. ؟

     

    • Like 1
×
×
  • اضف...

Important Information