تغییر در خصوصیات سلول با نوشتن دستور

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • alishams119900

    • 2013/10/03
    • 17

    تغییر در خصوصیات سلول با نوشتن دستور

    با سلام خدمت دوستان گرامی
    می خواستم بدونم دستور یا تابعی هست که بشه خصوصیات یک سلول مثل رنگ یا locked بودن را باهاش تغییر داد. مخصوصا locked را الان احتیاج دارم.
    مثلا الان می خوام یه برنامه درست کنم که protect شده باشه و فقط خونه هایی که locked نیستن را بشه توش انتخاب کرد. بعد می خوام تو یه سلول تعداد داده های ورودی از کاربر خواسته بشه، بعد به تعداد داده شده، یه سری سلول unlocked بشن که بشه توشون داده ها را وارد کرد.
    آیا امکان این کار وجود داره؟
    اگه میشه روشی بگید که با نوشتن یه دستور توی سلول بشه اینکارو کرد، اگه نمیشه هم لطفا راه نوشتنشو با VBA اگه می دونید توضیح بدید. البته من تا حالا اصلا با VBA کار نکردم. اگه می شه یه جوری بگید متوجه شم.
    با تشکر فراوان
  • امين اسماعيلي
    مدير تالار ويژوال بيسيك

    • 2013/01/17
    • 1198
    • 84.00

    #2
    با درود
    دیر وقته الان و شاید جواب زیاد حرفه ای نباشه . اگه درست متوجه شده باشم مثلا میشه این کارو کرد
    1- اول شیتتون پروتکت کنین مثلا password رو بزاریم amin
    2- حالا همه سل ها قفلا مثلا شما میخواین کاربر براش N سل از A1 تا A باز بشه . من نظرم با یه inputbox بود که اول نمایش داده بشه و از شما بخواد که چند تا سل از پروتکت شدن خارج بشه
    یه چیزی شبیه کد زیر رو برای یه command button نوشتم
    البته شاید منظور شما این نباشه


    کد:
    ActiveSheet.Unprotect Password:="amin"
    Cells.Locked = True
    
    '"""""""""""""""""""""""""""""""""""""""""""""""
    Dim m
    m = InputBox("please enter maximum cell to Unlock", "Unlocker")
        Dim c As Range
        Application.ScreenUpdating = False
           For Each c In Range("A1:A" & m)
       c.Locked = False
        Next c
     
       ActiveSheet.Protect Password:="amin"
        Application.ScreenUpdating = True



    خوب اگرم که بخوایم تو یه سل خاص عدد وارد بشه قبل از این که کل شیت پروتکت بشه میشه اون سل رو تیکش رو برداشت.مثلا کد میشه یه چیزی شبیه زیر

    کد:
    ActiveSheet.Unprotect Password:="amin"
    Cells.Locked = True
    Range("B1").Locked = False
    
    
    
    '"""""""""""""""""""""""""""""""""""""""""""""""
    Dim m
    m = Sheet1.Range("B1").Value
        Dim c As Range
        Application.ScreenUpdating = False
           For Each c In Range("A1:A" & m)
          c.Locked = False
        Next c
    
        ActiveSheet.Protect Password:="amin"
        Application.ScreenUpdating = True
    سوالی بود در خدمتم. دست اخر جای تاپیکی که ایجاد کردین توی تالار ویژوال بود نه اینجا. با فرمول بعید میدونم بشه. اگرم من بد متوجه سوال شدم . یا حرفه ای تر میخواین باید دقیقا بگین چیکار کنیم یا فایل نمونه. پسورد واسه ویژوال هم یادتون نره .
    Last edited by امين اسماعيلي; 2013/11/24, 02:38.
    در پناه خداوندگار ایران زمین باشید و پیروز

    کامنت

    • alishams119900

      • 2013/10/03
      • 17

      #3
      با تشکر از امین اسماعیلی عزیز، من همون طور که گفتم تا حالا با قسمت ویژوال کار نکردم، میشه یه جوری توضیح بدبد که این دستورات را کجا وارد کنم و چطور ازشون استفاده کنم؟ اگه هم توضیحاتش زیاد میشه، اگه جایی می دونید مطلب توضیح داده شده بگید خودم می خونم. با تشکر

      کامنت

      • امين اسماعيلي
        مدير تالار ويژوال بيسيك

        • 2013/01/17
        • 1198
        • 84.00

        #4
        با درود
        دوست عزیز اینکه جایی قبلا توضیح داده شده باشه که من به خاطر ندارم. کلا VBA یک مبحث کاربردی هستش و برای یادگیریش نیاز به پشتکار داره. اگر نیاز به یادگیری اصولی دارین توی دوره هایی که تو همین سایت برگزار میشه شرکت کنین حتما بدردتو خواهد خورد . توی همین سایت میتونید نمونه کارهای مختلفی رو که با ویژوال انجام شده رو پیدا کنید و ببینین که چه کاربرد های متنوعی داره .
        سر موضوع شما و این سوال .
        من یه فایل pdf آماده میکنم که چطوری یه سری پیش فرض ها رو قبل از کار با ویژوال فعال کنین و بعدش به سوالتون برسیم و از این به بعد اگه سوالای دیگه ای پیش اومد دیگه گیج نشین که کد ها رو کجا باید گپی کنین.

        فقط یکم وقت بدین تا من امادش کنم
        در پناه خداوندگار ایران زمین باشید و پیروز

        کامنت

        • alishams119900

          • 2013/10/03
          • 17

          #5
          از لطف شما بسیار ممنونم
          ممنون از وقتی که می ذارید

          کامنت

          • امين اسماعيلي
            مدير تالار ويژوال بيسيك

            • 2013/01/17
            • 1198
            • 84.00

            #6
            با درود به همه دوستان

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

            یه مطلب هستش واسه دوستانی که با vba اشنایی ندارن . البته شاید بدرد بقیه هم بخوره. 100 در 100 این موضوع تو کلاس های اموزشی بحث شده و من با اجازه استاد شمس و بقیه اساتید واسه اخرین بار این مطلب پایه ای رو که میدونم باید جزوی از کورس اموزشی باشه رو میزارم که دوستان علاقمند بخونن و یه اشنایی پیدا کنن واسه دوره ها :
            یه فایل pdf و 2 تا فایل اکسل یکی واسه تمرین و یکی هم برای دوست عزیز که سوال رو مطرح کردن گذاشتم .

            فقط یه مورد میمونه واسه دوست عزیز و اونایی که تازه وارد مسئله VBA میشن. نحوه فعال کردن macro واسه همیشه رو سیستمشون هست که فکر میکنم به کرات در سایت بحث شده و این کار رو میزارم بر عهده خودشون.
            Last edited by امين اسماعيلي; 2013/11/25, 13:45.
            در پناه خداوندگار ایران زمین باشید و پیروز

            کامنت

            • امين اسماعيلي
              مدير تالار ويژوال بيسيك

              • 2013/01/17
              • 1198
              • 84.00

              #7
              بادرود

              بابت اینکه لینک میدم عذر مارو بپذیرین . همونطور که میبینین 2 بارم ویرایش کردم نتونستم اپلود کنم

              OLXTOTO adalah Bandar Slot Gacor yang paling Gampang dimenangi karena loyalitas tinggi di masing-masing providernya dan memiliki permainan yang sudah di jamin 100% aman dan adil.
              در پناه خداوندگار ایران زمین باشید و پیروز

              کامنت

              • alishams119900

                • 2013/10/03
                • 17

                #8
                یک دنیا ممنون از لطفتون آقای اسماعیلی، خیلی استفاده کردم و حتما برای خیلی از دوستان هم مفید بوده
                اون دستور دومی که نوشتید برای یه ماکرو هست دیگه برای یه کلید نیست درسته؟ اگه اینطوریه میشه برنامه ای برای خود سلول نوشت که بر طبق عددی که توش نوشته میشه یه سری سلول را unlock کنه؟ بدون اینکه ماکرو ای را اجرا کنیم. فرض کنید تمام صفحه از قبل protect شده و فقط سلول A1 باز هست و به مقدار عددی که توش می نویسیم توی ستون B سلول unlock بشه و آماده دریافت ورودی بشه
                با تشکر
                Last edited by alishams119900; 2013/11/26, 18:59.

                کامنت

                • امين اسماعيلي
                  مدير تالار ويژوال بيسيك

                  • 2013/01/17
                  • 1198
                  • 84.00

                  #9
                  با درود
                  کدی که نوشته شد هر دو رو برای یه کلید میشه نوشت. اما این چیزی که از شواهد پیداست شما میخواین که در یه سل بنویسین و بدون کلید این کار انجام بشه. خوب 2 کار شما رو راه میندازه. دومی تو سل b1 باید بنویسیم حالا ما اونو باید یه تغییر بدیم. و همچنین شما فکر کنم نمی خوای از کلید استفاده کنی . خوب من یه تغییر کوچیک میدم شما برسی کن.
                  در پناه خداوندگار ایران زمین باشید و پیروز

                  کامنت

                  • امين اسماعيلي
                    مدير تالار ويژوال بيسيك

                    • 2013/01/17
                    • 1198
                    • 84.00

                    #10
                    با درود
                    دیر وقت هم شده و ما هم خسته ولی چیکار کنیم یه مدت نبودیم باید تنبیه بشیم .
                    دوست عزیز یه نمونه فایل گذاشتم هرچند نباید میذاشتم چون حد اقلش با کد دوم خودت باید یه کاریش میکردی . اگر در کد دوم دقت میکردی و یه تغییر کوچیک توش میدادی میشد با همون کلید حلش کرد یعنی به این صورت :
                    کد:
                    Application.ScreenUpdating = False
                    ActiveSheet.Unprotect Password:="amin"
                    Cells.Locked = True
                    Range("A1").Locked = False
                    
                    
                    
                    '"""""""""""""""""""""""""""""""""""""""""""""""
                    Dim m
                    m = Sheet1.Range("A1").Value
                        Dim c As Range
                        Application.ScreenUpdating = False
                           For Each c In Range("B1:B" & m)
                          c.Locked = False
                        Next c
                    
                      ActiveSheet.Protect Password:="amin"
                    Application.ScreenUpdating = True
                    با در نظر گرفتن این که شما میخوای وقتی A1 تغییر کرد کد اجرا بشه و باتن نباشه ما باید برای ایونت change شیت و مختص A1 کد بنویسیم که وقتی تغییر کرد کد ها اجرا بشه انگار یه کلید فشار داده شده مثل کد زیر

                    که نمونه این کارم قبل انجام شده
                    کد:
                    On Error Resume Next
                      If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
                    If Target.Address = "$A$1" Then
                    Application.ScreenUpdating = False
                    ActiveSheet.Unprotect Password:="amin"
                    Cells.Locked = True
                    Range("A1").Locked = False
                    
                    
                    
                    '"""""""""""""""""""""""""""""""""""""""""""""""
                    Dim m
                    m = Sheet1.Range("A1").Value
                        Dim c As Range
                        Application.ScreenUpdating = False
                           For Each c In Range("B1:B" & m)
                          c.Locked = False
                        Next c
                    
                        ActiveSheet.Protect Password:="amin"
                           End If
                            Application.ScreenUpdating = True
                    خواهشن . میدونم خیلی از دوستان تازه عضو میشن و سوالای زیادی تو ذهنشون میاد . از قبل مطالب قبلی رو نگاه کنن. خیلی ها نه من ، زحمت زیادی کشیدن تا سایت به اینجا رسیده حداقل واسه زحمت هایی که اونها کشیدن مطالب رو برسی کنیم
                    فایل های پیوست شده
                    در پناه خداوندگار ایران زمین باشید و پیروز

                    کامنت

                    • alishams119900

                      • 2013/10/03
                      • 17

                      #11
                      با تشکر از شما دوست عزیز و ممنون از زحمتی که کشیدن، کاملا حق با شماست من تازه عضو شدم و با مطالب فروم زیاد آشنا نیستم و چون مطالب زیاده واقعا نمیشه همشو چک کنم، شما چون با مطالب و موضوعات بحث شده آشنا هستید اگه برای سوالاتی که در آینده ممکنه پیش بیاد می دونید درباره اون موضوع قبلا بحث شده به اون موضوع لینک بدید ممنون می شیم. ما هم شرایط شمارو با توجه به تعداد بازدید کننده های سایتتون درک می کنیم. باز هم از زحماتتون ممنونم

                      کامنت

                      • ~M*E*H*D*I~
                        • 2011/10/19
                        • 4377
                        • 70.00

                        #12
                        سپاس از امین عزیز

                        پیشنهاد میدم از یک refedit استفاده بشه تا کاربر برای انتخاب محدوده مورد نیازش آزادی عمل داشته باشه پسورد اولیه هم لزومی نداره باشه
                        [CENTER]
                        [SIGPIC][/SIGPIC]
                        [/CENTER]

                        کامنت

                        • امين اسماعيلي
                          مدير تالار ويژوال بيسيك

                          • 2013/01/17
                          • 1198
                          • 84.00

                          #13
                          با درود لف
                          بله دوست عزیز کارهای متنوعی میشه انجام داد . پیشنهاد جناب وطن پرست نیز خوبه و راه گشا تر. حتی میشه با یوزر فرم کار کرد و بر اساس یوزر های مختلف تعداد تکست باکس های خاصی فعال شود و ................
                          ممنون ازراهنمایی
                          در پناه خداوندگار ایران زمین باشید و پیروز

                          کامنت

                          • alishams119900

                            • 2013/10/03
                            • 17

                            #14
                            نوشته اصلی توسط امين اسماعيلي
                            با درود لف
                            بله دوست عزیز کارهای متنوعی میشه انجام داد . پیشنهاد جناب وطن پرست نیز خوبه و راه گشا تر. حتی میشه با یوزر فرم کار کرد و بر اساس یوزر های مختلف تعداد تکست باکس های خاصی فعال شود و ................
                            ممنون ازراهنمایی
                            ببخشید میشه یه کم بیشتر توضیح بدید، اگه قبلا هم بحث شده، لطفا لینک بدید بخونمش، refedit را هم تو ساییتتون و توی help اکسل search کردم چیزی پیدا نکردم، مختصر توضیحی هم در مورد اون بدید ممنون می شم. با تشکر فراوان

                            کامنت

                            • ~M*E*H*D*I~
                              • 2011/10/19
                              • 4377
                              • 70.00

                              #15
                              نوشته اصلی توسط alishams119900
                              ببخشید میشه یه کم بیشتر توضیح بدید، اگه قبلا هم بحث شده، لطفا لینک بدید بخونمش، refedit را هم تو ساییتتون و توی help اکسل search کردم چیزی پیدا نکردم، مختصر توضیحی هم در مورد اون بدید ممنون می شم. با تشکر فراوان

                              refedit یکی از active_x control هایی است که میشه به فرم اضافه کرد و با اون محدوده ای از سلول هارو انتخاب کرد در فایلی که در لینک زیر قرار دادم از این کنترل استفاده شده


                              معکوس کردن اعداد زیر قطر اصلی ماتریس

                              [CENTER]
                              [SIGPIC][/SIGPIC]
                              [/CENTER]

                              کامنت

                              چند لحظه..