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

نجوم المشاركات

  1. محمد هشام.

    محمد هشام.

    الخبراء


    • نقاط

      8

    • Posts

      1,542


  2. أبوعيد

    أبوعيد

    الخبراء


    • نقاط

      3

    • Posts

      1,541


  3. kanory

    kanory

    الخبراء


    • نقاط

      1

    • Posts

      2,273


  4. أ / محمد صالح

    أ / محمد صالح

    أوفيسنا


    • نقاط

      1

    • Posts

      4,444


Popular Content

Showing content with the highest reputation on 25 أغس, 2024 in all areas

  1. ساعرض عليك فيدوهات تشرح الطريقة ولكن يجب أن تشاهدها كلها حتى تختار أسهل طريقة تناسبك أولا : https://youtu.be/pA9ySmQ01iY?si=p9nXmux1nT8qBGgp ثانيا : https://youtu.be/sBBKTP1io_M?si=VmXjQmgihaoJqBBy ثالثا : https://youtu.be/lgbHqyDsfwg?si=oQzRCmGxXMVsNscA
    3 points
  2. وعليكم السلام ورحمة الله تعالى وبركاته جرب هدا Sub UpdateDates() ' تعريف المتغيرات Dim WS As Worksheet, f As Worksheet Dim a As Variant, b As Variant Dim lr As Long, Irow As Long Dim i As Long, j As Long Set WS = ThisWorkbook.Sheets("CALL") Set f = ThisWorkbook.Sheets("DATA") '*** (lr) Sheets("CALL")<<====("a") تحديد آخر صف غير فارغ في العمود lr = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row '*** (Irow) Sheets("DATA")<<====("B") تحديد آخر صف غير فارغ في العمود Irow = f.Cells(f.Rows.Count, "B").End(xlUp).Row '***تخزين البيانات في المتغيرات*** '(A2)البيانات من النطاق Sheets("DATA")<<==== (a)تُخزن في المتغير a = WS.Range("A2:E" & lr).Value '(A2)البيانات من النطاق Sheets("CALL")<<==== (b)تُخزن في المتغير b = f.Range("A2:E" & Irow).Value '******التكرار عبر الصفوف****** ' يتم استخدام حلقتين تكراريتين For لتصفح البيانات في كل من المصفوفتين a و b 'b Sheets("DATA")<<===='الأولى تكرر عبر الصفوف في البيانات المخزنة For i = 1 To UBound(b, 1) 'a Sheets("CALL")<<===='الثانية تكرر عبر الصفوف في البيانات المخزنة For j = 1 To UBound(a, 1) '*****التحقق من المطابقة **** 'داخل الحلقة الثانية يتم التحقق من شرطين '1======= Sheets("CALL")====>> (b) إذا كانت القيمة في العمود الثاني من ' Sheets("DATA")====>> (a) تساوي القيمة في العمود الأول من '2======= Sheets("DATA")====>> (a) وإذا كانت القيمة في العمود الثالث من ' Sheets("CALL")====>> (b) تساوي القيمة في العمود الثاني من If b(i, 2) = a(j, 1) And b(i, 3) = a(j, 2) Then 'Sheets("DATA") إذا تحقق الشرطان، يتم تحديث الخلية في العمود الخامس من 'Sheets("CALL") بالقيمة المقابلة في العمود الثالث من f.Cells(i + 1, 5).Value = a(j, 3) '(Exit For)الخروج من الحلقة 'يتم استخدامه للخروج من الحلقة الداخلية عند العثور 'على تطابق مما يوفر الوقت ويجعل الكود أكثر كفاءة Exit For End If Next j Next i End Sub نموذج V1.xlsm
    2 points
  3. وعليكم السلام ورحمة الله تعالى وبركاته ضع الكود التالي في Module Sub HideRowsWith_Zero() Dim Sh As Worksheet Dim i As Long, lastRow As Long Set Sh = ThisWorkbook.Sheets("تفاصيل") lastRow = Sh.Columns("A:C").Find(What:="*", _ SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row For i = 4 To lastRow If Sh.Cells(i, 2).Value = 0 And Sh.Cells(i, 3).Value = 0 Then Sh.Rows(i).Hidden = True Else Sh.Rows(i).Hidden = False End If Next i End Sub وفي حدث ورقة تفاصيل Private Sub Worksheet_Activate() HideRowsWith_Zero End Sub اخفاء الصفوف.xlsb
    2 points
  4. هذا ما كنت أحاول فهمه كما سبق الذكر يمكنك ذالك بدون الاعتماد أو إظافة الارتباط التشعبي ضع الكود التالي في حدث ورقة الرئيسية Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim f As Worksheet: Set f = ThisWorkbook.Sheets("الرئيسية") Application.ScreenUpdating = False f.Range("M2:M" & f.Rows.Count).ClearContents ' تحديث العمود "M" بالنص "تفاصيل الطلب" لكل صف يحتوي على قيمة في العمود "B" For i = 2 To f.Cells(f.Rows.Count, "B").End(xlUp).Row If f.Cells(i, "B").Value <> "" Then f.Cells(i, "M").Value = "تفاصيل الطلب" ' <<=====' يمكنك تعديل النص بما يناسبك End If Next i Application.ScreenUpdating = True If Not Intersect(Target, Me.Columns("M")) Is Nothing Then Dim lr As Long, OneRng As Range Dim rCrit As String, tmp As Boolean tmp = False On Error Resume Next tmp = Not ThisWorkbook.Sheets("التفصيلية") Is Nothing On Error GoTo 0 If Not tmp Then MsgBox "ورقة العمل التفصيلية غير موجودة", vbExclamation Exit Sub End If If Target.Row > 1 Then If Me.Cells(Target.Row, "M").Value <> "" And Me.Cells(Target.Row, "B").Value <> "" Then Dim WS As Worksheet Set WS = ThisWorkbook.Sheets("التفصيلية") If WS.AutoFilterMode Then WS.AutoFilterMode = False rCrit = Me.Cells(Target.Row, "B").Value If rCrit <> "" Then lr = WS.Cells(WS.Rows.Count, "J").End(xlUp).Row Set OneRng = WS.Range("J2:J" & lr).Find(What:=rCrit, LookIn:=xlValues, LookAt:=xlWhole) If Not OneRng Is Nothing Then WS.Activate With WS.Range("B2:O" & lr) .AutoFilter 9, rCrit End With Else MsgBox "غير موجود في قاعدة البيانات" & " : " & rCrit, 16 End If End If End If End If End If End Sub طلب فلتر V3.xlsb
    2 points
  5. لا يوجد ما يمنع أن ينقل قيم هذه المعادلة من العمود الجديد إلى العمود B ويحذف العمود الجديد الكمبيوتر يتميز بالمرونة فلكل مشكلة الكثير من الحلول المهم أن يبدع الإنسان ويفكر بالتوفيق للجميع
    1 point
  6. جرب هذا واعلمنا بالنتيجة ............. Private Sub genu_AfterUpdate() Dim fieldValue As String fieldValue = Me.genu.Value ' Check if the field value starts with "17" If Left(fieldValue, 2) = "17" Then MsgBox "ادخال خاطئ! يجب ألا يبدأ الحقل بالرقم 17." Me.genu.Undo ' Undo the input End If End Sub
    1 point
  7. اخي الفاضل مربع inputbox في Excel لا يدعم إخفاء كلمة السر أو إظهارها كنجوم أو علامات. هو ببساطة يعرض مربع حوار لإدخال النص دون تقديم خيارات لتنسيق العرض مثل إخفاء النص. لإخفاء كلمة السر أو إظهارها كنجوم، يجب عليك استخدام Userform الذي يتيح لك تخصيص واجهة المستخدم بشكل أكبر. يمكنك استخدام خاصية PasswordChar لمربع النص (Textbox) لعرض كلمات المرور كنجوم أو أي رمز آخر تختاره بعد معاينة الكود الخاص بك حاولت تجربة انشاء شاشة دخول بسيطة بنفس الفكرة مع اظافة بعض التحسينات على الكود وطريقة اشتغالك على الملف مع اظافة ورقة خاصة بتسجيل الزوار باسم AccessLog لتتبع المستخدمين والمدة المستغرقة في استخدام الملف هدا مجرد اقتراح بسيط للفائدة فقط اليك الكود مع الشرح لتتمكن من تعديله بما يناسبك Private Sub UserForm_Initialize() Set f = Sheets("list") Set MonDico = CreateObject("Scripting.Dictionary") ' قراءة القيم من العمود L، بدءًا من الخلية L2 حتى آخر خلية بها بيانات a = f.Range("l2:l" & f.[L65000].End(xlUp).Row).Value For i = LBound(a) To UBound(a) ' إضافة القيم غير الفارغة إلى Dictionary (القيم الفريدة فقط) If a(i, 1) <> "" Then MonDico(a(i, 1)) = "" Next i Me.ComboBox1.List = MonDico.keys End Sub Private Sub CommandButton1_Click() Dim ws As Worksheet, logWs As Worksheet Dim lrow As Long, clé As String Dim password As String, Xtime As String Static AttemptCount As Integer, username As String ' تعيين ورقة العمل "list" Set ws = ThisWorkbook.Sheets("list") ' تعيين ورقة العمل للتسجيل Set logWs = ThisWorkbook.Sheets("AccessLog") ' الحصول على اسم المستخدم من ComboBox username = ComboBox1.Value ' التحقق إذا كان اسم المستخدم مدخل If username = "" Then MsgBox "يرجى اختيار اسم المستخدم.", vbExclamation Exit Sub End If ' العثور على آخر صف يحتوي على بيانات في العمود 12 (L) lrow = ws.Cells(ws.Rows.Count, 12).End(xlUp).Row ' البحث عن كلمة السر المرتبطة بالاسم For i = 2 To lrow If ws.Cells(i, 12).Value = username Then password = ws.Cells(i, 13).Value Exit For End If Next i ' الحصول على كلمة السر المدخلة من مربع النص clé = TextBox1.Text ' التحقق إذا كانت كلمة السر المدخلة صحيحة If clé = password Then ' تسجيل الدخول الناجح With logWs ' العثور على آخر صف فارغ في الأعمدة A, B, C و D lrow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 .Cells(lrow, 1).Value = username .Cells(lrow, 2).Value = Date .Cells(lrow, 3).Value = Format(Time, "hh:mm:ss") ' توقيت الدخول فقط كوقت .Cells(lrow, 4).Value = "دخول ناجح" ' إضافة رسالة تسجيل الدخول الناجح End With ' عرض رسالة ترحيب MsgBox "مرحبا " & username & "، لقد تم تسجيل الدخول بنجاح!", vbInformation ' إظهار Excel Application.Visible = True ' إغلاق UserForm Unload Me ' إعادة تعيين عدد المحاولات AttemptCount = 0 Else ' معالجة الدخول الفاشل AttemptCount = AttemptCount + 1 If AttemptCount >= 3 Then MsgBox "لقد تجاوزت عدد المحاولات المسموح بها. سيتم حفظ وإغلاق الملف.", vbExclamation ThisWorkbook.Save Application.Quit Else MsgBox "الرجاء التأكد من كلمة السر! المحاولة " & AttemptCount & " من 3" Me.TextBox1.Text = "" End If End If End Sub Private Sub CommandButtonClose_Click() Dim answer As VbMsgBoxResult answer = MsgBox("هل أنت متأكد من الخروج من البرنامج؟", vbYesNo + vbQuestion, "تأكيد الإغلاق") If answer = vbYes Then ' حفظ المصنف ThisWorkbook.Save ' إغلاق المصنف ThisWorkbook.Close SaveChanges:=False Application.Quit End If End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then Cancel = True MsgBox "يرجى استخدام زر الإغلاق المخصص لإغلاق النموذج", vbInformation End If End Sub وفي حدث ThisWorkbook Private Sub Workbook_Open() Application.Visible = False UserForm1.Show End Sub '**************************************** Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim logWs As Worksheet Dim lrow As Long Dim currentTime As Date Dim entryTime As Date On Error Resume Next Set logWs = ThisWorkbook.Sheets("AccessLog") If logWs Is Nothing Then MsgBox "ورقة العمل 'AccessLog' غير موجودة.", vbExclamation Exit Sub End If ' الحصول على الوقت الحالي currentTime = Now ' العثور على آخر صف يحتوي على بيانات lrow = logWs.Cells(logWs.Rows.Count, 1).End(xlUp).Row ' التحقق إذا كان هناك سجل سابق لتوقيت الدخول If lrow > 1 Then ' الحصول على توقيت الدخول entryTime = logWs.Cells(lrow, 3).Value ' تسجيل توقيت الخروج With logWs .Cells(lrow, 4).Value = Format(currentTime, "hh:mm:ss") ' توقيت الخروج فقط كوقت End With End If On Error GoTo 0 ' إلغاء التعامل مع الأخطاء ' حفظ المصنف ThisWorkbook.Save ' إغلاق المصنف ThisWorkbook.Close SaveChanges:=False ' تأكد من إغلاق المصنف بشكل صحيح ' إذا كنت تريد إغلاق Excel بالكامل، استخدم: 'Application.Quit End Sub عند الانتهاء من تعديل برنامجك حاول وضع باسوورد لمحرر الاكواد تفاديا للتلاعب بها كلمات المرور واسماء المستخدمين الحالية كما في الصورة فوق بالتوفيق.... شاشة دخول.xlsb
    1 point
  8. تفضل اخي جرب هدا الاقتراح حاول اولا ترتيب عناصر التيكست بوكس على اليوزرفورم بشكل متتابع وفي وحدة class module ضع الكود التالي مع تسميته مثلا ب Officena كما في الصورة ادناه Public WithEvents MultTextbox As MSForms.TextBox Private Sub MultTextbox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If TypeOf MultTextbox Is MSForms.TextBox Then Select Case KeyCode Case 37 ' السهم اليسار SendKeys "+{TAB}" Case 39 ' السهم اليمين SendKeys "{TAB}" Case Else ' السماح لجميع المفاتيح الأخرى بالعمل بشكل طبيعي Exit Sub End Select End If End Sub Private Sub MultTextbox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim ctrl As MSForms.Control Dim isTextBox As Boolean isTextBox = TypeOf MultTextbox Is MSForms.TextBox If isTextBox Then With USERFORM1 '<<======== 'قم بتعديل الاسم الى اسم النمودج الخاص بك For Each ctrl In .Controls ' التحقق من أن العنصر هو TextBox If TypeOf ctrl Is MSForms.TextBox Then ctrl.BackColor = RGB(255, 255, 255) 'ابيض كافتراضي' لون الخلفية End If Next MultTextbox.BackColor = RGB(255, 255, 128) ' تغيير لون الخلفية للأصفر عند التركيز End With End If End Sub وفي داخل اليوزرفورم ضع الكود التالي Dim i As Integer Dim ctrl As Control Dim TxtBx() As New Officena Private Sub UserForm_Initialize() Dim i As Long, ctrl As MSForms.Control i = 1 For Each ctrl In Me.Controls If TypeName(ctrl) = "TextBox" Then ReDim Preserve TxtBx(i) Set TxtBx(i).MultTextbox = ctrl i = i + 1 End If Next End Sub تفضل اليك المرفقات للتجربة User_Move left and right.rar
    1 point
×
×
  • اضف...

Important Information