PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : دستور حرکت مکان نما از یک ستون به ستون دیگر



sh_amar
2010/11/13, 13:00
سلام به همه دوستان
من در اکسل چند تا ستون دارم که مقادیر یکی از این ستونها به ستونهای دیگه مربوط می باشد می خواهم به محض ورود یک داده در ستون اصلی مکان نما به سلول مربوط با این مقدار در ستون دیگر برود .آیا این کار در اکسل امکان پذیر هست :huh:

mrexcel
2010/11/13, 13:19
ببينيد از موارد زير كدام براي شما قابل استفاده است
يك سلول حاوي فرمول را كه انتخاب كرديم با كليد ميانبر ctrl+[ و ctrl+] ميتوان سلولهاي پيش نياز و پس نياز اين فرمول را انتخاب كرد
با استفاده از منوي formula گزينه formula auditing زير گزينه trace .... ميتوان با استفاده از فلش ها سلولهاي پيش نياز و پس نياز را مشاهده نمود
با استفاده از ابزار ctrl+g قسمت special گزينه precedent و dependence سلولهاي پيش نياز و پس نياز را انتخاب ميكند

sh_amar
2010/11/14, 05:35
سلام
مثل اينكه من سئوالم را درست نپرسيدم منظور من سلولها و ستونهاي داراي فرمول نبوده بلكه يك سري داده از نوع متني است
فايل من مربوط به انواع تشويقي هايي است كه يك سازمان به كارمندان خود مي دهد مي خواهم به محض مثلا ورود تشويقي از نوع ريالي در ستون انواع تشويقي ، مكان نما به ستون مربوط به مقادير ريالي رفته و منتظر درج مقدار ريالي از طرف كاربر گردد .
ممنون مي شم اگه بتونيد من را راهنمايي كنيد .

shamsololama
2010/11/14, 08:14
با درود فراوان

برای این کار می بایست امنیت ماکرو را روی Low قرار دهی

با نوشتن این کد در زیر روال Worksheet_Calculate و اضافه کردن یک ستون کمکی و نوشتن یک تابع این کار عملی است که نمونه آن را ضمیمه کرده ام در این نمونه وقتی که در ستون تشویقی مقداری و یا نوشته ای را وارد کنید پس از اینتر کردن به دو ستون جلوتر که مقدار تشویقی است رفته تا مقدار را وارد کنید که شما می توانید این کار را روی هر کدام از ستونهایی که مورد نظرتان باشد انجام دهید

کد:
Private Sub Worksheet_Calculate()
On Error Resume Next
If Application.Selection.Column = 4 Then
Selection.Offset(-1, 3).Select
End If
End Sub

فایل ضمیمه:
[attachment=103]

sh_amar
2010/11/14, 19:46
سلام بر شما
خيلي ممنون از راهنمايي تان البته مشكل من اينه كه اصلا با ماكرو ها و برنامه نويسي اكسل آشنا نيستم ولي با وجود فايل ارسالي شما فكر كنم بتونم مشكلمو حل كنم
با تشكر فروان از شما

sh_amar
2010/11/15, 22:58
سلام بر شما

در زمينه راهنمايي كه كرديد چند تا سئوال دارم اگه زحمتي نيست و حوصله اش را داشتيد لطفا پاسخ دهيد
ممكنه كه سئوالات من خيلي ابتدايي باشه ولي چون من اصلا با كدها كار نكردم در انجام اين برنامه دچار اشكال شدم ( البته با آقاي علي محمدي هماهنگ كردم و انشاء الله به زودي عضو تالار آموزشي ويژوال بيسيك مي شم )
اول اينكه شما فرموديد بايد امنيت ماكرو را روي LOW قرار دهيم يعني چي و از كجا مي شود اين امكان را فراهم كرد آيا اين به ستون A كه با مقادير صفر پر شده مربوط ميشود ؟
دوم اينكه در دستور Selection.Offset(-1, 3).Select, اعداد داخل پرانتز مربوط به چيست
و مورد ديگه اينكه در فايل من در ستون تشويقي ( مثل فايل ضميمه شما) چند نوع تشويقي داريم مثلا نقدي , كتبي , هديه و غيره و ستونهاي كناري ستون تشويقي به ترتيب مقدار مبالغ ,نوع هديه و...است حال من مي خوام اگر نوع تشويقي نقدي خورد مكان نما به ستون مقدار مبالغ برود و منتظر وارد كردن مقدار نقدي شود و اگر در رديف بعدي در ستون نوع تشويقي هديه درج شد مكان نما به ستون مربوطه ( نوع هديه ) رفته و به همين ترتيب يعني در مورد اول به يك ستون بعد از ستون انواع تشويقي برود و در مورد دوم به دو ستون بعد از ستون انواع تشويقي .
با تشكر فراوان از شما

shamsololama
2010/11/16, 08:10
با درود فراوان


اول اينكه شما فرموديد بايد امنيت ماكرو را روي LOW قرار دهيم يعني چي و از كجا مي شود اين امكان را فراهم كرد آيا اين به ستون A كه با مقادير صفر پر شده مربوط ميشود ؟

*** امنیت ماکرو را می توانی از آدرس زیر روی Low قرار دهی ازمنو تولز را انتخاب کن سپس ماکرو را انتخاب کن و بعد سکیوریتی در اینجا منوی باز شده که می توانی از بین آنهاLow را تیک بزنی
و ربطی به ستونها ندارد ولی اگر فایلی که من برایت فرستاده ام و تغییر مکان نما کار می کند یعنی اینکه امنیت ماکرو شما خودش روی Low قرار دارد

Tools - macro - security


.................................................. .........................................

دوم اينكه در دستور Selection.Offset(-1, 3).Select, اعداد داخل پرانتز مربوط به چيست؟

**در اینجا Selection یع .نی سلی یا سلهایی که سلکت و یا همان انتخاب کرده ایم
و در ادامه Offset(-1, 3) w آفست نیز آدرسی است که بر اساس همان سل سلکت شده می دهیم
مثال:
در یک کوچه ایستاده ایم کسی از ما می پرسد کوچه بنفشه کجاست می گوییم یک کوچه بالاتر سه کوچه سمت راست برو در واقع سه تا تا کوچه راست و یک کوچه بالاتر نسبت به کوچه ای که در آن ایستاده ایم آدرس داده ایم در Offset(-1, 3) w نیز شماره -1 و 3 همان سه کوچه سمت راست و یک کوچه بالاتر است است یعنی نسبت به سلی که سلکت کرده ایم سه سل جلوتر و یا همان سمت راست یک سل بالاتر پس در پرانتز عدد اول برای بالا و پائین و عدد دوم برای جلوتر و عقب تر است در واقع مثل محور مختصات که مرکز آن همان سلی است که سلکت کرده ایم

امیدوارم به اینصورت که توضیح داده ام توانسته باشم منظور را برسانم





و مورد ديگه اينكه در فايل من در ستون تشويقي ( مثل فايل ضميمه شما) چند نوع تشويقي داريم مثلا نقدي , كتبي , هديه و غيره و ستونهاي كناري ستون تشويقي به ترتيب مقدار مبالغ ,نوع هديه و...است حال من مي خوام اگر نوع تشويقي نقدي خورد مكان نما به ستون مقدار مبالغ برود و منتظر وارد كردن مقدار نقدي شود و اگر در رديف بعدي در ستون نوع تشويقي هديه درج شد مكان نما به ستون مربوطه ( نوع هديه ) رفته و به همين ترتيب يعني در مورد اول به يك ستون بعد از ستون انواع تشويقي برود و در مورد دوم به دو ستون بعد از ستون انواع تشويقي .؟

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

sh_amar
2010/11/17, 01:35
سلام بر شما
خيلي ممنون متوجه توضيحات شما در مورد كاربرد توابع شدم و در فايل خودم نيز اجرا كردم فقط يك مورد ديگه به نظر من اين كد يك نقص دارد و اينكه تمايزي ميان نوع تشويقي ها قائل نيست و با وارد كردن هر نوع تشويقي مكان نما مثلا به دو ستون جلوتر مي رود در حالي كه بايد طوري اين كد نوشته شود كه اگر نوع تشويقي " نقدي " بود مثلا يك ستون جلو رود و اگر نوع تشويقي "هديه " بود دو ستون جلو رود و بقيه موارد ...
نظر شما در اين مورد چيه ؟

shamsololama
2010/11/20, 07:49
با درود فراوان

در این مورد کد را با هر شرطی که بخواهی میتوانی بنویسی یعنی طوری بنویسی که با توجه به نوع تشویقی به ستون مورد نظر شما برود و این کافی است که یک شرط if به دستور آن اضافه کنی و من طرح کلی آن را نوشته ام که شما با خواسته های خود می توانی آن را تغییر دهی

sh_amar
2010/11/20, 22:35
سلام
بله خودم هم فكر كردم كه نياز به يك IF دارد ولي با توجه به عدم آشنايي بنده با برنامه نويسي در اكسل نتونسته بودم آن را درست بنويسم اميدوارم با مطالعه فايل اكسل آموزشي شما به مهارت دست يابم
باز هم به خاطر گذاشتن وقت و راهنمايي اينجانب ازتون سپاسگزارم .

shamsololama
2010/11/21, 08:02
با درود فراوان

حرکت مکان نما بر اساس نوع تشویقی A , B ,C را در فایل ضمیمه قرار داده ایم می توانید ببینید و اگر در کدنویسی آن مشکل و یا سئوالی داشتید بپرسید


فایل نمونه

[attachment=106]

sh_amar
2010/12/02, 14:30
سلام استاد گرامي
فايل ضميمه شما را ديدم يكي و دو سئوال برايم پيش آمده اول اينكه ستون كمكي (ستون A ) را براي چي درست كرديد ؟
دوم اينكه شما فرموديد در تابع offset عدد اول نشان دهنده تعداد رديف هاي جابه جايي نسبت به سل انتخاب شده ماست و علامت منفي آن حركت به بالا را نشان ميدهد حال آنكه در فايل شما پس از انتخاب ستون 4 (ستون تشويقي ) ما نياز داريم كه يك رديف به پايين بياييم پس چرا شما از 1- در تابع Offset استفاده كرديد ؟
ممنون از كمك شما

shamsololama
2010/12/02, 16:23
با درود فراوان

همانطور که می بینید کدهای خود را در زیر روال
Private Sub Worksheet_Calculate()
نوشته ایم و این به این معنی است که کد ما زمانی اجرا می شود که در صفحه Calculate صورت بگیرد وقتی در ستون تشویقی یک نوع تشویقی را وارد میکنیم در ستون A که برابر با ستون تشویقی قرار داده ایم نیز تغییر صورت میگیرد و برابر با ستون تشویقی می شود یعنی Calculate صورت گرفته در نتیجه کد اجرا شده و مکان نما را به ستون مورد نظر ما خواهد برد


در مورد سئوال دوم شما فرض کنیددر ستون تشویقی در سل D5 یک تشویقی را وارد می کنید یعنی در سطر پنجم حالا بعد از ورود تشویقی شما اینتر می زنید در نتیجه به یک سل پائین تر یعنی D6 می روید یعنی در سطر ششم و حالا نیاز داریم که مکان نما در ستون F و سطر پنج انتقال یابد یعنی سل F5 در صورتی که حالا در سطر ششم هستیم درنتیجه باید یک سطر بالاتر برویم و بعد دوخانه به سمت راست که برای بالا رفتن این یک سطری که گفته شدهد در آفست از 1- استفاده میشودتا مارایک سطر بالاتر یعنی سلی که به تازگی در آن تشویقی وارد کرده ایم ببرد و 2 در آفست هم برای اینکه ما را دو خانه به سمت راست ببرد.

Private Sub Worksheet_Calculate()
On Error Resume Next
این خط شرطی است که می گوید اگر در ستون چهار قرار داشتیم کد را اجرا کن
If Application.Selection.Column = 4 Then

این خط شرطی است که بعد از اینتر که یک خانه پائین آمده ایم میگوید یک سطر بالا (یعنی خانه ای که به تازگی در آن تشویقی وارد کرده ایم) آیا برابر با A هست ؟اگر بود کد را اجرا کن
If Selection.Offset(-1, 0) = "A" Then
این خط در صورتی که شر بالا برقرار بود یک سطر بالابرو (تا در خانه ای قرار بگیریم که به تازگی در آن تشویقی وارد کرده ایم)و 3 ستون به سمت راست
Selection.Offset(-1, 3).Select


و کدهای زیر هم به همین ترتیب

ElseIf Selection.Offset(-1, 0) = "B" Then
Selection.Offset(-1, 4).Select
ElseIf Selection.Offset(-1, 0) = "C" Then
Selection.Offset(-1, 5).Select

Else
MsgBox "نوع تشویقی را صحیح وارد کنید"
End If
End If
End Sub






کد:

Private Sub Worksheet_Calculate()
On Error Resume Next
If Application.Selection.Column = 4 Then
If Selection.Offset(-1, 0) = "A" Then
Selection.Offset(-1, 3).Select
ElseIf Selection.Offset(-1, 0) = "B" Then
Selection.Offset(-1, 4).Select
ElseIf Selection.Offset(-1, 0) = "C" Then
Selection.Offset(-1, 5).Select

Else
MsgBox "نوع تشویقی را صحیح وارد کنید"
End If
End If
End Sub


اگر مشکلی بود تا توضیح بیشتری بدهم

sh_amar
2010/12/02, 20:11
سلام برشما استاد ارجمند
درسته حالا نحوه كاركرد تابع offset را فهميدم و با تغييرات مورد نيازي كه در فايل خودم دادم به آنچه مي خواستم رسيدم بازم از سعه صدر شما در پاسخ دادن به سئوالاتم بيسار متشكرم