قفل کردن فایل اکسل

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • مجید ایرج

    • 2014/12/21
    • 18

    قفل کردن فایل اکسل

    با عرض سلام. بنده دو تا مشکل دارم و به شدت نیاز به راهنمایی دارم. میخوام توی یک سلول تابعی بنویسم که مقداری رو بدست بیاره و توی سلول دیگه ای که هیچ تابعی نباید داخلش نوشته بشه ارجاع بده. مثلا در سلول a1 مقداری رو محاسبه کنه و در b1 که هیچ تابعی نداره نتیجه رو بیاره. دوم اینکه میخوام علاوه بر اینکه کاربرگها قفل داشته باشن(برای این قسمت مشکلی ندارم)، کل فایل اکسل هم برای باز شدن نیاز به قفل شدن داشته باشه
  • Ali Parsaei
    مدير تالارتوابع اکسل

    • 2013/11/18
    • 1522
    • 71.67

    #2
    سلام،
    تابع در a1 نوشته مي شود و نتيجه در آن به دست مي آيد، اگر مي خواهيد در b1 نتيجه درج گردد، بايد در آن بنويسيد: A1= اگر اين را هم نخواهيد بنويسيد و b1 خالي خالي باشد و فقط مقدار نتيجه در آن درج گردد چنين چيزي امکان ندارد مگر با کد نويسي بوسيله vba که البته دنگ و فنگ مخصوص به خود را دارد.
    براي رمز گذاري روي فايل بايد يک save as از آن بگيريد و در همان پنجره save as گزينه tools را پيدا کرده و مثلث کنارش را کليک کرده و گزينه general option را انتخاب کنيد.
    ضمنا" لطفا" براي سوالات خود نام مناسب انتخاب کنيد به نحوي که با خواندن تيتر سوال تا اندازه اي بتوان کليت آن را فهميد و در ضمن سوالاتتان را در تالارهاي مناسب ايجاد کنيد. (قسمت "مشکلات کاربري" مخصوص مشکلات در مورد کار در سايت و انجمن است)
    [SIGPIC][/SIGPIC]

    کامنت

    • مجید ایرج

      • 2014/12/21
      • 18

      #3
      نوشته اصلی توسط علي پارسا
      سلام،
      تابع در a1 نوشته مي شود و نتيجه در آن به دست مي آيد، اگر مي خواهيد در b1 نتيجه درج گردد، بايد در آن بنويسيد: A1= اگر اين را هم نخواهيد بنويسيد و b1 خالي خالي باشد و فقط مقدار نتيجه در آن درج گردد چنين چيزي امکان ندارد مگر با کد نويسي بوسيله vba که البته دنگ و فنگ مخصوص به خود را دارد.
      براي رمز گذاري روي فايل بايد يک save as از آن بگيريد و در همان پنجره save as گزينه tools را پيدا کرده و مثلث کنارش را کليک کرده و گزينه general option را انتخاب کنيد.
      ضمنا" لطفا" براي سوالات خود نام مناسب انتخاب کنيد به نحوي که با خواندن تيتر سوال تا اندازه اي بتوان کليت آن را فهميد و در ضمن سوالاتتان را در تالارهاي مناسب ايجاد کنيد. (قسمت "مشکلات کاربري" مخصوص مشکلات در مورد کار در سايت و انجمن است)
      با تشکر از شما. آیا مطمئن هستید که هیچ تابعی برای این کار وجود نداره؟ آیا نمیشه با تابعی آدرس یک سلول را داد تا نتیجه در آن سلول درج بشه؟؟ این موضوع ماه هاست من رو درگیر خودش کرده. آیا تابع offset در این زمینه به ما کمک نمیکنه؟

      کامنت

      • Ali Parsaei
        مدير تالارتوابع اکسل

        • 2013/11/18
        • 1522
        • 71.67

        #4
        به هيچ عنوان چنين تابعي وجود ندارد 100٪ مطمئن باشيد.
        [SIGPIC][/SIGPIC]

        کامنت

        • مجید ایرج

          • 2014/12/21
          • 18

          #5
          در بعضی فایل ها دیدم که قسمتی برای کلیک کردن وجود داره که باعث میشه اطلاعات انتقال پیدا کنه. میتونید بگید از چه توابعی استفاده شده و چطوریه؟ یک نمونه براتون میذارم نگاه کنید

          کامنت

          • iranweld

            • 2015/03/29
            • 3341

            #6
            در فایل پیوست در صورت تغییر در سلولهای ستونA مقدار آن در ستون B درج میگردد

            کدهای ذیل را در قسمت کدنویسی شیت مورد نظر وارد کنید

            کد PHP:
            Sub Worksheet_Change(ByVal Target As Range)

                If 
            Not Intersect(TargetMe.Range("A:A")) Is Nothing Then
                
                Target
            .Offset(01).Value Target.Value
                
                End 
            If
                
                
            End Sub 
            فایل های پیوست شده

            کامنت

            • مجید ایرج

              • 2014/12/21
              • 18

              #7
              نوشته اصلی توسط iranweld
              در فایل پیوست در صورت تغییر در سلولهای ستونA مقدار آن در ستون B درج میگردد

              کدهای ذیل را در قسمت کدنویسی شیت مورد نظر وارد کنید

              کد PHP:
              Sub Worksheet_Change(ByVal Target As Range)

                  If 
              Not Intersect(TargetMe.Range("A:A")) Is Nothing Then
                  
                  Target
              .Offset(01).Value Target.Value
                  
                  End 
              If
                  
                  
              End Sub 
              ممنون ازتون. من از کدنویسی هیچی نمیدونم. میشه توضیح بدی چجوری اینکارو انجام بدم؟ فقط developer رو آوردم. حالا چیکار کنم؟ چجوری فقط روی یک شیت اجراش کنم؟

              کامنت

              • مجید ایرج

                • 2014/12/21
                • 18

                #8
                نوشته اصلی توسط iranweld
                در فایل پیوست در صورت تغییر در سلولهای ستونA مقدار آن در ستون B درج میگردد

                کدهای ذیل را در قسمت کدنویسی شیت مورد نظر وارد کنید

                کد PHP:
                Sub Worksheet_Change(ByVal Target As Range)

                    If 
                Not Intersect(TargetMe.Range("A:A")) Is Nothing Then
                    
                    Target
                .Offset(01).Value Target.Value
                    
                    End 
                If
                    
                    
                End Sub 
                ممنون ازتون. من از کدنویسی هیچی نمیدونم. میشه توضیح بدی چجوری اینکارو انجام بدم؟ فقط developer رو آوردم. حالا چیکار کنم؟ چجوری فقط روی یک شیت اجراش کنم؟

                کامنت

                • مجید ایرج

                  • 2014/12/21
                  • 18

                  #9
                  من از این کد تونستم استفاده کنم. اما متاسفانه اصلا پویا نیست. یعنی اگر a1 با هر تابعی (مثلا index) مقدارش رو از یک سلول دیگه بگیره دیگه این کد کار نمیکنه. باید چیکار کرد؟

                  کامنت

                  • abootorab

                    • 2014/10/17
                    • 351

                    #10
                    نوشته اصلی توسط مجید ایرج
                    من از این کد تونستم استفاده کنم. اما متاسفانه اصلا پویا نیست. یعنی اگر a1 با هر تابعی (مثلا index) مقدارش رو از یک سلول دیگه بگیره دیگه این کد کار نمیکنه. باید چیکار کرد؟
                    با درود و تشکر از جناب iranweld
                    دوست عزیز کد رو بصورت زیر تغییر دهید: (در صورتیکه سلولهای مورد نظرتون غیر A1 و B1 باشند در کد زیر متناظر آنها را جایگزین کنید)
                    کد PHP:
                    Sub Worksheet_Change(ByVal Target As Range)
                        
                    Application.EnableEvents False
                        Range
                    ("B1") = Range("A1")
                        
                    Application.EnableEvents True
                    End Sub 

                    البته با توجه به خواسته ای که بیان کرده اید به راحتی با نوشتن فرمول زیر در سلول B1 به هدفتون برسید، اما اگر به هر دلیلی نمیخواین درون سلول B1 فرمول و یا تابعی وجود داشته باشد از کد فوق استفاده کنید.
                    کد PHP:
                    =A1 
                    Last edited by abootorab; 2015/12/05, 01:42.

                    کامنت

                    • مجید ایرج

                      • 2014/12/21
                      • 18

                      #11
                      نوشته اصلی توسط iranweld
                      در فایل پیوست در صورت تغییر در سلولهای ستونA مقدار آن در ستون B درج میگردد

                      کدهای ذیل را در قسمت کدنویسی شیت مورد نظر وارد کنید

                      کد PHP:
                      Sub Worksheet_Change(ByVal Target As Range)

                          If 
                      Not Intersect(TargetMe.Range("A:A")) Is Nothing Then
                          
                          Target
                      .Offset(01).Value Target.Value
                          
                          End 
                      If
                          
                          
                      End Sub 
                      کدی که دوستمون abootorab گفت کار نکرد. حالا یک سوال دارم. همین کدی که شما دادید اگر بخواداینطوری باشه چکار باید کرد؟ :
                      مثلا A1 رو توی B1 بنویسه. اگر B1 نوشته داشت توی E1بنویسه و اگر E1 هم نوشته داشت بره توی H1 بنویسه و این روند تا مثلا ZZ1 ادامه داشته باشه. یعنی اینکه هر بار توی چندتا سلول جلوتر بنویسه
                      راجع به سوال قبلی هم اینکه چطور پویا کنمش؟؟ راه حلی هست؟ ممنون از راهنماییاتون

                      کامنت

                      • iranweld

                        • 2015/03/29
                        • 3341

                        #12
                        اگر هم بایستی هر بار چند سطر جلوتر بنویسد کدها را مطابق نیاز خود اضافه و اصلاح کنید

                        کد PHP:
                        Sub Worksheet_Change(ByVal Target As Range)

                        '============ÈÑÇí ÓÊæä A====='

                        If Not Intersect(TargetMe.Range("A:A")) Is Nothing Then

                           Application
                        .EnableEvents False
                           
                            Target
                        .Offset(01).Value Target.Value
                            
                            Application
                        .EnableEvents True
                            
                            End 
                        If
                            
                            
                        '=======================ÈÑÇí ÓÊæä C======='
                            
                            
                        If Not Intersect(TargetMe.Range("C:C")) Is Nothing Then

                           Application
                        .EnableEvents False
                           
                            Target
                        .Offset(02).Value Target.Value
                            
                            Application
                        .EnableEvents True
                            
                            End 
                        If
                            
                            
                        '=======================ÈÑÇí ÓÊæä F====='
                            
                            
                        If Not Intersect(TargetMe.Range("F:F")) Is Nothing Then

                           Application
                        .EnableEvents False
                           
                            Target
                        .Offset(03).Value Target.Value
                            
                            Application
                        .EnableEvents True
                            
                            End 
                        If
                            
                             
                        End Sub 
                        فایل های پیوست شده

                        کامنت

                        • مجید ایرج

                          • 2014/12/21
                          • 18

                          #13
                          نوشته اصلی توسط iranweld
                          اگر هم بایستی هر بار چند سطر جلوتر بنویسد کدها را مطابق نیاز خود اضافه و اصلاح کنید

                          کد PHP:
                          sub worksheet_change(byval target as range)

                          '============èñçí óêæä a====='

                          if not intersect(targetme.range("a:a")) is nothing then

                             application
                          .enableevents false
                             
                              target
                          .offset(01).value target.value
                              
                              application
                          .enableevents true
                              
                              end 
                          if
                              
                              
                          '=======================èñçí óêæä c======='
                              
                              
                          if not intersect(targetme.range("c:c")) is nothing then

                             application
                          .enableevents false
                             
                              target
                          .offset(02).value target.value
                              
                              application
                          .enableevents true
                              
                              end 
                          if
                              
                              
                          '=======================èñçí óêæä f====='
                              
                              
                          if not intersect(targetme.range("f:f")) is nothing then

                             application
                          .enableevents false
                             
                              target
                          .offset(03).value target.value
                              
                              application
                          .enableevents true
                              
                              end 
                          if
                              
                               
                          end sub 
                          ممنون ازتون. اما منظورم این نبود. من میخوام همیشه در ستوان َ بنویسم نه در ستون دیگه. بعد اطلاعات از a به b کپی بشه، دفعه بعد که توی a چیزی نوشم توی c کپی بشه بدون اینکه به B دست بخوره. و این روند ادامه داشته باشه تا z. بازم ممنون از راهنماییهاتون

                          کامنت

                          • iranweld

                            • 2015/03/29
                            • 3341

                            #14
                            با سلام

                            از کد ذیل استفاده کنید

                            کد PHP:
                            Sub Worksheet_Change(ByVal Target As Range)

                            If 
                            Not Intersect(TargetMe.Range("A:A")) Is Nothing Then

                               I
                            =target.row
                               
                                  K 
                            ActiveSheet.Cells(IColumns.Count).End(xlToLeft).Column
                                 
                                Target
                            .Offset(0K).Value Target.Value
                                
                                    
                                End 
                            If
                                        
                                 
                            End Sub 
                            فایل های پیوست شده
                            Last edited by iranweld; 2015/12/15, 07:29.

                            کامنت

                            • مجید ایرج

                              • 2014/12/21
                              • 18

                              #15
                              نوشته اصلی توسط iranweld
                              با سلام

                              از کد ذیل استفاده کنید

                              کد PHP:
                              sub worksheet_change(byval target as range)

                              if 
                              not intersect(targetme.range("a:a")) is nothing then

                                 i
                              =target.row
                                 
                                    k 
                              activesheet.cells(icolumns.count).end(xltoleft).column
                                   
                                  target
                              .offset(0k).value target.value
                                  
                                      
                                  end 
                              if
                                          
                                   
                              end sub 

                              خیلی خیلی ممنون. فقط دو تا ایراد بزرگ در استفاده ازش وجود داره. اول اینکه من میخوام مثلا اگر در a1 رو نوشتم در b1 نوشته بشه و اگر b1 نوشته داشت داخل c1 نوشته بشه (مثل همون چیزی که قبلا گفتم). فقط میخوام این موضوع مثلا تا e1 محدود باشه و زمانی که توی f1 نوشتم همون روند قبلی برای سلولهای بعدی اجرا بشه. یعنی از a تا f یک مجموعه باشه و از f تا مثلا n یک مجموعه باشه. و اما مشکل دوم اینکه این روش اصلا پویا نیست. مثلا من میخوام a1 رو مساوی s9 قرار بدم و هر زمان که توی s9 نوشتم توی a1 با همون روابط ساده اکسل نوشته باشه. اما زمانی که از این توابط استفاده میشه دیگه این کدنویسی شما عمل نمیکنه. اگر این دو مورد رو راهنمایی بفرمایید ممنونتون می شم

                              کامنت

                              چند لحظه..