PDA

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



phpa80
2010/09/27, 15:51
سلام
میخوام کدی بنویسم که با کلیک بر روی تب شیت 2 یک پیغام نشان بدهد مبنی بر اینکه مایل به آپدیت اطلاعات شیت هستید یا خیر که با انتخاب بله ، کدی که نوشته شده اجرا شود.

mrexcel
2010/09/28, 09:26
براي اين كار بايد در محيط vb بر روي sheet مورد نظر كليك راست كرده سپس در قسمت event حادثه گزينه activate را انتخاب مبكنبم و كد مورد نظر را در قسمت مورد نظر تايپ ميكنيم . از اين به بعد هر گار وارد اين صفحه ميخواهيم بشويم اين كد انجام ميپذيرد

phpa80
2010/09/28, 15:29
براي اين كار بايد در محيط vb بر روي sheet مورد نظر كليك راست كرده سپس در قسمت event حادثه گزينه activate را انتخاب مبكنبم و كد مورد نظر را در قسمت مورد نظر تايپ ميكنيم . از اين به بعد هر گار وارد اين صفحه ميخواهيم بشويم اين كد انجام ميپذيرد


ممنون
یه سوال دیگه هم دارم .
آیا با DotNet نمیشه تو آفیس کار کرد ؟ مثلا نمیشه با C# توسعه داد و فایل macroEnabled ایجاد کرد ؟
منظورم اینه که محیط توسعه به جای VBA ، دات نت باشه .

phpa80
2010/09/29, 16:11
ببخشید کسی نیست راهنمایی کنه؟
علاوه بر سوال فوق میخواستم بدونم دستور pastespecial در VBA چی هست بطوری که مقادیر محاسبه شده(value) رو از شیت 1 در در شیت 2 کپی کنه ؟

mrexcel
2010/09/30, 08:17
ضمن تشكر از شما دوست عزيز خواهش ميكنم سئوالات را دل همديگر ننويسيد براي اين كه بهتر بتوان ان را پاسخ داد و جستجو نمود
براي پاسخ به اين سئوال هر دو استاد مسئول تالار تخصص دارند كه اميدوارم راهنمائي بفرمايند

phpa80
2010/09/30, 12:20
منتظرم
کسی هست اون دو تا پست قبلیم رو جواب بده ؟

shamsololama
2010/10/01, 09:52
با درود فراوان
برای اینکه سل یا سلهایی رو کپی کنی و در همان شیت یا شیت دیگری پیست اسپیشال ولیو کنی می شه از کد زیر استفاده کنید
در این کد همان طور که میدانید Selection.Copy برای کپی کردن سلهایی که انتخاب کرده ایم و Range("F9").Select برای انتخاب مقصد که می خواهیم کپی کنیم که می تواند در شیت دیگری هم باشد که کافی است Sheet2.select قبل از آن بنویسید تا ابتدا شیت دو را انتخاب کند
و کد آخر هم همانطور که پیداست برای کپی کردن PasteSpecial Paste که برابر با Value است

روش اول
Selection.Copy
Range("F9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
در روشی دیگر می توانید بدون اینکه از کپی پیست استفاده کنید آن را انجام دهید و برای این کار سلول مقصد را برابر با سلولی که می خواهد انتقال داده شود قرار میدهیم
مثلا اگر می خواهیم سلول A1 را از شیت 1 کپی کنیم و در سل B1 شیت دو پیست کنیم به طریق زیر می نویسیم که در این حالت بطور پیش فرض مقدار ولیو انتقال پیدا می کند

Sheet2.Range("b1") = Sheet1.Range("a1")

در مورد اینکه دات نت را در آفیس استفاده کنیم نمیشود ولی برعکس آن شدنی است یعنی اکسل را در دات نت استفاده کنید و در همانجا ارتباط بین آنها را به صورتی که میخواهیم برقرار کنیم

phpa80
2010/10/03, 15:05
ممنون درست شد.
حالا میخوام با کلیک بر روی شیت (Event اکتیو شدن شیت) یک ماکروی دیگر همزمان با فعال شدن شیت اجرا شود.
کد اجرا شدن ماکرو در VBA به چه صورت هست ؟

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

برای اجرای ماکروی مورد نظر به وسیله کد و یا یک ماکروی دیگر از کدی زیر استفاده می شود

Application.Run "Macro3"

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

Application.Run "book1.xls!Macro3"

و اگر فایل باز نباشد آدرس نیز به آن اضافه می کنیم تا دچا اشکال نشود

phpa80
2010/10/03, 22:43
ممنون مشکل قبلی هم با مساعدت شما حل شد ولی یک مشکل دیگه اضافه شد !
چون اون ماکرویی که میخوام با کلیک کردن روی شیت اجرا بشه داره از شیت دیگری کپی میکنه به همین خاطر با کلیک بر روی شیت وقتی اون Event اجرا میشه روی دور باطل! میفته و دائما بین دوشیت سوئیچ میکنه و در نتیجه آخر سر ارور میده .
این کدی هست که در شیت PrmMembers نوشته شده :


Sub CopyandSort()


Sheets("PrmMembers").Select
Range("BN4:BP273").Select
Selection.Copy
Sheets("Result").Select
Range("B2:D271").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


End Sub


اینم کدی هست که در Event شیت Result نوشتم تا با کلیک کردن بر روی آن ، کدهای ماکروی فوق اجرا بشه ولی با کلیک بر شیت result چون ماکروی فوق اجرا میشه ، توی دور نامتناهی میفته.
چکار کنم ؟


Private Sub Worksheet_Activate()
Application.Run "CopyandSort"
End Sub

phpa80
2010/10/04, 00:48
درست شد. یک فرم طراحی کردم.
ممنون

shamsololama
2010/10/04, 11:30
ممنون مشکل قبلی هم با مساعدت شما حل شد ولی یک مشکل دیگه اضافه شد !
چون اون ماکرویی که میخوام با کلیک کردن روی شیت اجرا بشه داره از شیت دیگری کپی میکنه به همین خاطر با کلیک بر روی شیت وقتی اون Event اجرا میشه روی دور باطل! میفته و دائما بین دوشیت سوئیچ میکنه و در نتیجه آخر سر ارور میده .
این کدی هست که در شیت PrmMembers نوشته شده :


Sub CopyandSort()


Sheets("PrmMembers").Select
Range("BN4:BP273").Select
Selection.Copy
Sheets("Result").Select
Range("B2:D271").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


End Sub


اینم کدی هست که در Event شیت Result نوشتم تا با کلیک کردن بر روی آن ، کدهای ماکروی فوق اجرا بشه ولی با کلیک بر شیت result چون ماکروی فوق اجرا میشه ، توی دور نامتناهی میفته.
چکار کنم ؟


Private Sub Worksheet_Activate()
Application.Run "CopyandSort"
End Sub



با درود فراوان

در کد بالا که فکر میکنم خود شما هم متوجه شده اید و رفع مشکل کرده اید دلیل دور باطل

از Sheets("Result").Select است که در ماکرو قرار داده اید و هر زمان که ماکرو به Sheets("Result").Select می رسد باعث می شود که ماکرو یک بار دیگر از اول اجرا شود (به دلیل اینکه در EVENT شیت خود زیر روال اکتیو این دستور را نوشته اید) و با اجرا شدن دوباره این ماکر دوباره به Sheets("Result").Select خواهیم رسید که این دورباطل را ایجاد کرده است و به پایان ماکر نخواهیم رسید

همانطور که گفته اید مشکل را حل کرده ایم اما نمی دانم از چه راهی

معمولا برای چنین کار های بهتر این است که بدون رفتن به شیت های مبدا اطلاعات را به شیت مقصد انتقال دهیم تا فقط شاهد ورود اطلاعات باشیم و بین شیت ها جابجایی صورت نگیرد