صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از شماره 1 تا 10 , از مجموع 16

موضوع: تعیین دسترسی با استفاده از یوزر های Login ویندوز ، تعریف شده در شبکه و تعریف دسترسی بر اساس یوزر ها با محدودیت سلولی

  1. #1


    آخرین بازدید
    2023/12/30
    تاریخ عضویت
    April 2014
    محل سکونت
    ساوه
    نوشته ها
    347
    امتیاز
    417
    سپاس
    853
    سپاس شده
    266 در 129 پست
    سطح اکسل
    45.00 %

    Question تعیین دسترسی با استفاده از یوزر های Login ویندوز ، تعریف شده در شبکه و تعریف دسترسی بر اساس یوزر ها با محدودیت سلولی

    سلام خسته نباشید
    2 سوال داشتم در مورد تعیین دسترسی یوزر ها.
    با توجه به اینکه افراد در شبکه داخلی شرکت ما دارای دسترسی های از پیش تنظیم شده می باشند و من قادر به تعیین دسترسی هر فایل از بیرون نیستم مجبورم در داخل فایل های اکسل این کار رو انجام دهم.

    سوال 1 ) اگر بخواهم شخصی با یوزر مشخص شده در سیستم شبکه کارخانه در یک فایل از دسترسی محدود و فقط خواند فایل برخوردار باشد و ادمین و خودم و یوزر 2 دارای دسترسی کامل باشد . بدون اینکه در هنگام ورود به فایل لازم باشد یوزر و پسورد وارد کند . آیا این امکان وجود دارد ؟

    سوال 2 ) فایل ضمیمه درای ستون هایی با شماره های 1 تا 22 و ستون های A و B و C و D . آیا میشود دسترسی یک یوزر را جوری تعریف کرد که به ستون های 1 تا 22 دسترسی کامل داشته باشد و قابل تغییر باشد و بتواند فایل رو ذخیره کند . در حالی که به ستون های A تا D دسترسی نداشته باشد برای تغییرات . این محدودیت ها برای یوزر ادمین و یوزر شماره 2 وجود نداشته باشد و کاملا دسترسی داشته باشند به همه سلول ها . همه ی این اتفاقات بدون اینکه در هنگام باز کردن فایل لازم به وارد کردن User Name و Password باشد اتفاق بیافتد .!

    در واقع نکته مشترک دو سوال این است که تنها با User name های آنلاین شده در شبکه بتوان دسترسی های داخل فایل های اکسل رو تعریف کرد و نیازی به درخواست پسورد نباشد ؟ وقتی من فایل رو باز میکنم دسترسی کامل باشد وقتی اپراتور باز میکند دسترسی محدود باشد با شرایط ذکر شده بالا .

    اخطار: این یک موضوع قدیمی است
    به دلیل قدیمی بودن موضوع، ممکن است برخی فایل های ضمیمه به درستی کار نکنند. لطفا در صورت عدم ضرورت، از بالا آوردن موضوعات قدیمی خودداری نمایید.
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: xlsx sampel.xlsx اطلاعات (604.8 کیلو بایت, 103 نمایش)
    پاسخ مورد نظر براي اين تاپيك ارسال شده است.

  2. سپاس ها (1)


  3.  

  4. #2


    آخرین بازدید
    2016/11/06
    تاریخ عضویت
    January 2014
    محل سکونت
    تهران
    نوشته ها
    149
    امتیاز
    1192
    سپاس
    175
    سپاس شده
    414 در 123 پست
    تعیین سطح نشده است

    سلام دوست عزیز
    اگر چند نفر به طور همزمان از فایل استفاده نمی کنند یعنی ورک بوک SHARE نیست و فولدری که فایل اکسل درونش هست در شبکه SHARE است از این روش میشه استفاده کرد :
    ستون هایی که می خواهید دیگران توانایی دسترسی داشته باشند رو انتخاب و از فرمت سل و از PROTECTION تیک LOCKED رو بردارید.
    به قسمت ویژوال رفته و یک MODULE ایجاد کنید و این کد روی درونش قرار بدید :
    کد:
    Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
    سپس در قسمت THISWORKBOOK این کد رو قرار بدید :
    کد:
    Private Sub Workbook_Open()
    Const lpnLength As Integer = 255
          Dim status As Integer
          Dim lpName, lpUserName As String
          lpUserName = Space$(lpnLength + 1)
          status = WNetGetUser(lpName, lpUserName, lpnLength)
          If status = NoError Then
             lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
          Else
             MsgBox "Unable to get the name."
             End
          End If
    If lpUserName = "ADMIN" Then
    Sheet4.Unprotect ("123")
    Else
    Sheet4.Protect ("123")
    End If
    End Sub
    جلوی IpuserName نام یوزری که می بایست دسترسی کلی داشته باشد را تایپ کنید.
    به جای sheet4 شیت مورد نظر و به جای 123 پسورد شیت قفل شده را وارد کنید.
    ویرایش توسط DOLFIN : 2015/07/26 در ساعت 16:51
    خانه اکسل - http://********************


  5. #3


    آخرین بازدید
    2023/12/30
    تاریخ عضویت
    April 2014
    محل سکونت
    ساوه
    نوشته ها
    347
    امتیاز
    417
    سپاس
    853
    سپاس شده
    266 در 129 پست
    سطح اکسل
    45.00 %

    [QUOTE=DOLFIN;40122]سلام دوست عزیز
    اگر چند نفر به طور همزمان از فایل استفاده نمی کنند یعنی ورک بوک SHARE نیست و فولدری که فایل اکسل درونش هست در شبکه SHARE است از این روش میشه استفاده کرد :
    ستون هایی که می خواهید دیگران توانایی دسترسی داشته باشند رو انتخاب و از فرمت سل و از PROTECTION تیک LOCKED رو بردارید.
    به قسمت ویژوال رفته و یک MODULE ایجاد کنید و این کد روی درونش قرار بدید :
    کد:
    Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
    در مرحله اول این کد نویسی اشکال آفیس یا ویندوز 64 bit رو میگیره تصویر اشکال رو قرار میدمبرای دیدن سایز بزرگ روی عکس کلیک کنید

نام:  if.jpg
مشاهده: 27
حجم:  70.3 کیلو بایت
    در مورد قسمت دوم فرمول نویسی هم اینطور عمل کردم :
    کد PHP:
    Private Sub Workbook_Open()
    Const 
    lpnLength As Integer 255
          Dim status 
    As Integer
          Dim lpName
    lpUserName As String
          lpUserName 
    Space$(lpnLength 1)
          
    status WNetGetUser(lpNamelpUserNamelpnLength)
          If 
    status NoError Then
             lpUserName 
    Left$(lpUserNameInStr(lpUserNameChr(0)) - 1)
          Else
             
    MsgBox "Unable to get the name."
             
    End
          End 
    If
    If 
    lpUserName "s.tabibi" Then
    Sheet4
    .Unprotect ("12345")
    Else
    Sheet4.Protect ("12345")
    End If
    End Sub 
    پسورد هارو از 1 تا 5 ، و User name رو s.tabibi تغییر دادم .درسته ؟
    ویرایش توسط sabertb : 2015/07/26 در ساعت 17:59

  6. سپاس ها (1)


  7. #4


    آخرین بازدید
    2016/11/06
    تاریخ عضویت
    January 2014
    محل سکونت
    تهران
    نوشته ها
    149
    امتیاز
    1192
    سپاس
    175
    سپاس شده
    414 در 123 پست
    تعیین سطح نشده است

    سلام کد رو درMODULE به این شکل تغییر بدید :
    کد:
    Option Explicit
    Declare Function WNetGetUser Lib "mpr.dll" _
                                 Alias "WNetGetUserA" (ByVal lpName As String, _
                                                       ByVal lpUserName As String, lpnLength As Long) As Long
    
    Const NoError = 0        'The Function call was successful
    
    Public Function GetUserName() As String
    
    ' Buffer size for the return string.
    Const lpnLength As Integer = 255
    
        ' Get return buffer space.
    Dim status As Integer
    
        ' For getting user information.
    Dim lpName, lpUserName As String
    
        ' Assign the buffer size constant to lpUserName.
        lpUserName = Space$(lpnLength + 1)
    
        ' Get the log-on name of the person using product.
        status = WNetGetUser(lpName, lpUserName, lpnLength)
    
        ' See whether error occurred.
        If status = NoError Then
            ' This line removes the null character. Strings in C are null-
            ' terminated. Strings in Visual Basic are not null-terminated.
            ' The null character must be removed from the C strings to be used
            ' cleanly in Visual Basic.
            lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
        Else
            ' An error occurred.
            GetUserName = "Unable to get the name."
            GoTo lbl_Exit
        End If
    
        ' Display the name of the person logged on to the machine.
        GetUserName = lpUserName
    lbl_Exit:
        Exit Function
    End Function
    سپس در قسمت THISWORKBOOK این کد رو قرار بدید :
    کد:
    Private Sub Workbook_Open()
    If GetUserName = "s.tabibi" Then
    Sheet4.Unprotect ("12345")
    Else
    Sheet4.Protect ("12345")
    End If
    End Sub
    خانه اکسل - http://********************


  8. #5
    mokaram آنلاین نیست.
    مدير تالار اکسل و بانک اطلاعاتی


    محصولات کاربر

    ويدئوي ايجاد سطح دسترسي
    آخرین بازدید
    2023/04/20
    تاریخ عضویت
    February 2011
    محل سکونت
    ســــاوه
    نوشته ها
    1,805
    امتیاز
    6409
    سپاس
    8,100
    سپاس شده
    5,163 در 1,502 پست
    سطح اکسل
    74.00 %

    mokaram به Yahoo ارسال پیام
    برای حل مشکل اول ( ویندوز 64 بیتی ) کافیه که بعد از عبارت Declare کلمه Ptrsafe را مرقوم بفرمایید تا مشکلتون حل بشه



  9. #6


    آخرین بازدید
    2023/12/30
    تاریخ عضویت
    April 2014
    محل سکونت
    ساوه
    نوشته ها
    347
    امتیاز
    417
    سپاس
    853
    سپاس شده
    266 در 129 پست
    سطح اکسل
    45.00 %

    نقل قول نوشته اصلی توسط DOLFIN نمایش پست ها
    سلام کد رو درMODULE به این شکل تغییر بدید :
    کد:
    Option Explicit
    Declare Function WNetGetUser Lib "mpr.dll" _
                                 Alias "WNetGetUserA" (ByVal lpName As String, _
                                                       ByVal lpUserName As String, lpnLength As Long) As Long
    
    Const NoError = 0        'The Function call was successful
    
    Public Function GetUserName() As String
    
    ' Buffer size for the return string.
    Const lpnLength As Integer = 255
    
        ' Get return buffer space.
    Dim status As Integer
    
        ' For getting user information.
    Dim lpName, lpUserName As String
    
        ' Assign the buffer size constant to lpUserName.
        lpUserName = Space$(lpnLength + 1)
    
        ' Get the log-on name of the person using product.
        status = WNetGetUser(lpName, lpUserName, lpnLength)
    
        ' See whether error occurred.
        If status = NoError Then
            ' This line removes the null character. Strings in C are null-
            ' terminated. Strings in Visual Basic are not null-terminated.
            ' The null character must be removed from the C strings to be used
            ' cleanly in Visual Basic.
            lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
        Else
            ' An error occurred.
            GetUserName = "Unable to get the name."
            GoTo lbl_Exit
        End If
    
        ' Display the name of the person logged on to the machine.
        GetUserName = lpUserName
    lbl_Exit:
        Exit Function
    End Function
    سپس در قسمت THISWORKBOOK این کد رو قرار بدید :
    کد:
    Private Sub Workbook_Open()
    If GetUserName = "s.tabibi" Then
    Sheet4.Unprotect ("12345")
    Else
    Sheet4.Protect ("12345")
    End If
    End Sub
    عالی شد ممنون هستم . می تونم بپرسم اگر چند کاربر بخوام تعریف کنم که دسترسی کامل داشته باشند. و در مرحله Protect بخوام این امکانات رو داشته باشند .
    کد PHP:
    ActiveSheet.Protect DrawingObjects:=TrueContents:=TrueScenarios:=True _
            
    AllowSorting:=TrueAllowFiltering:=True 
    چکار باید کنم ؟

  10. سپاس ها (1)


  11. #7


    آخرین بازدید
    2016/11/06
    تاریخ عضویت
    January 2014
    محل سکونت
    تهران
    نوشته ها
    149
    امتیاز
    1192
    سپاس
    175
    سپاس شده
    414 در 123 پست
    تعیین سطح نشده است

    به طور کلی در قسمت اول این کد نویسی یک تابع به نام GetUserName تعریف شده که شما میتونید حتی درون سلول شیت ها از آن استفاده کنید و این تابع نام یوزر ویندوزی که فایل اکسل را باز می کند را تایپ می کند.

    در قسمت دوم این طور تعریف شده که اگر نام یوز ویندوز برایر با فلان بود شیت مورد نظر را که پسوردش 12345 است قفلش باز شود و اگر نبود قفل بماند.

    پس برای اینکه ما بخواهیم دسترسی کامل را به چند یوزر ویندوز بدهیم باید قسمت دوم کدنویسی را تغییر دهیم و چون در قسمت دوم از if استفاده شده می توانیم با افزودن یک or تا چند شرط دلخواه دیگر هم اضافه کنیم.
    برای مثلا سه یوزر کد را به این صورت تغییر می دهیم :
    کد:
    Private Sub Workbook_Open()
    If GetUserName = "s.tabibi" or GetUserName="user2" or GetUserName="user3" Then
    Sheet4.Unprotect ("12345")
    Else
    Sheet4.Protect ("12345")
    End If
    End Sub
    خانه اکسل - http://********************

  12. سپاس ها (2)


  13. #8


    آخرین بازدید
    2023/12/30
    تاریخ عضویت
    April 2014
    محل سکونت
    ساوه
    نوشته ها
    347
    امتیاز
    417
    سپاس
    853
    سپاس شده
    266 در 129 پست
    سطح اکسل
    45.00 %

    نقل قول نوشته اصلی توسط DOLFIN نمایش پست ها
    به طور کلی در قسمت اول این کد نویسی یک تابع به نام GetUserName تعریف شده که شما میتونید حتی درون سلول شیت ها از آن استفاده کنید و این تابع نام یوزر ویندوزی که فایل اکسل را باز می کند را تایپ می کند.

    در قسمت دوم این طور تعریف شده که اگر نام یوز ویندوز برایر با فلان بود شیت مورد نظر را که پسوردش 12345 است قفلش باز شود و اگر نبود قفل بماند.

    پس برای اینکه ما بخواهیم دسترسی کامل را به چند یوزر ویندوز بدهیم باید قسمت دوم کدنویسی را تغییر دهیم و چون در قسمت دوم از if استفاده شده می توانیم با افزودن یک or تا چند شرط دلخواه دیگر هم اضافه کنیم.
    برای مثلا سه یوزر کد را به این صورت تغییر می دهیم :
    کد:
    Private Sub Workbook_Open()
    If GetUserName = "s.tabibi" or GetUserName="user2" or GetUserName="user3" Then
    Sheet4.Unprotect ("12345")
    Else
    Sheet4.Protect ("12345")
    End If
    End Sub
    قسمت آخر پرسش من هم اگه پاسخ بدید ممنون میشم . در قسمت Protect کردن برای افراد با محدودیت آنها بتوانند فیلتر کنند یا سورت کنند مانند همان کدای ضبط ماکرو ای که در پاسخ قبل نوشتم . ولینتونستم اونارو مستقیم تو کد نویسی شما وارد کنم . (Protect با قابلیت فیلترینگ و سورت)

  14. #9


    آخرین بازدید
    2016/11/06
    تاریخ عضویت
    January 2014
    محل سکونت
    تهران
    نوشته ها
    149
    امتیاز
    1192
    سپاس
    175
    سپاس شده
    414 در 123 پست
    تعیین سطح نشده است

    در حالت PROTECT فیلتر انجام نمیشه می بایست یک command button ایجاد کنید و این کد رو براش تعریف کنید :
    کد:
    Private Sub CommandButton1_Click()
    Sheet4.Unprotect ("12345")
    ActiveSheet.AutoFilter.ApplyFilter
    Sheet4.Protect ("12345")
    End Sub
    در این کد تنها فیلتر موجود برای ستون ها رفرش می شود اما می توانید با استفاده از کد یک فیلتر برای ستون خاص و با شرایط خاص ایجاد کنید.
    خانه اکسل - http://********************

  15. #10


    آخرین بازدید
    2023/12/30
    تاریخ عضویت
    April 2014
    محل سکونت
    ساوه
    نوشته ها
    347
    امتیاز
    417
    سپاس
    853
    سپاس شده
    266 در 129 پست
    سطح اکسل
    45.00 %

    نقل قول نوشته اصلی توسط DOLFIN نمایش پست ها
    در حالت PROTECT فیلتر انجام نمیشه می بایست یک command button ایجاد کنید و این کد رو براش تعریف کنید :
    کد:
    Private Sub CommandButton1_Click()
    Sheet4.Unprotect ("12345")
    ActiveSheet.AutoFilter.ApplyFilter
    Sheet4.Protect ("12345")
    End Sub
    در این کد تنها فیلتر موجود برای ستون ها رفرش می شود اما می توانید با استفاده از کد یک فیلتر برای ستون خاص و با شرایط خاص ایجاد کنید.
    درست می فرمایید . در اکسل انواع Protect کردن رو خودش داره که میشه با مشخص کردن گزینه های فیلتر و سورت جوری پروتکت کرد که سلول های locked شده قابل تغییر نباشند ولی قابل سورت و فیلتر باشند کد های این پروتکت هم با ضبط ماکرو مشخص میشه . حالا راهی هست که اون کد ها رو بشه داخل کد نویسی شما وارد کرد ؟ من وقتی داشتم سعی میکردم این دستورات رو وارد کنم در محیط VBA دیدم بعد از کد protect گزینه هاش موجوده بود ولی من نتونستم دستورش رو اونجور که باید و درست است وارد کنم در تصویر زیر مشخص میکنم کدوم قسمت رو میگم .
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام:  if.jpg
مشاهده: 22
حجم:  75.0 کیلو بایت


صفحه 1 از 2 12 آخرینآخرین

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 4
    آخرين نوشته: 2018/10/25, 12:35
  2. پاسخ ها: 0
    آخرين نوشته: 2016/11/01, 09:49
  3. [حل شده] محاسبه تعداد روز بین دو تاریخ شمسی
    توسط mvbmajid در انجمن توابع اکسل - Excel Functions
    پاسخ ها: 10
    آخرين نوشته: 2015/08/14, 22:38
  4. تعداد روز بین دو تاریخ شمسی
    توسط razemana در انجمن توابع اکسل - Excel Functions
    پاسخ ها: 1
    آخرين نوشته: 2014/04/17, 09:14
  5. محاسبه تعداد روز بین دو تاریخ شمسی
    توسط mvbmajid در انجمن توابع اکسل - Excel Functions
    پاسخ ها: 2
    آخرين نوشته: 2012/02/20, 18:36

بازدید کنندگان با جستجو های زیر این صفحه را پیدا کرده اند

ایجاد تغییرات در ویندوز از طریق vba اکسل

تعریف login

دسترسی به اکسل در شبکه داخلی

دسترسی به یوزر در اکسل

اگر بخواهم یک فایل درست کنم که چند نفر دسترسی داشته باشن چه کنم؟

کلمات کلیدی این موضوع

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
  • BB code ها فعال هستند
  • شکلک ها فعال هستند
  • کد [IMG] فعال است
  • کد [VIDEO] فعال است
  • کد HTML غیر فعال است