راهنمایتولید کننده فایل DLL برای Xlsm Excel
سرمایه فکری خود را با DLL حفظ کنید.

فهـرست مطالب:
علت تولید این نرمافزار چه بود؟
برای چه کاری از این نرمافزار استفاده کنم؟
نکات قابل توجه هنگام استفاده از نرمافزار.
سرشاخههای پنل سمت چپ:
DLL Properties
Generate All
Open DLL Path
Commands Manual
چگونه شروع کنم؟
مثالهایی برای ارائه تجربههای مفید.
منوهای نرمافزار
منوهای نرمافزار
زیرمنوی New از منوی Project
تولید هر DLL، تولید یک پروژه است که در آن پروژه باید فرمولهای خود را مهندسی کنید.
هر پروژه با نامی مشخص میشود، و ممکن است فایلهای زیادی برای هر پروژه ایجاد شود، پس از فعالسازی نرمافزار میتوانید به تعداد نامحدود پروژه جدید ایجاد کنید. در این بخش نام لاتین پروژه خود را وارد کنید، دقت کنید نام لاتین پروژه بسیار اهمیت دارد چرا که اساس تولید فایلهای DLL، و کدهای برنامهنویسی بر اساس نام پروژه پیش خواهد رفت.
زیرمنوی Open از منوی Project
این گزینه از منوی Project، باعث باز شده پنجرهای میشود که در آن میتوانید پروژههایی که قبلا روی آنها کار میکردهاید را باز کنید.
در همین پنجره میتوانید از پروژههای قبلی خود نسخه BackUp تهیه کنید و یا فایلهای BackUp خود را بازیابی(Restore) کنید.
برای بازکردن یک پروژه روی نام پروژه که در لیست Projects دیده میشود کلیک کنید و سپس روی دکمه Open کلیک کنید.
زیرمنوی Samples از منوی Project
در این بخش پروژههایی که از ساده به سخت طراحی شدهاند به عنوان نمونه در معرض دید شما قرار گرفتهاند که میتوانید با مشاهده و مطالعه آنها آمادگی لازم برای ساخت پروژههای خود را بدست آورید.
با انتخاب هر پروژۀ نمونه، فایلهای پروژه در اختیار شما قرار میگیرد که میتوانید آنها را در پنل سمت چپ نرمافزار مشاهده کنید، علاوه بر آن فایل Excel نمونه و فایل DLL ی که توسط نرمافزار قبلا تولید شده است برای بررسی شما در اختیارتان قرار میگیرد.
توضیحات مرتبط با هر پروژه در بخش چگونه شروع کنم؟ همین راهنما مفصل توضیح داده شده است.
علت تولید این نرمافزار چه بود؟
برگشت به فهرست
DLL دور فرمول شما دیوار میکشد و به در ورودی آن قفل میزند، و کلید را هم پیش خودش نگه میدارد 🔐
وقتی پای حفاظت جدی از منطق و فرمولها وسط باشد، Excel به تنهایی کم میآورد. Excel برای محاسبه ساخته شده، نه برای مخفیکاری واقعی.حتی اگرسلولها را Hide Formula کنید، Sheet را Protect کنید. فایل را Password بگذارید، باز هم فرمولها در حافظه هستند، با ابزارهای جانبی، VBA، Power Query، یا حتی کپی غیرمستقیم قابل استخراجاند، الگوریتم شما عملا داخل فایل پخش شده است. پس بنابراین حفاظت Excel بیشتر «بازدارنده» است تا «امن»؛ وقتی فرمولها را به DLL منتقل میکنید، منطق از دید Excel خارج میشود، و چون در DLL ، کد کامپایل شده است خواندن و مهندسی معکوسش سختتر است، در حالی که فرمول Excel مثل نوشته روی شیشه است، فقط پرده جلویش کشیدهاید.
آیا واقعا «مجبوریم»؟
نه. اگر، فرمولها سادهاند، حساسیت تجاری ندارند، مخاطب کاربر عادی است، همان Protect Sheet کافیست. اما اگر، فرمولها سرمایه فکری هستند، محصول فروشی یا سازمانی است، کاربر ممکن است کنجکاو یا حرفهای باشد، آن وقت DLL انتخاب منطقی است، نه وسواس.
برکسی پوشیده نیست که تولید فایل DLL نیاز به آشنایی به زبانهای برنامهنویسی پیشرفته مانند ++C و #C دارد، از طرفی فقط برنامهنویسی DLL کافی نیست، برقراری ارتباط با فرمولهای موجود در فایل DLL نیاز به کدنویسی در بخش VBA دارد، و این موضوع وقتی سختتر میشود که با شرایطی روبرو میشویم که میفهمیم نه تنها ارتباطات با فایلهای DLL ، و 32 بیتی و 64 بیتی در Officeهای 32 بیتی و 64 بیتی از روش یکسانی پیروی نمیکنند، بلکه مهمتر از همه اینکه ارسال /دریافت اطلاعات به /از فایلهای DLL، متناسب با نوع داده به لحاظ اینکه عددی باشد یا رشتهای ( Number/String)، متفاوت است. این موارد باعث شده است که حتی تولیدکنندگان فایلهای Excel اگر بدانند که با استفاده از DLL میتوانند فرمولهای خود را حفاظت کنند، با دیواری بلند روبرو شوند که عبور از آن بسیار سخت است. اما وقتی با دیواری چنین بلند روبرو میشوم، و از عبور از آن منصرف میشویم، و میرویم که راه دیگری پیدا کنیم، و به پشت سرمان نگاه میکنیم، تا به دیوار نگاهی بیاندازیم، مفهوم دیگری هم توجه ما را به خود جلب میکند! و آن مفهوم این است که این دیوار حتی کوتاهتر از دیواری است که قرار است هک کننده فرمولهای ما از آن عبور کند!
برای چه کاری از این نرمافزار استفاده کنم؟
برگشت به فهرست
این نرمافزار انتخابی ایدهآل برای توسعهدهندگانی است که به دنبال امنیت بالا، عملکرد بهتر و مدیریت حرفهای توابع در پروژههای VBA هستند.
این نرمافزار یک راهکار تخصصی برای تبدیل فرمولها و توابع محاسباتی به فایل DLL و ایجاد خودکار کدهای VBA جهت ارتباط با DLL میباشد. هدف اصلی این ابزار، افزایش امنیت، بهبود عملکرد و سادهسازی توسعه نرمافزارهای مبتنی بر VBA نظیر Excel و Access است. کاربردها و مزایای نرمافزار عبارت است از:
●حفاظت از فرمولها و منطق محاسباتی - با تبدیل توابع و فرمولهای حساس به DLL، به این ترتیب منطق برنامه از دسترسی مستقیم کاربران محافظت میشود، از مشاهده، ویرایش یا کپی کدها جلوگیری میگردد.
امنیت نرمافزار بهطور چشمگیری افزایش مییابد.
● تولید خودکار کدهای VBA
نرمافزار بهصورت کاملاً خودکار، توابع DLL را شناسایی میکند، کدهای لازم برای فراخوانی آنها در VBA را تولید مینماید، ماژولهای VBA آماده استفاده ایجاد میکند، این قابلیت، نیاز به دانش پیچیده API و تعریف دستی توابع را برطرف میسازد.
● مدیریت ساختیافته توابع
امکان تعریف و مدیریت شامل:
توابع عمومی(Global Functions) جهت استفاده مستقیم در VBA
توابع داخلی (Internal Functions) شامل توابع سیستمیو امنیتی مانند:
دریافت Serial Number پردازندهCPU
شناسایی و شمارشهارد دیسک و USB
توابع رمزنگاری (MD5)
این ساختار، توسعه و نگهداری پروژه را ساده و حرفهای میکند.
●پیادهسازی قفل سختافزاری و لایسنس نرمافزار را امکانپذیر میکند، با استفاده از اطلاعات سختافزاری سیستم، امکان ایجاد قفل نرمافزاری فراهم میشود و اجرای برنامه به سیستمهای مشخص محدود میگردد، از کپی غیرمجاز فایلهای Excel و Access جلوگیری میشود.
● افزایش سرعت و کیفیت توسعه ایدهای شما با این نرمافزار توسط ابزاهای داخلی آن مانند: DLL Generator، VBA Module Generator، VBA Tester Generator، فرآیند توسعه را از یک کار زمانبر و پیچیده، به عملیاتی سریع و قابل اطمینان تبدیل میکند.
به مثال دیواری که در بخش علت تولید این نرمافزار چه بود؟ نگاهی کنید تا در ادامه همان مثال بگوییم که این نرمافزار نردهبانی عالی برای عبور از دیوار بلند را برایمان فراهم میکند، نردبانی که پس از عبور از دیوار آنرا با خود میبریم تا هک کننده فرمولهایمان نه تنها نتواند از دیوار بلند عبور کند، بلکه با دیواری بلندتر روبرو خواهد بود و آن هک DLL است. کاری که هر چند ممکن است اما به تخصصی بسیار زیاد حتی بالاتر از تخصص یک برنامهنویس زبانهای پیشرفته مانند ++C و # C دارد.
نکات قابل توجه هنگام استفاده از نرمافزار
برگشت به فهرست
هنگام کار با فایلهای دارای ماکرو (با پسوند xlsm) در Microsoft Excel، توجه به نکات امنیتی و تنظیمات سیستمیاهمیت زیادی دارد. این فایلها میتوانند شامل کدهای اجرایی (ماکرو) باشند که هم برای خودکارسازی وظایف مفیدند و هم در صورت دریافت از منابع نامعتبر، میتوانند خطرناک باشند. در ادامه نکات مربوط به امنیت و بهرهبرداری از این فایلها را بر اساس تصاویر ارائهشده دستهبندی میکنیم.
1- نکات مرتبط با حفظ امنیت فایلها که توسط Windows انجام میشود.
2- نکات مرتبط با حفظ امنیت فایلها که توسط Excel انجام میشود.
3- نکات مرتبط با روشهای بهرهبرداری از اطلاعات، که توسط Excel با توجه به تنظیمات Windows لحاظ میشود.
نکات مرتبط با حفظ امنیت فایلها که توسط Windows انجام میشود
رفع انسداد فایلهای دریافتی از کامپیوتر دیگر
تصویر زیر نشان میدهد که فایل از کامپیوتر دیگری آمده و ویندوز برای محافظت، آن را مسدود کرده است. وقتی فایلی را در رایانه خودتان درست میکنید و به رایانه مشتری انتقال میدهید، این موضوع کاملا طبیعی است.برای رفع این محدودیت:
روی فایل راستکلیک کرده و Properties را انتخاب کنید.
- در تب General، اگر پیام امنیتی با عبارت "This file came from another computer..." وجود دارد، گزینه Unblock (رفع انسداد) را تیک بزنید و OK کنید.
- ویژگیهای فقط خواندنی (Read-only) و پنهان (Hidden)
فایل ممکن است به صورت فقط خواندنی یا پنهان علامتگذاری شده باشد. این ویژگیها در همان تب Properties قابل مشاهده و تغییر هستند. اگر فایل فقط خواندنی باشد، تغییرات ذخیره نخواهند شد؛ برای ذخیره باید با نام دیگری ذخیره کنید یا تیک Read-only را بردارید.
نکات مرتبط با حفظ امنیت فایلها که توسط Excel انجام میشود
- تنظیمات مرکز امنیت (Trust Center)
برگشت به فهرست
در تصاویر زیر، گزینههای امنیتی اکسل نمایش داده شده است. برای دسترسی به این تنظیمات:
- از مسیر File > Options > Trust Center > Trust Center Settings وارد شوید.
تنظیمات ActiveX
برگشت به فهرست
تصویر ActiveX Settings نشان میدهد که گزینه "Enable all controls without restrictions" فعال شده است که توصیه نمیشود؛ زیرا اجرای همه کنترلها بدون اخطار میتواند امنیت را به خطر بیندازد. بهتر است گزینه "Prompt me before enabling all controls" یا "Disable all controls without notification" انتخاب شود.
تنظیمات ماکرو (Macro Settings)
برگشت به فهرست
در تصویر Macro Settings، گزینه "Disable all macros with notification" (پیشفرض) انتخاب مناسبی است: ماکروها غیرفعال میشوند اما اکسل با نوار اخطار زرد رنگ به شما اطلاع میدهد. اگر به ماکروها اعتماد دارید، میتوانید آنها را فعال کنید. گزینه "Enable all macros" خطرناک است. همچنین تیک "Trust access to the VBA project object model" در تصویر فعال است؛ این گزینه به برنامهها اجازه میدهد به مدل شیء VBA دسترسی داشته باشند و در صورت مخرب بودن، میتوانند آسیب بیشتری وارد کنند.
هشدار امنیتی در اکسل (نوار زرد)
برگشت به فهرست
تصویر `yellowbar.jpg` نوار امنیتی را نشان میدهد: "Security Warning Application add-ins have been disabled. Enable Content". این هشدار زمانی ظاهر میشود که فایل حاوی ماکرو یا افزونه باشد و بر اساس تنظیمات Trust Center غیرفعال شده باشد. با کلیک Enable Content میتوانید محتوای فعال (ماکروها) را برای این جلسه اجرا کنید.
پیغام غیرفعال بودن ماکروها
برگشت به فهرست
تصویر `macodisabled.jpg` پیغام "The macros in this project are disabled" را نشان میدهد که هنگام باز کردن فایل xlsm با تنظیمات امنیتی سختگیرانه ظاهر میشود. برای فعالسازی باید از نوار زرد یا تغییر تنظیمات Trust Center اقدام کنید.
نکات مرتبط با شیوه و روشهای بهرهبرداری از اطلاعات، که توسط Excel با توجه به تنظیمات Windows لحاظ میشود
برگشت به فهرست
- تأثیر تنظیمات منطقهای ویندوز (Region) بر نمایش دادهها در اکسل
برگشت به فهرست
تصاویر زیر به تنظیمات منطقهای ویندوز اشاره دارند. اکسل برای نمایش اعداد، تاریخ و زمان از این تنظیمات پیروی میکند.
این بخش به خصوص برای تعیین جدا کننده اعداد اعشاری و جدا کننده مقادیر در فرمولها مورد توجه هستند، برای انجام این تغییرات پس از ورود به Region از طریق Control Panel ویندوز روی دکمه پایین پنجره که در تصویر زیر نیز نشان داده شده کلیک کنید.
- در تصویر بالا تنظیمات فارسی (Persian) انتخاب شده که باعث میشود تاریخ به صورت شمسی و روزهای هفته با نام فارسی نمایش داده شوند.
- در تصویر زیر نمونهای از قالببندی اعداد با جداکننده هزارگان و علامت اعشار نشان داده شده است، که ممکن است باعث اشکالاتی شود. به خصوص ؛
(نقطه ویرگول)، به عنوان جدا کننده پارامترها یا آرگومانهای فرمول، که حتی پیدا کردن آن در صفحه کلید بسیار سخت است، و بهتر است آنرا با ویرگول یا نقطه ویرگول(
;
) تغییر دهید.
- در تصویر زیر علامت اعشار به صورت نقطه (.) و جداکننده هزارگان به صورت ویرگول (،) دیده میشود (مثلاً 123,456,789.00).
این تفاوتها بر نحوه وارد کردن دادهها و تفسیر آنها در فرمولها تأثیر میگذارد. مثلاً اگر سیستم شما از نقطه به عنوان اعشار استفاده کند، وارد کردن عدد با ویرگول ممکن است به عنوان متن تلقی شود.
اهمیت تطابق تنظیمات منطقهای با نیازهای کاربر
برگشت به فهرست
برای جلوگیری از بروز خطا در محاسبات، اطمینان حاصل کنید که تنظیمات Decimal symbol و Digit grouping symbol با فرمت مورد نظر شما هماهنگ است. میتوانید این موارد را از طریق Control Panel > Region > Additional settings تغییر دهید.
فهرست جداکننده (List separator)
برگشت به فهرست
در `Region2.jpg` مقدار List separator برابر با `;` (سمیکالن) تنظیم شده است. این علامت در اکسل برای جدا کردن آرگومانها در فرمولها و هنگام ذخیره فایلهای CSV استفاده میشود. اگر منطقه شما روی کشوری با جداکننده لیست متفاوت (مثلاً ویرگول) تنظیم باشد، ممکن است در وارد کردن فرمولها یا باز کردن فایلهای CSV دچار مشکل شوید.
با رعایت این نکات میتوانید امنیت سیستم خود را حفظ کرده و از فایلهای xlsm به بهترین شکل استفاده کنید.
چگونه شروع کنم؟
برگشت به فهرست
قبل از شروع بهتر است نکات قابل توجه هنگام استفاده از نرمافزار، را مطالعه کنید.
برای اینکه بتوانید راحتتر با نرمافزار DLLGenerator ارتباط برقرار کنید، 20 تمرین برای شما در اینجا برنامهریزی کردهایم:
نام فارسی تمرین: ساده
نام لاتین تمرین: Simple
از منوی Project، گزینه Samples و اولین گزینه Simple - شماره 01 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 01-Simple
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 01-Sample.xlsm |
| DLL فایل 32 بیتی برای Officeهای 32بیتی | 01-Simple32.dll |
| DLL فایل 64 بیتی برای Officeهای 64بیتی | 01-Simple64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در تنها یک سلول از این فایل این فرمول را مشاهده میکنید:
=F_myfunction_Tester()
که نتیجه آن چنین است:
This text back from Dll.
این عبارت(«.This text back from Dll») از DLL برگشته است.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(01) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («.This text back from Dll»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester() As String
این همان کدی است که در یکی از سلولهای فایل Excel به صورت زیر استفاده شده است:
=F_myfunction_Tester()
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن: myfunction | Function Name: myfunction |
| آرگومانها و پارامترها:هیچ چیز | Argumans of Function: |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای : | "This text back from Dll." |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید متنی را که از DLL باز میگردد را تغییر دهید، مثلا نام خودتان چطور است؟
پایان تمرین شماره 1
نام فارسی تمرین: ارسال شماره و دریافت شماره
نام لاتین تمرین: Send number and receive number
از منوی Project، گزینه Samples و اولین گزینه Send number and receive number- شماره 02 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 02-Send number and receive number
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 02-Sample.xlsm |
| DLL فایل 32 بیتی برای Officeهای 32بیتی | 02-Send number and receive number32.dll |
| DLL فایل 64 بیتی برای Officeهای 64بیتی | 02-Send number and receive number64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در دو سلول دو مقدار 2010 و 2024 و در دو سلول دیگر دو فرمول که هر یک به سلول سمت چپ خود اشاره میکند، را مشاهده میکنید:
=F_myfunction_Tester(A2)
که نتیجه آنها همان عددی است که در سلول مجاور دیده میشود.
این موضوع شاید به لحاظ عملی بی معنی باشد اما به لحاظ به کارگیری DLL برای برنامهنویس بسیار مهم است، چرا که مقادیر ارسال شده به DLL و مقادیر بازگشتی از DLL در اینجا بررسی میشود.
همانطور که قبلا نیز به آن اشاره شد، مقادیر ارسال شده میتواند عددی و رشته ای
باشد و مقادیر برگشتی نیز میتواند عددی و رشتهای باشد در این تمرین مقادیر
ارسال شده به DLL عددی و مقادیر برگشتی نیز عددی هستند، مدلهای دیگری از ارسال
و دریافت مقادیر به DLL و از DLL در سایر تمرینها موجود هستند. مانند : ارسال
دو عدد(شماره) و دریافت رشته، ارسال دو رشته و دریافت رشته، ارسال عدد(شماره) و
رشته و دریافت رشته، ارسال عدد(شماره) و رشته و دریافت عدد(شماره).
کلیدAlt
+ F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(02) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («32777»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester(a1 As Double) As Double
این همان کدی است که در یکی از سلولهای فایل Excel به صورت زیر استفاده شده است:
=F_myfunction_Tester()
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری | Function Scope: Global |
| نوع فانکشن: عددی | Function Type: Number |
نام فانکشن: myfunction | Function Name: myfunction |
| آرگومانها و پارامترها:a | Argumans of Function: a number |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار عددی : | a |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید عددی را که از DLL باز میگردد را تغییر دهید، مثلا 10+a چطور است؟
پایان تمرین شماره 2
نام فارسی تمرین: ارسال دو شماره و دریافت شماره
نام لاتین تمرین: Send two numbers and receive number
از منوی Project، گزینه Samples و اولین گزینه Send two numbers and receive number- شماره 03 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 03-Send two numbers and receive number
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 03-Sample.xlsm |
| DLL فایل 32 بیتی | 03-Send two numbers and receive number32.dll |
| DLL فایل 64 بیتی | 03-Send two numbers and receive number64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در دو سلول دو مقدار 32 و 64 و در سلول دیگر یک فرمول که به دو سلول سمت چپ خود اشاره میکند، را مشاهده میکنید:
=F_myfunction_Tester(A2;B2)
که نتیجه آن مجموع همان اعدادی است که در سلولهای مجاور دیده میشوند.
این موضوع شاید به لحاظ عملی بی معنی باشد اما به لحاظ به کارگیری DLL برای برنامهنویس بسیار مهم است، چرا که مقادیر ارسال شده به DLL و مقادیر بازگشتی از DLL در اینجا بررسی میشود.
همانطور که قبلا نیز به آن اشاره شد، مقادیر ارسال شده میتواند عددی و رشته ای
باشد و مقادیر برگشتی نیز میتواند عددی و رشتهای باشد در این تمرین مقادیر
ارسال شده به DLL عددی و مقادیر برگشتی نیز عددی هستند، مدلهای دیگری از ارسال
و دریافت مقادیر به DLL و از DLL در سایر تمرینها موجود هستند. مانند : ارسال
دو عدد(شماره) و دریافت رشته، ارسال دو رشته و دریافت رشته، ارسال عدد(شماره) و
رشته و دریافت رشته، ارسال عدد(شماره) و رشته و دریافت عدد(شماره).
کلیدAlt
+ F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(03) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («65554»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester(a1 As Double, b2 As Double) As Double
این همان کدی است که در یکی از سلولهای فایل Excel به صورت زیر استفاده شده است:
=F_myfunction_Tester(A2;B2)
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری | Function Scope: Global |
| نوع فانکشن: عددی | Function Type: Number |
نام فانکشن: myfunction | Function Name: myfunction |
| آرگومانها و پارامترها:a, b هر دو از نوع عددی | Argumans of Function: a number,b number |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار عددی | a+b |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید عددی را که از DLL باز میگردد را تغییر دهید، مثلا 10+a چطور است؟
پایان تمرین شماره 3
نام فارسی تمرین: ارسال دو شماره و دریافت رشته
نام لاتین تمرین: Send two numbers and receive string
از منوی Project، گزینه Samples و اولین گزینه Send two numbers and receive string- شماره 04 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 04-Send two numbers and receive string
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 04-Sample.xlsm |
| DLL فایل 32 بیتی | 04-Send two numbers and receive string32.dll |
| DLL فایل 64 بیتی | 04-Send two numbers and receive string64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در دو سلول دو مقدار 10 و 30 و در سلول دیگر یک فرمول که به دو سلول سمت چپ خود اشاره میکند، را مشاهده میکنید:
=F_myfunction_Tester(A5;B5)
که نتیجه آن همان اعدادی است که در سلولهای مجاور دیده میشوند، که با خط تیره( - ) از هم جدا شدهاند.
این موضوع شاید به لحاظ عملی بی معنی باشد اما به لحاظ به کارگیری DLL برای برنامهنویس بسیار مهم است، چرا که مقادیر ارسال شده به DLL و مقادیر بازگشتی از DLL در اینجا بررسی میشود.
همانطور که
قبلا نیز به آن اشاره شد، مقادیر ارسال شده میتواند عددی و رشته ای باشد و
مقادیر برگشتی نیز میتواند عددی و رشتهای باشد در این تمرین مقادیر ارسال شده
به DLL عددی و مقادیر برگشتی نیز عددی هستند، مدلهای دیگری از ارسال و دریافت
مقادیر به DLL و از DLL در سایر تمرینها موجود هستند. مانند : ارسال دو رشته و
دریافت رشته، ارسال عدد(شماره) و رشته و دریافت رشته، ارسال عدد(شماره) و رشته
و دریافت عدد(شماره).
کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA
وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(04) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («32777 - 32777»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester(a1 As Double, b2 As Double) As Double
این همان کدی است که در یکی از سلولهای فایل Excel به صورت زیر استفاده شده است:
=F_myfunction_Tester(A5;B5)
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن: myfunction | Function Name: myfunction |
| آرگومانها و پارامترها:a, b هر دو از نوع عددی | Argumans of Function: a number,b number |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای | str(a) + " - " + str(b) |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، رشتهای را که از DLL باز میگردد را تغییر دهید، مثال زیر چطور است؟
str(a+1000) + " >>> " + str(b)
پایان تمرین شماره 4
نام فارسی تمرین: ارسال دو رشته و دریافت رشته
نام لاتین تمرین: Send two strings and receive string
از منوی Project، گزینه Samples و اولین گزینه Send two strings and receive string- شماره 05 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 05-Send two strings and receive string
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 05-Sample.xlsm |
| DLL فایل 32 بیتی | 05-Send two strings and receive string32.dll |
| DLL فایل 64 بیتی | 05-Send two strings and receive string64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در دو سلول دو مقدار mr و akbari و در سلول دیگر یک فرمول که به دو سلول سمت چپ خود اشاره میکند، را مشاهده میکنید:
=F_myfunction_Tester(A5;B5)
که نتیجه آن نمایش همان عباراتی است که در سلولهای مجاور دیده میشوند، و با خط تیره ( - )، از هم جدا شدهاند.
این موضوع شاید به لحاظ عملی بی معنی باشد اما به لحاظ به کارگیری DLL برای برنامهنویس بسیار مهم است، چرا که مقادیر ارسال شده به DLL و مقادیر بازگشتی از DLL در اینجا بررسی میشود.
همانطور که قبلا نیز به آن اشاره شد، مقادیر ارسال شده میتواند عددی و رشته ای
باشد و مقادیر برگشتی نیز میتواند عددی و رشتهای باشد در این تمرین مقادیر
ارسال شده به DLL عددی و مقادیر برگشتی نیز عددی هستند، مدلهای دیگری از ارسال
و دریافت مقادیر به DLL و از DLL در سایر تمرینها موجود هستند. مانند : ارسال
دو رشته و دریافت رشته، ارسال عدد(شماره) و رشته و دریافت رشته، ارسال
عدد(شماره) و رشته و دریافت عدد(شماره).
کلیدAlt + F11 را بزنید تا به بخش
برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(05) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («b2- a1»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester(a1 As String, b2 As String) As String
این همان کدی است که در یکی از سلولهای فایل Excel به صورت زیر استفاده شده است:
=F_myfunction_Tester(A5;B5)
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن: myfunction | Function Name: myfunction |
| آرگومانها و پارامترها:a, b هر دو از نوع رشتهای | Argumans of Function: a number,b number |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای | a+" - "+b |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، رشتهای را که از DLL باز میگردد را تغییر دهید، مثال زیر چطور است؟
a+" , "+b +" welcome."
پایان تمرین شماره 5
نام فارسی تمرین: ارسال شماره و رشته و دریافت رشته
نام لاتین تمرین: Send number and string and receive string
از منوی Project، گزینه Samples و اولین گزینه Send number and string and receive string- شماره 06 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 06-Send number and string and receive string
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 06-Sample.xlsm |
| DLL فایل 32 بیتی | 06-Send number and string and receive string32.dll |
| DLL فایل 64 بیتی | 06-Send number and string and receive string64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در دو سلول دو مقدار 30 و Bit و در سلول دیگر یک فرمول که به دو سلول سمت چپ خود اشاره میکند، را مشاهده میکنید:
=F_myfunction_Tester(A5;B5)
که نتیجه آن نمایش همان عباراتی است که در سلولهای مجاور دیده میشوند، و با خط تیره ( - )، از هم جدا شدهاند؛ مهم است که مقدار اول از نوع عددی است و به آن 2 واحد اضافه شده است و مقدار دوم از نوع رشتهای است.
این موضوع شاید به لحاظ عملی خیلی جالب نباشد و بی معنی به نظر برسد اما به لحاظ به کارگیری DLL برای برنامهنویس بسیار مهم است، چرا که مقادیر ارسال شده به DLL و مقادیر بازگشتی از DLL در اینجا بررسی میشود.
همانطور که قبلا نیز به آن اشاره شد، مقادیر ارسال شده میتواند عددی و رشته ای
باشد و مقادیر برگشتی نیز میتواند عددی و رشتهای باشد در این تمرین مقادیر
ارسال شده به DLL عددی و مقادیر برگشتی نیز عددی هستند، مدلهای دیگری از ارسال
و دریافت مقادیر به DLL و از DLL در سایر تمرینها موجود هستند. مانند : ارسال
دو رشته و دریافت رشته، ارسال عدد(شماره) و رشته و دریافت رشته، ارسال
عدد(شماره) و رشته و دریافت عدد(شماره).
کلیدAlt + F11 را بزنید تا به بخش
برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(06) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («32777 - b2»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester(a1 As Double, b2 As String) As String
این همان کدی است که در یکی از سلولهای فایل Excel به صورت زیر استفاده شده است:
=F_myfunction_Tester(A5;B5)
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن: myfunction | Function Name: myfunction |
| آرگومانها و پارامترها:aعددی و b رشتهای | Argumans of Function: a number,b number |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای | a+" - "+b |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، رشتهای را که از DLL باز میگردد را تغییر دهید.
پایان تمرین شماره 6
نام فارسی تمرین: ارسال شماره و رشته و دریافت شماره
نام لاتین تمرین: Send number and string and receive number
از منوی Project، گزینه Samples و اولین گزینه Send number and string and receive numberشماره 07 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator -07-Send number and string and receive number
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 07Sample.xlsm |
| DLL فایل 32 بیتی | 07-Send number and string and receive number32.dll |
| DLL فایل 64 بیتی | 07-Send number and string and receive number64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در دو سلول دو مقدار 30و 2bو در سلول دیگر یک فرمول که به دو سلول سمت چپ خود اشاره میکند، را مشاهده میکنید:
=F_myfunction_Tester(A5;B5)
که نتیجه آن 32 است، یعنی 30 با مقدار عددی 2b جمع شده است.
این موضوع شاید به لحاظ عملی خیلی جالب نباشد و بی معنی به نظر برسد اما به لحاظ به کارگیری DLL برای برنامهنویس بسیار مهم است، چرا که مقادیر ارسال شده به DLL و مقادیر بازگشتی از DLL در اینجا بررسی میشود.
همانطور که قبلا نیز به آن اشاره شد، مقادیر ارسال شده میتواند عددی و رشته ای
باشد و مقادیر برگشتی نیز میتواند عددی و رشتهای باشد در این تمرین مقادیر
ارسال شده به DLL عددی و مقادیر برگشتی نیز عددی هستند، مدلهای دیگری از ارسال
و دریافت مقادیر به DLL و از DLL در سایر تمرینها موجود هستند. مانند : ارسال
دو رشته و دریافت رشته، ارسال عدد(شماره) و رشته و دریافت رشته، ارسال
عدد(شماره) و رشته و دریافت عدد(شماره).
کلیدAlt + F11 را بزنید تا به بخش
برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(07) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («*********************»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester(a1 As Double, b2 As String) As Double
این همان کدی است که در یکی از سلولهای فایل Excel به صورت زیر استفاده شده است:
=F_myfunction_Tester(A5;B5)
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری | Function Scope: Global |
| نوع فانکشن: عددی | Function Type: Number |
نام فانکشن: myfunction | Function Name: myfunction |
| آرگومانها و پارامترها:aعددی و b رشتهای | Argumans of Function: a number,b number |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار عددی | a + val(b) |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، عددی را که از DLL باز میگردد را تغییر دهید.
پایان تمرین شماره 7
نام فارسی تمرین: فراخوانی تابع داخلی
نام لاتین تمرین: Call internal function
اکنون که تمرینهای زیادتری انجام دادهاید در این تمرین فقط به بخش VBA تمرکز
می کنیم و نتایج را در VBA مورد بررسی قرار خواهیم داد، در این تمرین صفحه
Excel Sheetی که باز میکنید خالی است، و خود میدانید که نتایج آنچه را انجام
میدهید را میتوانید از عملکرد Sub واقع در Module به نام VBA_Tester پیگیری
کنید.
از منوی Project، گزینه Samples و اولین گزینه Call internal function- شماره 08 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 08-Call internal function
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 09-Sample.xlsm |
| DLL فایل 32 بیتی | 08-Call internal function32.dll |
| DLL فایل 64 بیتی | 08-Call internal function64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در این تمرین از یک فانکشن سراسری (به نام myfunction)، یک فانکشن داخلی(به نام
my_internal_function) را فراخوانی کردهایم و مقدار برگشتی از فانکشن داخلی را
به Excel بازگرداندهایم.
کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی
VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(08) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام («my_internal_function say this string»)را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester() As String
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری و داخلی | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن سراسری: myfunction نام فانکشن داخلی: my_internal_function | Global Function Name: myfunction Internal Function Name: my_internal_function |
آرگومانها و پارامترهای فانکشن سراسری:هیچ آرگومانها و پارامترهای فانکشن سراسری: عددی | Argumans of Function: a number,b number |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای | my_internal_function (0) |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، طوری عمل کنید که این تمرین شبیه به تمرین شماره 01 عمل کند، به نحوی که مقدار بازگشتی خود را در یک سلول نمایش دهد؟
پایان تمرین شماره 8
نام فارسی تمرین: برگرداندن شماره سریال CPU
نام لاتین تمرین: Return CPU serial number
اکنون که تمرینهای زیادتری انجام دادهاید در این تمرین فقط به بخش VBA تمرکز
می کنیم و نتایج را در VBA مورد بررسی قرار خواهیم داد، در این تمرین صفحه
Excel Sheetی که باز میکنید خالی است، و خود میدانید که نتایج آنچه را انجام
میدهید را میتوانید از عملکرد Sub واقع در Module به نام VBA_Tester پیگیری
کنید.
از منوی Project، گزینه Samples و اولین گزینه Return CPU serial number- شماره 09 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 09-Return CPU serial number
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 09-Sample.xlsm |
| DLL فایل 32 بیتی | 09-Return CPU serial number32.dll |
| DLL فایل 64 بیتی | 09-Return CPU serial number64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در این تمرین از یک فانکشن سراسری(به نام myfunction)، یک فانکشن داخلی(به نام
CPU_Serial_Number) را فراخوانی کردهایم و مقدار برگشتی از فانکشن داخلی را به
Excel بازگرداندهایم، این فانکشن داخلی(CPU_Serial_Number)، فانکشنی
خاص از مجموعه فانکشنهای از قبل طراحی شده در نرمافزار
DLLGenerator است، که مستقیما با اطلاعات سختافزاری سیستم مشتری کار
میکند.
کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(09) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام حاوی یک شماره سریال را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester() As String
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری و داخلی خاص | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن سراسری: myfunction نام فانکشن داخلی: CPU_Serial_Number | Global Function Name: myfunction Internal Function Name: CPU_Serial_Number |
آرگومانها و پارامترهای فانکشن سراسری:هیچ | Argumans of Function: |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، طوری عمل کنید که این تمرین شبیه به تمرین شماره 01 عمل کند، به نحوی که مقدار بازگشتی خود را در یک سلول نمایش دهد؟
پایان تمرین شماره 9
نام فارسی تمرین: برگرداندن شماره سریال HDD
نام لاتین تمرین: Return HDD serial number
اکنون که تمرینهای زیادتری انجام دادهاید در این تمرین فقط به بخش VBA تمرکز
می کنیم و نتایج را در VBA مورد بررسی قرار خواهیم داد، در این تمرین صفحه
Excel Sheetی که باز میکنید خالی است، و خود میدانید که نتایج آنچه را انجام
میدهید را میتوانید از عملکرد Sub واقع در Module به نام VBA_Tester پیگیری
کنید.
از منوی Project، گزینه Samples و اولین گزینه Return HDD serial number- شماره 10 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 10-Return HDD serial number
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 10-Sample.xlsm |
| DLL فایل 32 بیتی | 10-Return HDD serial number32.dll |
| DLL فایل 64 بیتی | 10-Return HDD serial number64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در این تمرین از یک فانکشن سراسری (به نام myfunction)، یک فانکشن داخلی(به نام
HDD_Serial_Number) را فراخوانی کردهایم و مقدار برگشتی از فانکشن
داخلی را به Excel بازگرداندهایم، این فانکشن داخلی(HDD_Serial_Number)،
فانکشنی خاص از مجموعه فانکشنهای از قبل طراحی شده در نرمافزار
DLLGenerator است، که مستقیما با اطلاعات سختافزاری سیستم مشتری کار
میکند.
کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(10) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام حاوی یک شماره سریال را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester() As String
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری و داخلی خاص | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type:String |
نام فانکشن سراسری: myfunction نام فانکشن داخلی: HDD_Serial_Number | Global Function Name: myfunction Internal Function Name: HDD_Serial_Number |
آرگومانها و پارامترهای فانکشن سراسری:هیچ آرگومانها و پارامترهای فانکشن داخلی: فقط یک آرگومان با مقدار 1 منظور از مقدار 1: هارددیسک اول رایانه است. | Argumans of Function: |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، طوری عمل کنید که این تمرین شبیه به تمرین شماره 01 عمل کند، به نحوی که مقدار بازگشتی خود را در یک سلول نمایش دهد؟
ممکن است این سئوال برایتان پیش بیاد که اگر رایانهای بیش از یک هارددیسک داشت
چگونه میتوان شماره سریال همه هارددیسکها را مشاهده کرد؟
پاسخ به سئوال
در واقع پاسخ به دو سوال است:
سئول اول: چگونه می توان تعداد هارددیسکهای یک رایانه را بدست آورد؟
پاسخ : با فانکشن داخلی HDD_Count، این فانکشن یک عدد برمیگرداند.
سئوال دوم: چگونه میتوان شماره سریال هارددیسک اول(1) را بدست آورد؟
پاسخ : با فانکشن داخلی (1)HDD_Serial_Number، این فانکشن یک رشته برمیگرداند.
سئوال دوم: چگونه میتوان شماره سریال هارددیسک دوم(2) را بدست آورد؟
پاسخ : با فانکشن داخلی (2)HDD_Serial_Number، این فانکشن یک رشته برمیگرداند.
پایان تمرین شماره 10
نام فارسی تمرین: برگرداندن شماره سریال USB
نام لاتین تمرین: Return USB serial number
اکنون که تمرینهای زیادتری انجام دادهاید در این تمرین فقط به بخش VBA تمرکز می کنیم و نتایج را در VBA مورد بررسی قرار خواهیم داد، در این تمرین صفحه Excel Sheetی که باز میکنید خالی است، و خود میدانید که نتایج آنچه را انجام میدهید را میتوانید از عملکرد Sub واقع در Module به نام VBA_Tester پیگیری کنید.
از منوی Project، گزینه Samples و اولین گزینه Return USB serial number- شماره 11 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 11-Return USB serial number
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 11-Sample.xlsm |
| DLL فایل 32 بیتی | 11-Return USB serial number32.dll |
| DLL فایل 64 بیتی | 11-Return USB serial number64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در این تمرین از یک فانکشن سراسری(به نام myfunction)، یک فانکشن داخلی(به نام
USB_Serial_Number) را فراخوانی کردهایم و مقدار برگشتی از فانکشن
داخلی را به Excel بازگرداندهایم، این فانکشن داخلی(USB_Serial_Number)،
فانکشنی خاص از مجموعه فانکشنهای از قبل طراحی شده در نرمافزار
DLLGenerator است، که مستقیما با اطلاعات سختافزاری سیستم مشتری کار
میکند.
کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(10) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام حاوی یک شماره سریال را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester() As String
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری و داخلی خاص | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن سراسری: myfunction نام فانکشن داخلی: USB_Serial_Number | Global Function Name: myfunction Internal Function Name: USB_Serial_Number |
آرگومانها و پارامترهای فانکشن سراسری:هیچ آرگومانها و پارامترهای فانکشن داخلی: فقط یک آرگومان با مقدار 1 منظور از مقدار 1: FlashUSB اول متصل به رایانه است. | Argumans of Function: |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، طوری عمل کنید که این تمرین شبیه به تمرین شماره 01 عمل کند، به نحوی که مقدار بازگشتی خود را در یک سلول نمایش دهد؟
ممکن است این سئوال برایتان پیش بیاد که اگر رایانهای بیش از یک
FlashUSB داشت چگونه میتوان شماره سریال همه
FlashUSBها را مشاهده کرد؟
پاسخ به سئوال در واقع پاسخ به دو سوال
است:
سئول اول: چگونه می توان تعداد FlashUSBهای یک رایانه را بدست آورد؟
پاسخ : با فانکشن داخلی USB_Count، این فانکشن یک عدد برمیگرداند.
سئوال دوم: چگونه میتوان شماره سریال FlashUSB اول(1) را بدست آورد؟
پاسخ : با فانکشن داخلی (1)USB_Serial_Number، این فانکشن یک رشته برمیگرداند.
سئوال دوم: چگونه میتوان شماره سریال FlashUSB دوم(2) را بدست آورد؟
پاسخ : با فانکشن داخلی (2)USB_Serial_Number، این فانکشن یک رشته برمیگرداند.
پایان تمرین شماره 11
نام فارسی تمرین: تولید کد فعالسازی برای مشتریان
نام لاتین تمرین: Generate activation code
اکنون که تمرینهای زیادتری انجام دادهاید در این تمرین فقط به بخش VBA تمرکز می کنیم و نتایج را در VBA مورد بررسی قرار خواهیم داد، در این تمرین صفحه Excel Sheetی که باز میکنید خالی است، و خود میدانید که نتایج آنچه را انجام میدهید را میتوانید از عملکرد Sub واقع در Module به نام VBA_Tester پیگیری کنید.
توضیحات:
طی انجام تمرینهای شماره 9 تا 11، متوجه شدید که چگونه میتوانید اطلاعات مرتبط با شماره سریال سیستم مشتری را بدست آورید، از آنجا که اطلاعات سختافزاری اطلاعاتی یکتا هستند، میتوانید بر اساس این اطلاعات کد فعالسازی برای نرمافزار خود تولید کنید. کد فعالسازی میتواند یک رشته مبتنی بر اطلاعات CPU، HDD و یا USB باشد، منتها باید کمی آنرا دستکاری کنید و نهایتا با فانکشن داخلی MD5 به یک رشته محافظت شده تبدیل کنید.
حتما احتیاط کنید و فقط بر اساس یک قطعه سختافزاری کد فعالسازی تولید نکنید.
اگر اطلاعات سخت افزاری سیستمی را به نحوی که گفته شد به یک رشته تبدیل کنید، هنگامی که کاربر شما کد فعال سازی را به DLL میدهد، از آنجا که منطق تولید کد فعالسازی موجود در DLL با منطقی که شما کد فعالسازی را تولید کردهاید یکسان است، کد فعالسازی دقیقا همان رشتهای خواهد بود که DLL در یک فرمول داخلی کامپایل شده، تولید شده است.
اینکه کد فعالسازی در رایانه مشتری بر اساس اطلاعات سخت افزاری مشتری تولید شده است،
یــــا کد فعالسازی در رایانه شما بر اساس اطلاعات سخت افزاری رایانه مشتری تولید شده است،
در یکسان بودن کد فعالسازی تولید شده نقشی نخواهد داشت.
به عبارتی دیگر چون مبنای صدور کد فعال سازی در هر دو رایانه بر اساس اطلاعات سخت افزاری رایانه مشتری است، کدهای فعالسازی با هم برابر خواهند شد.
در این تمرین فقط یک کد فعالسازی تولید میکنیم، در تمرین های بعدی این پروژه را کاملتر میکنیم.
در این تمرین بیشتر از انچه که به Excel نیاز داریم به DLL Generator نیازمندیم، این فرمول در myfuction نرم افزار DLL Generator یک کد فعالسازی مبتنی بر شماره سریال CPU رایانۀ مشتری شما و شماره سریال نستین هارددیسک مشتری شما تولید میکند؛ بین دو شماره سریال یک عبارت XxX قرار داده، و نهایتا MD5 رشته تولید شده را برگردانده است.
Encrypt_MD5(CPU_Serial_Number()+"XxX"+HDD_Serial_Number(1))
از منوی Project، گزینه Samples و اولین گزینه Generate activation code- شماره 12 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 12-Generate activation code
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 12-Sample.xlsm |
| DLL فایل 32 بیتی | 12-Generate activation code32.dll |
| DLL فایل 64 بیتی | 12-Generate activation code64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در این تمرین از یک فانکشن سراسری(به نام myfunction)، سه فانکشن داخلی(به
نامهای CPU_Serial_Number و HDD_Serial_Number و Encrypt_MD5 ) را فراخوانی
کردهایم و مقدار برگشتی از فانکشنهای داخلی را به Excel بازگرداندهایم، این
فانکشنهای داخلی(USB_Serial_Number)، فانکشنی
خاص از مجموعه فانکشنهای از قبل طراحی شده در نرمافزار
DLLGenerator است، که مستقیما با اطلاعات سختافزاری سیستم مشتری کار
میکند.
کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
چنانچه این پنل را نمیبینید، کلیدهای Ctrl+R را بزنید و یا از منوی View گزینه Project Explorer را انتخاب کنید.
در این پنل شاخههایی را خواهید دید، به سر شاخه(12) VBAProject ، و سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
به VBA_Tester نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، روی SUB S_myfunction_Tester کلیک کنید و کلید F5 را بزنید؛ دستور MsgBox از طریق ارتباطاتی که با DLL برقرار میشود پیام حاوی یک شماره سریال را نمایش خواهد داد.
برای اینکه بدانید که چگونه ارتباط با DLL برقرار شده است باید به VBA_Module نگاه کنید، روی آن کلیک کنید و در سمت راست محتوای آنرا ببینید، مجموعه کدهای دقیق و مهندسی شده که نیازی به تشریح آنها نخواهید داشت فقط از آنها استفاده کنید، اما یک کد نظر شما را حتما جلب خواهد کرد و آن این کد است:
Function F_myfunction_Tester() As String
پاسخ به سئوال چگونه با DLLGenerator این کار را انجام دهم.
برای پاسخ به سئوال:
چگونه با DLLGenerator خودم فایل DLL را تولید کنم و در Excel از آن استفاده کنم؛ به صورت زیر عمل کنید:
به پنجره نرمافزار XlsmDllGenerator وارد شوید، و از سرشاخههای موجود به سرشاخۀ Global Functions، و زیر شاخه myfunction نگاه کنید و روی آن کلیک کنید.
در سمت راست مشخصات این فانکشن قابل رویت میباشد:
دامنه فراخوانی فانکشن: سراسری و داخلی خاص | Function Scope: Global |
| نوع فانکشن: رشتهای | Function Type: String |
نام فانکشن سراسری: myfunction نام فانکشن داخلی: CPU_Serial_Number نام فانکشن داخلی: HDD_Serial_Number نام فانکشن داخلی: Encrypt_MD5 | Global Function Name: myfunction Internal Function Name: CPU_Serial_Number Internal Function Name: HDD_Serial_Number Internal Function Name: Encrypt_MD5 |
آرگومانها و پارامترهای فانکشن سراسری:هیچ آرگومانها و پارامترهای فانکشن داخلی:هیچ آرگومانها و پارامترهای فانکشن داخلی:1 آرگومانها و پارامترهای فانکشن داخلی:رشته ترکیبی | Argumans of Function: |
| شرط اجرای فرمول: هیچ چیز | If |
| فرمول: تنها برگشت یک مقدار رشتهای |
برای تولید سه فایل هدف کافی است که روز سرشاخه Genrate All کلیک کنید.
سپس روی سرشاخه Open DLL Path کلیک کنید.
یک فایل Excel جدید ایجاد کنید و باز کنید.
سپس کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در پنجره Microsoft Visual Basic for Application ، پنل سمت چپ Project-VBAProject را مشاهده کنید.
پنجرههای ویندوز را طوری کنار هم قرار دهید که فولدر Desktop\output و پنجره Microsoft Visual Basic for Application ،کاملا قابل روئیت باشند، دو فایل VBA تولید شده را به نامهای VBA_Module و VBA_Tester و پسوند BAS را با ماوس، به پنل سمت چپ Project-VBAProject ، بگیرید بکشید و رها کنید (Drag & Drop) کنید.
سپس زیر شاخه Modules نگاه کنید، در این بخش دو شاخه به نامهای VBA_Module و VBA_Tester خواهید دید.
آیا میتوانید بقیه کارها را خودتان انجام دهید؟
کارهایی از قبیل مشاهده نتیجۀ عملکرد SUB S_myfunction_Tester، در VBA_Tester و اضافه کردن فرمول
=F_myfunction_Tester()
در یکی از سلولهای فایل Excelی که خودتان ایجاد کردهاید.
به خاطر داشته باشید Excel برای نگهداری فایلهای Module ی که به آن اضافه کردهاید سایر کدهای برنامهنویسی شده نیاز دارد که فایل Excel را با پسوند xlsm ذخیره کنید.
آیا میتوانید در تمرینی جدید، طوری عمل کنید که این تمرین شبیه به تمرین شماره 01 عمل کند، به نحوی که مقدار بازگشتی خود را در یک سلول نمایش دهد؟
پایان تمرین شماره 12
نام فارسی تمرین: نمایش کد فعالسازی توسط رمز عبور
نام لاتین تمرین: Display activation code by password
این تمرین را در ادامه تمرین شماره 12 انجام خواهیم داد، بنابراین قبل از انجام این تمرین باید تمرین شماره 12 را کامل انجام داده باشید.
قصد داریم با دریافت یک گذرواژه کد فعالسازی تولید شده را نمایش دهیم.
این تمرین بر روی DLL Generator و بخصوص if یی که در بالای فرمول وجود دارد تمرکز کرده است.
در این تمرین برخلاف تمرین قبلی که فقط بر روی VBA متمرکز شده بود، در Excel Sheet نیز اطلاعاتی را نمایش میدهیم.
از منوی Project، گزینه Samples و اولین گزینه Display activation code by password- شماره 13 انتخاب کنید، دو اتفاق خواهد افتاد:
1- نرمافزار با پنجره جدید به شما نشان داده میشود که بالای آن نوشته شده است:
XlsmDllGenerator 13-Display activation code by password
2- پنجره MyComputer در فولدری به نام Desktop\output باز میشود. که فایلهایی را نمایش میدهد، در این پنجره تنها سه فایل مورد هدف ما قرار دارد بقیه فایلها را نیاز نداریم:
| فایل Excel حاوی کُدهای برنامهنویسی | 13-Sample.xlsm |
| DLL فایل 32 بیتی | 13-Display activation code by password32.dll |
| DLL فایل 64 بیتی | 13-Display activation code by password64.dll |
فایل Excel را باز کنید ، وقتی به فایل Excel وارد میشوید ممکن است از شما
خواسته شود که ماکروها و Activexها را فعال کنید، برای انجام اینکار
نکات قابل توجه هنگام استفاده از نرمافزار، مطالعه و استفاده کنید.
در این تمرین از یک فانکشن سراسری(به نام myfunction)، کاری را انجام می دهد که در تمرین 12 انجام می داد با یک تفاوت.
تفاوت فانکشن سراسری تمرین 13 با 12 بر روی آرگومان رشتهای است که برای
آن در نظر گرفته شده است، قرار است توسط این آرگومان گذرواژه Administrator
برای DLL ارسال شود.
در نرم افزار DLL Generator به شاخه myfunction زیر
شاخه Global Function مراجعه کنید و به IF نگاه کنید:
a="Administrator_Password"
یعنی اگر گذرواژه Administrator_Password، بود کد فعالسازی را برگردان.
و اگر نه !Password incurrect را برگردان.
سایر کارها شبیه به همان تمرینهایی است که از فرمول زیر در سلول استفاده می کردیم:
=F_myfunction_Tester()
در دو سلول A3 و A6 دو گذرواژه میبینید که یکی درست و دیگری نادرست است.
در سلولهای B3 و B6، یک فرمول دیده میشود که گذرواژه را به DLL ارسال میکند و مقدار برگشتی از DLL را نمایش میدهد.
در ادامه برای استفاده شماره سریال ها در تمرین های بعدی و فهم عمیقتر همین تمرین فانکشنهایی بیشتری را تولید و استفاده میکنیم:
|
در نرم افزار DLL Generator |
در VBA Excel |
نام فانکشن: Return_CPU_sn آرگومان: هیچ توضیح عملکرد فانکشن: برگشت شماره سریال CPU نوع مقدار برگشتی : رشته | روش بهکارگیری در Excel: =F_Return_CPU_sn_Tester() شماره سریال CPU را نمایش می دهد. |
نام فانکشن: Return_HDD_Count آرگومان: هیچ توضیح عملکرد فانکشن: برگشت تعداد هارددیسکها نوع مقدار برگشتی : عدد | روش بهکارگیری در Excel: =F_Return_HDD_Count_Tester() تعداد هارددیسکها را نمایش می دهد. |
نام فانکشن: Return_HDD_sn آرگومان: یک عدد توضیح عملکرد فانکشن: برگشت شماره سریال هارددیسک بر اساس عدد آرگومان:عدد 1 یعنی هارددیسک اول نوع مقدار برگشتی : رشته | روش بهکارگیری در Excel: =F_Return_HDD_sn_Tester(B14) شماره سریال هارددیسک اول(B14) را نمایش می دهد. سلول B14، حاوی یک عدد ( عددی بین 1 تا 20:: بستگی دارد چند هارددیسک در رایانه وجود داشته باشد ) است. |
نام فانکشن: Return_USB_Count آرگومان: هیچ توضیح عملکرد فانکشن: برگشت تعداد FlashUSBها نوع مقدار برگشتی : عدد | روش بهکارگیری در Excel: =F_Return_USB_Count_Tester() تعداد FlashUSBها را نمایش می دهد. |
نام فانکشن: Return_USB_sn آرگومان: یک عدد توضیح عملکرد فانکشن: برگشت شماره سریال FlashUSB بر اساس عدد آرگومان:عدد 1 یعنی FlashUSB اول نوع مقدار برگشتی : رشته | روش بهکارگیری در Excel: =F_Return_USB_sn_Tester(B17) شماره سریال FlashUSB اول(B17) را نمایش می دهد. سلول B17، حاوی یک عدد ( عددی بین 1 تا 10 :: بستگی دارد چند FlashUSB به رایانه متصل باشد ) است.
|
پایان تمرین شماره 13
نام فارسی تمرین: ایجاد کد فعالسازی توسط مدیر
نام لاتین تمرین: Generate activation code by administrator
این تمرین بر اساس تمرینهای قبلی انجام میشود و نقطۀ نهایی تولید کد فعالسازی برای مشتریان است. تمامی نکاتی که در تمرینهای قبلی گفته شد در این تمرین تجلی خواهد کرد.
در این تمرین قرار است شماره سریال رایانه مشتری، شماره سریال هارددیسک رایانه مشتری به DLL تحویل داده شود کد فعالسازی دریافت شود، فرمول درج شده در DLL ی که کدفعالسازی را تولید می کند با فرمولی که در DLL ی که به مشتری تحویل داده شده یکسان است، بنابراین کد فعالسازی درستی صادر خواهد شد.
با کمی توجه متوجه می شوید که فرمول مندرج در فانکشن تمرین 13 با عنوان myfunction، با کمی تغییر به فانکشن GenatareActivationCode در این تمرین(تمرین14)، منتقل شده است:
در تمرین 13، شکل فرمول به صورت زیر بود:
Encrypt_MD5(CPU_Serial_Number()+"XxX"+HDD_Serial_Number(1))
در این تمرین(تمرین 14)، شکل فرمول به صورت زیر تغییر یافته است:
Encrypt_MD5(UserCPU+"XxX"+UserHDD)
در این تمرین UserCPU به صورت آرگومان از Excel به DLL وارد می شود، در حالیکه در تمرین 13 این مقدار مستقیم از سخت افزار دریافت می شود. همچنین UserHDDبه صورت آرگومان از Excel به DLL وارد می شود، در حالیکه در تمرین 13 این مقدار مستقیم از سخت افزار دریافت می شود.
فانکشن سراسری GenatareActivationCode سه آرگومان دریافت میکند:
گذرواژه ای است که برنامهنویس برای استفاده از DLL خود - جهت استفاده در رایانه خودش در نظر گرفته. | AdminPassword |
شماره سریال CPU رایانه مشتری است که برنامهنویس برای صدور کد فعالسازی از مشتری دریافت میکند. | UserCPU |
شماره سریال HDD رایانه مشتری است که برنامهنویس برای صدور کد فعالسازی از مشتری دریافت میکند. | UserHDD |
مثال:
اگر گذرواژه برنامهنویس را 123456 در نظر بگیریم، و شماره سریال CPU رایانه مشتری 83gh654fgdf6546466rty باشد، و شماره سریال هارد دیسک مشتری Z342534G ، باشد؛ کد فعالسازی طی فرمولی که در DLL قرار دارد اعلام شده است.
برای بدست آوردن مقادیر حقیقی از نتایج تمرین شماره 13 استفاده کنید؛ در تمرین شماره 13 ، شماره سریال CPU و HDD نمایش داده شده است.
AdminPassword: 123456
UserCPU: 83gh654fgdf6546466rty
UserHDD:
Z342534G
Activation Code:
7d43c5f7ac47b5f0f07a1cf64c106a82
به فرمول سلول A8 توجه کنید.
پایان تمرین شماره 14
نام فارسی تمرین: تنظیم(نشاندن) کد فعالسازی توسط کاربر
نام لاتین تمرین: Set activation code by user
֍ از آنجا که DLL میتواند متغییرهای سراسری قابل استفاده توسط همه فانکشنها
داشته باشد، یکبار کد فعالسازی را برای DLL ارسال میکنیم. اینکار در
اولین استفاده از فایل DLL توسط فایل Excel انجام میشود، اگر کد فعالسازی
درست باشد یک متغییر سراسری از نوع Boolean مقدار True خواهد گرفت. و همه
فانکشنها - با دستور برنامهنویس- قبل از برگشت مقدار محاسباتی خود به این
مقدار توجه می کنند(اینکار
توسط If بالای فرمول انجام میگیرد).
֍ نکته بعدی در این تمرین این است که مقدار برگشتی از برخی فانکشنها را در یک متغییر سراسری قرار میدهیم، اینکار در نرمافزار DLL Generator در بخش تعریف فانکشنها(چه سراسری و چه داخلی)، از طریق گزینۀ :Restore Result to، انجام میگیرد.
֍ با کمی توجه متوجه می شوید که فرمول مندرج در فانکشن سراسری تمرین 13 با عنوان myfunction، با کمی تغییر به فانکشن داخلی ProductActivationCode در این تمرین(تمرین15)، منتقل شده است:
در تمرین 13، شکل فرمول به صورت زیر بود:
Encrypt_MD5(CPU_Serial_Number()+"XxX"+HDD_Serial_Number(1)) (تمرین13)
Encrypt_MD5(CPU_Serial_Number()+"XxX"+HDD_Serial_Number(a))
آرگومان a در اینجا، عدد هارددیسک است.
֍ در نخستین گام، فرمول از فانکشن سراسری به فانکشن داخلی تغییر مکان یافته، این به این معنی است که دیگر این فرمول در اختیار عموم قرار ندارد، و فقط از طریق فانکشنهای سراسری DLL مورد بهرهبرداری واقع خواهد شد.
֍ فانکشن سراسری
ActivationCodeStatus، در این تمرین از نوع Boolean است و مقدار نتیجه
آن در یک متغییر سراسری به نام
Global_ActivationCodeStatus_Result، ثبت می شود و توسط سایر فانکشنها
مورد استفاده واقع خواهد شد.
مقدار Global_ActivationCodeStatus_Result، در واقع نتیجه درست بودن یا درست نبودن کد فعالسازی است.
در همین فانکشن یعنی ActivationCodeStatus، کد فعالسازی که توسط Excel به DLL فرستاده می شود، در آرگومانی به نام UserActivationCode، به داخل فانکشن وارد شده و ازطریق فرمول ProductActivationCode(1)=UserActivationCode ، مورد ارزیابی واقع می شود، و نتیجه آن در متغییر سراسری Global_ActivationCodeStatus_Result، ثبت میشود.
پس از بازکردن فایل Sample.xlsm شماره 15 ، و ورود به VBA از طریق فشردن همزمان کلیدهای Alt+F11، و ورود به VBA_Tester.
می توانید دو SUB را ملاحظه کنید: S_ActivationCodeStatus_Tester و S_myfunction_Tester
S_ActivationCodeStatus_Tester : که از فانکشن F_ActivationCodeStatus_Tester
با ساختار آرگومانی زیر بهره می گیرد، که در آن یک کد فعالسازی برای DLL ارسال
می شود(که می توانید این کد را دقیقا در تمرین شماره 13 بدرستی ببینید)
F_ActivationCodeStatus_Tester("f0ba19b228ce6ca708492e173ea79916")
این فانکشن را می توانید در ThisWorkbook، قراردهید:
Private Sub Workbook_Open()
>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<
End Sub
این فانکشن را می توانید در ThisWorkbook، قراردهید؛ تا با باز شدن فایل Excel، کد فعالسازی برای DLL ارسال شود و مقدار Global_ActivationCodeStatus_Result، ثبت شود.
اجرای S_ActivationCodeStatus_Tester بدون کدفعالسازی صحیح مقدار 0 را بازخواهد گرداند، که به این ترتیب می توانید از درستی کد فعالسازی باخبر شوید؛ اجرای S_ActivationCodeStatus_Tester با کدفعالسازی صحیح مقدار 1 را بازخواهد گرداند.
در تمرین بعدی (تمرین شماره 16)، فانکشن myfunction شبیه به تمرین 3، برای ارسال دو عدد و برگشت یک عدد طراحی شده با این تفاوت که در بخش IF فرمول مقدار Global_ActivationCodeStatus_Result، شرط اجرای آن است.
در صورتی که مقدار Global_ActivationCodeStatus_Result، که مقداری Boolean است،True باشد، فانکشن محاسبات فرمول را باز میگرداند، در غیر اینصورت مقدار 0 بازگردانده میشود.
به این ترتیب تنظیم(نشاندن) کد فعالسازی توسط کاربر، با برگشت مقادیر از فانکشنها توسط درستی یا غلطی مقدار سراسری Global_ActivationCodeStatus_Result،پیوند میخورد.
این تمرین بر اساس تمرینهای قبلی انجام میشود و نقطۀ نهایی تولید کد فعالسازی برای مشتریان است. تمامی نکاتی که در تمرینهای قبلی گفته شد در این تمرین تجلی خواهد کرد.
پس از باز کردن فایل Sample.xlsm شماره 15، کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در Module،و VBA_Tester، اجرای SUB ،و F_ActivationCodeStatus_Tester، موجب نمایش عدد صفر خواهد شد،
MsgBox F_ActivationCodeStatus_Tester("UserActivationCode1"), , "ActivationCodeStatus"
تنظیم کردن عبارت «UserActivationCode1» در فرمول زیر، بر اساس کد فعالسازی نمایش داده شده در تمرین شماره 13، منجر به نمایش عدد 1 خواهد شد.
به عبارتی بهتر اینطور بگوییم که کد فعالسازی نمایش داده شده در تمرین شماره 13 را بجای عبارت «UserActivationCode1» در فرمول مندرج در SUB قرار دهید تا مقدار برگشتی عدد 1 باشد.
در تمرین بعدی این وضعیت یعنی 1 بودن مقدار برگشتی عملیات «تنظیم(نشاندن) کد فعالسازی توسط کاربر»، باعث برگشت صحیح مقادیر فرمولهای فانکشنهای تنظیم شده در DLL خواهد شد.
پایان تمرین شماره 15
نام فارسی تمرین: برگرداندن مقدار در صورت صحیح بودن کد فعالسازی
نام لاتین تمرین: Return value if activation code is correct
֍ از آنجا که DLL میتواند متغییرهای سراسری قابل استفاده توسط همه فانکشنها
داشته باشد، یکبار کد فعالسازی را برای DLL ارسال میکنیم. اینکار در
اولین استفاده از فایل DLL توسط فایل Excel انجام میشود، اگر کد فعالسازی
درست باشد یک متغییر سراسری از نوع Boolean مقدار True خواهد گرفت. و همه
فانکشنها - با دستور برنامهنویس- قبل از برگشت مقدار محاسباتی خود به این
مقدار توجه می کنند(اینکار
توسط If بالای فرمول انجام میگیرد).
֍ نکته بعدی در این تمرین این است که مقدار برگشتی از برخی فانکشنها را در یک متغییر سراسری قرار میدهیم، اینکار در نرمافزار DLL Generator در بخش تعریف فانکشنها(چه سراسری و چه داخلی)، از طریق گزینۀ :Restore Result to، انجام میگیرد.
֍ با کمی توجه متوجه می شوید که فرمول مندرج در فانکشن سراسری تمرین 13 با عنوان myfunction، با کمی تغییر به فانکشن داخلی ProductActivationCode در این تمرین(تمرین16)، منتقل شده است:
در تمرین 13، شکل فرمول به صورت زیر بود:
Encrypt_MD5(CPU_Serial_Number()+"XxX"+HDD_Serial_Number(1)) (تمرین13)
Encrypt_MD5(CPU_Serial_Number()+"XxX"+HDD_Serial_Number(a))
آرگومان a در اینجا، عدد هارددیسک است.
֍ در نخستین گام، فرمول از فانکشن سراسری به فانکشن داخلی تغییر مکان یافته، این به این معنی است که دیگر این فرمول در اختیار عموم قرار ندارد، و فقط از طریق فانکشنهای سراسری DLL مورد بهرهبرداری واقع خواهد شد.
֍ فانکشن سراسری
ActivationCodeStatus، در این تمرین از نوع Boolean است و مقدار نتیجه
آن در یک متغییر سراسری به نام
Global_ActivationCodeStatus_Result، ثبت می شود و توسط سایر فانکشنها
مورد استفاده واقع خواهد شد.
مقدار Global_ActivationCodeStatus_Result، در واقع نتیجه درست بودن یا درست نبودن کد فعالسازی است.
در همین فانکشن یعنی ActivationCodeStatus، کد فعالسازی که توسط Excel به DLL فرستاده می شود، در آرگومانی به نام UserActivationCode، به داخل فانکشن وارد شده و ازطریق فرمول ProductActivationCode(1)=UserActivationCode ، مورد ارزیابی واقع می شود، و نتیجه آن در متغییر سراسری Global_ActivationCodeStatus_Result، ثبت میشود.
پس از بازکردن فایل Sample.xlsm شماره 16 ، و ورود به VBA از طریق فشردن همزمان کلیدهای Alt+F11، و ورود به VBA_Tester.
می توانید دو SUB را ملاحظه کنید: S_ActivationCodeStatus_Tester و S_myfunction_Tester
S_ActivationCodeStatus_Tester : که از فانکشن F_ActivationCodeStatus_Tester
با ساختار آرگومانی زیر بهره می گیرد، که در آن یک کد فعالسازی برای DLL ارسال
می شود(که می توانید این کد را دقیقا در تمرین شماره 13 بدرستی ببینید)
F_ActivationCodeStatus_Tester("f0ba19b228ce6ca708492e173ea79916")
این فانکشن را می توانید در ThisWorkbook
Private Sub Workbook_Open()
End Sub
قراردهید تا با باز شدن فایل Excel، کد فعالسازی برای DLL ارسال شود و مقدار Global_ActivationCodeStatus_Result، ثبت شود.
اجرای S_ActivationCodeStatus_Tester بدون کدفعالسازی صحیح مقدار 0 را بازخواهد گرداند، که به این ترتیب می توانید از درستی کد فعالسازی باخبر شوید؛ اجرای S_ActivationCodeStatus_Tester با کدفعالسازی صحیح مقدار 1 را بازخواهد گرداند.
در همین تمرین(تمرین شماره 16)، فانکشن myfunction شبیه به تمرین 3، برای ارسال دو عدد و برگشت یک عدد طراحی شده با این تفاوت که در بخش IF فرمول مقدار Global_ActivationCodeStatus_Result، شرط اجرای آن است.
در صورتی که مقدار Global_ActivationCodeStatus_Result، که مقداری Boolean است،True باشد، فانکشن محاسبات فرمول را باز میگرداند، در غیر اینصورت مقدار 0 بازگردانده میشود.
به این ترتیب تنظیم(نشاندن) کد فعالسازی توسط کاربر، با برگشت مقادیر از فانکشنها توسط درستی یا غلطی مقدار سراسری Global_ActivationCodeStatus_Result،پیوند میخورد.
این تمرین بر اساس تمرینهای قبلی انجام میشود و نقطۀ نهایی تولید کد فعالسازی برای مشتریان است. تمامی نکاتی که در تمرینهای قبلی گفته شد در این تمرین به تجلی خواهد کرد.
پس از باز کردن فایل Sample.xlsm شماره 15، کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
در Module،و VBA_Tester، اجرای SUB ،و F_ActivationCodeStatus_Tester، موجب نمایش عدد صفر خواهد شد،
MsgBox F_ActivationCodeStatus_Tester("UserActivationCode1"), , "ActivationCodeStatus"
تنظیم کردن عبارت «UserActivationCode1» در فرمول زیر، بر اساس کد فعالسازی نمایش داده شده در تمرین شماره 13، منجر به نمایش عدد 1 خواهد شد. به عبارتی بهتر اینطور بگوییم که کد فعالسازی نمایش داده شده در تمرین شماره 13 را بجای عبارت «UserActivationCode1» در فرمول مندرج در SUB قرار دهید تا مقدار برگشتی عدد 1 باشد.
در این تمرین(تمرین شماره 16) این وضعیت یعنی 1 بودن مقدار برگشتی عملیات «تنظیم(نشاندن) کد فعالسازی توسط کاربر»، باعث برگشت صحیح مقادیر فرمولهای فانکشنهای تنظیم شده در DLL خواهد شد.
فانکشن myfunction ، که اجرای آن مشروط به درستی مقدار سراسری Global_ActivationCodeStatus_Result ، است. با اجرای S_myfunction_Tester، و برگشت جمع دو مقدار آرگومانهای ارسال شده به فانکشن موجود در DLL کار این تمرین را به پایان خواهد رساند.
برای دور مقدار عددی ارسال شده 32777 و 32777، در صورت درستی کد فعالسازی، رشته «65554» و در صورت غلط بودن کدفعالسازی، رشته «!User ActivationCode is incurrect» نمایش داده میشود.
پایان تمرین شماره 16
نام فارسی تمرین: به خاطر سپردن مقدار برای استفادههای بعدی در DLL
نام لاتین تمرین: Remember value for later use in DLL
این تمرین بر اساس تمرینهای قبلی انجام میشود و نقطۀ نهایی تولید کد فعالسازی برای مشتریان است. تمامی نکاتی که در تمرینهای قبلی گفته شد در این تمرین به تجلی خواهد کرد. بنابراین باید توجه داشته باشید که در این تمرین با VBA سرو کار داریم. پس، کلیدAlt + F11 را بزنید تا به بخش برنامهنویسی VBA وارد شوید.
قد داریم در این تمرین روش های محتلف کار با متغییرهای سراسری را مورد بررسی قرار دهیم.
دو روش برای نگهداری مقادیر در متغییرهای سرارسی در نرم افزار DLL Generator وجود دارد:
روش اول: به خاطر سپردن مقدار در متغییر شبیه به نام یک فانکشن.
در این روش یک فانکشنی درست می کنیم (فانکشن سراسری یا داخلی فرقی نمیکند)، سپس از گزینهای که زیر نام فانکشن قرار دارد گزینۀ «:Restore Result to»، را انتخاب می کنیم، یک متغییر سراسری به نام Global_.................._Result بوجود می آید که نتیجه فانکشن را در خود نگه خواهد داشت، نوع این متغییر سراسری همنوع فانکشن خواهد بود.
در این روش فانکشن های زیر مورد استفاده قرار گرفته اند:
myfunction_set
myfunction_get
نام متغییر سراسری که به صورت خودکار تعیین شده است Global_myfunction_set_Result ، می باشد.
در این تمرین subی که در Excel، عددی را در متغییر سراسری مینشاند، S_myfunction_set_Tester است که اینکار را از طریق فراخوانی Functionی در VBA_Module به نام F_myfunction_set_Tester، انجام میدهد. هر عددی را میتوانید طی این فرآیند در متغییر سراسری Global_myfunction_set_Result، موجود در DLL قرار دهید.
پس از نشاندن مقدار در آن، این متغییر میتواند توسط همه فانکشنهای موجود در DLL مورد بهرهبرداری واقع شود، خود شما نیز میتوانید این متغییر را در Excel ببینید. در همین تمرین subی که در Excel، برای نمایش مقدار داخلی ماغییر سراسری مورد بخث به شما کمک می کند، subی است که myfunction_get، نام دارد.اینکار را از طریق فراخوانی Functionی در VBA_Module به نام F_myfunction_get_Tester، انجام میشود.
در این تمرین توسط S_myfunction_set_Tester عدد 32777 در متغییر مورد بحث نشانده میشود و توسط S_myfunction_get_Tester، برگردانده و نمایش داده میشود.
روش دوم: به خاطر سپردن مقدار در متغییر سراسری کاملا مستقل.
در این روش شاخۀ 🌐 Global Variables، در نرم افزار DLL Generator استفاده میشود.
هنگام اجرای DLL مقدار سراسری GlobalVariable_1، با یک رشته "nothing" مقدار دهی اولیه شده است، در همین بخش میتوان نوع متغییر سراسری را عددی یا رشته ای تعیین کرد، که در این تمرین نوع متغییر سراسری String انتخاب شده است.
برای دیدن این مقدار سراسری توسط Excel می توانید از Subموجود به نام S_getGlobalValue_Tester استفاده کنید.
برای تغییر همین مقدار باید از sub موجود به نام S_setGlobalValue_Tester، استفاده کنید، در این راستا برای دریافت کد موجود در متغییر سراسری مزبور از Extended Codes استفاده شده است(فانکشن Set_GlobalVariable_1 )
پایان تمرین شماره 17
نام فارسی تمرین: برگرداندن مقادیر متفاوت متناسب با مقادیر موجود در حافظه DLL
نام لاتین تمرین: Return different values according to values in DLL memory
در این تمرین قصد داریم توسط Excel یک مقدار عددی در DLL بنشانیم و سپس بر اساس آن مقدار، رشته ای برگردانیم که تعیین کننده آن باشد که آیا عدد +(مثبت) است یا - (منفی) است.
1- ابتدا توسط فانکشن setStatus ، یک متغییر سراسری با عنوان Global_setStatus_Result، را مقدار دهی می کنیم.
2- سپس فانکشن getStatus، را فراخوانی می کنیم.
3-درصورتیکه مقدار نشانده شده در Global_setStatus_Result، عددی بزرگتر از 0 باشد، عبارت "Positive" ، بازگردانده میشود، واگرنه (Else)، فانکشن داخلی دیگری فراخوانی میشود به نام CheckZeroOrNegative.
4- درصورتیکه مقدار نشانده شده در Global_setStatus_Result، برابر با 0 باشد، عبارت "Zero" ، بازگردانده میشود، واگرنه (Else)، عبارت "Negative" ، بازگردانده میشود.
فایل
18-Sample.xlsm
دارای این SUB است.
Sub
Test_ALL()
F_setStatus_Tester
(32777): MsgBox F_getStatus_Tester(), , "getStatus"
F_setStatus_Tester (0): MsgBox F_getStatus_Tester(), , "getStatus"
F_setStatus_Tester (-32777): MsgBox F_getStatus_Tester(), , "getStatus"
End Sub
پایان تمرین شماره 18
نام فارسی تمرین: تعریف متغییر سراسری برای استفاده همه فانکشنها در DLL
نام لاتین تمرین: Define global variable for use by all functions in DLL
در این تمرین یک متغییر سراسری به نام Pi در بخش Global Variable تعریف کردهایم که نوع آن عددی(Number)، و مقدار اولیه آن صفر 3.14 است.
فانکشن سراسری AreaCircle، برای محاسبه مساحت دایره، با مقدار برگشتی از نوع عدد، و آرگومانی به نام radius از نوع عددی برای دریافت شعاع دایره تنظیم شده است.
فرمول مندرج در این فانکشن سراسری موجود در DLL به شرح زیر است:
Pi*Pow(radius,2)
تابع Pow، برای به توان رساندن بکار گرفته شده است.
فانکشن سراسری CircumferenceCircle، برای محاسبه محیط دایره، با مقدار برگشتی از نوع عدد، و آرگومانی به نام radius از نوع عددی برای دریافت شعاع دایره تنظیم شده است.
فرمول مندرج در این فانکشن سراسری موجود در DLL به شرح زیر است:
2*Pi*radius
فایل
19-Sample.xlsm
دارای این محتوا است که با تغییر شعاع دایره محیط و مساحت دایره نمایش داده میشود.
| شعاع | مساحت | محیط |
| Radius | AreaCircle | CircumferenceCircle |
| 10 | 314 | 62.8 |
پایان تمرین شماره 19
نام فارسی تمرین: کدهای پیشرفتهتر، به کارگیری Select Case
نام لاتین تمرین: Select Case Extended Codes
در این تمرین مقدار عددی(Number) آرگومان وارد شده به فانکشن myfunctionدر DLL، مستقیما به یک فانکشن داخلی به نام selectcase، ارسال میشود، و سپس مقدار برگشتی از آن به Excel بازگردانده میشود. نوع فانکشن ها در این DLL هر دو رشتهای(String) تعریف شدهاند.
فایل Excel نیز مقادیر رشتهای را نمایش میدهد:
| 1 | One |
| 2 | Tow |
| 3 | Three |
| 4 | Four |
| 5 | Five |
| 6 | Six |
| 7 | Seven |
پایان تمرین شماره 20
🛠DLL Properties
تنظیم کردن فولدر خروجی DLL
این بخش شامل سه سرشاخه فرعی است:
🌐
Global Variables
🎁
Global
Functions
⛔️ Internal
Functions
با
کلیک روی این سرشاخه سمت راست بخشی از نرمافزار نمایش داده خواهد شد که در آن
میتوانید مسیر فایلهای خروجی پروژه خود را تعیین کنید.
نام فایلهای نهایی پروژه یعنی فایلهایی که پسوند dll دارند بر اساس نام که هنگام ایجاد پروژه از طریق زیر منوی New از منوی Project تعیین کرده اید تعیین میشود. بنابراین در مسیری که به عنوان فولدر خروجی پروژه تعیین میکنید دو فایل با پسوند dll تولید خواهد شد که هر یک برای Excel 32 بیتی و 64 بیتی مورد استفاده قرار خواهد گرفت.
برخی از نکاتی که در این بخش اهمیت دارند به شرح زیر هستند:
1-مسیر فایل باید در دسترس باشد یعنی قابلیت نوشتن داشته باشد و محدویتی برای نوشتن در فولدر وجود نداشته باشد.
2-بهتر است نام فولدر در مسیری نباشد که در آن حروف فارسی وجود داشته باشد، چون ممکن است موقع ایجاد فایل محدودیتیهایی توسط Windows پدید آید.
3-از آنجا که امکان نصب نرمافزارهای آفیس 32 بیتی و 64 بیتی در Windows 64 بیتی وجود دارد، و حتی در نگارشهای جدیدتر Office به خصوص نگارشهایی که با عنوان LTSC معروف هستند، امکان نصب همزمان Office 32 بیتی و 64 بیتی به صورت همزمان در یک رایانه که دارای Windows 64 بیتی است، وجود دارد. باید هم DLL 64 بیتی و هم DLL 32 بیتی تولید شود و در اختیار استفاده کننده قرار داده شود تا به صورت خودکار توسط VBA وضعیت Office به لحاظ 32 بیتی و 64 بیتی بودن بررسی شود و DLL مناسب مورد بهره برداری قرار گیرد، این مهم به صورت خودکار توسط نرمافزار DLL Generator انجام خواهد شد.
🌐 Global Variables
تنظیم متغییرهای سراسری
متغییرهای عمومیمتغییرهایی هستند که توسط شما به عنوان برنامهنویس در بخشی از DLL تعریف میشوند و در تممیفانکشنها به آنها دسترسی خواهید داشت.
شاید به نظر برسد با توجه به اینکه تمرکز نرمافزار در خلاصه کردن فانکشنها به صورت دریافت یک فرمول میباشد، متغییرهای عمومیبیشتر به عنوان ثابتهای عمومیجلوه میکنند، اما باید بدانید که متغییرهای سراسری
، واقعا متغییرهای عمومیهستند و حتی میتوانید در بخش Extended پیشرفته آنها را تغییر دهید.
🎁 Global Functions
عملگرهای سراسری
عملگرهای سراسری، عملگرهایی هستند که از بیرون از DLL قابل فراخوانی هستند، این عملگرها توسط برنامهنویس بخش VBA، صدا زده میشوند به آنها پارامترهایی تحویل داده میشود و نهایتا نتیجه عمل آنها از آنها دریافت میشود. نوع پارامترها یا آرگومانها بسیار اهمیت دارند، که به دو دسته عددی و رشته ای تقسیم میشوند و نوع فانکشنها هم مهم هستند، که به سه نوع دودویی، رشته ای و عددی تقسیم میشوند.(Boolean/String/Numberic)
وقتی روی این سرشاخه(Global Functions) کلیک میکنید نرمافزار آماده میشود تا یک عملگر جدید تولید کند، و آنها به نام همان عملگری که در این بخش با Function Name مشخص میکنید، آماده و ذخیره میکند.
عملگرهای سراسری تعریف شده توسط کاربر📄
عملگرهایی که به پروژه اضافه میکنید اگر از خارج از DLL قابل فراخوانی باشند در این بخش فهرست میشوند تا برای بررسی و ویرایشهای بعدی به خصوص هنگمیکه میخواهید اشکالاتشان را هنگام کامپایل رفع کنید، به آنها رجوع کرده و ویرایش کنید.
اضافه کردن عملگر عمومیجدید➕
برای اضافه کردن یک عملگر حاوی یک فرمول جدید، میتوانید از این گزینه استفاده کنید.
⛔️ Internal Functions
عملگرهای داخلی
عملگرهای داخلی، عملگرهایی هستند که از بیرون از DLL قابل فراخوانی نیستند، این عملگرها توسط برنامهنویس توسط فانکشنهایی عمومی(Global Functions)، صدا زده میشوند به آنها پارامترهایی تحویل داده میشود و نهایتا نتیجه عمل آنها از آنها دریافت میشود. نوع پارامترها یا آرگومانها بسیار اهمیت دارند، که به دو دسته عددی و رشته ای تقسیم میشوند و نوع فانکشنها هم مهم هستند، که به سه نوع دودویی، رشتهای و عددی تقسیم میشوند.
(Boolean/String/Numberic)
وقتی روی این سرشاخه(Internal Functions) کلیک میکنید نرمافزار آماده میشود تا یک عملگر جدید تولید کند، و آنها به نام همان عملگری که در این بخش با Function Name مشخص میکنید، آماده و ذخیره میکند.
عملگرهای داخلی و عمومیفرقی با هم ندارند فقط حوزه استفاده آنها با هم متفاوت است، معمولا فرمولهای حساستر در فانکشنهای داخلی قرار داده میشوند و فانکشنهای عمومیبا ملاحظاتی از آنها استفاده میکنند، در واقع فانکشنهای داخلی حریم خصوصی DLL هستند.
میتوانید این مثال را وقع استفاده از فانکشنها به خاطر داشته باشید، فانکشنهای داخلی شبیه آشپزها درون رستوران فعالیت میکنند، که کسی آنها را نمیبیند، و فانکشنهای عمومیشبیه به فروشندگان رستوران عمل میکنند.
✨ Serial Numbers
عملگرهای شماره سریال سختافزاری سیستم
برخی از کدها خیلی سخت هستند به خصوص کدهایی که قرار است با سخت افزار در ارتباط باشند این کدهای برنامهنویسی از طریق زبان اسمبلی با سخت افزار ارتباط برقرار میکنند، و در DLL قرار داده میشوند تا شما بتوانید از آنها استفاده کنید.
CPU_Serial_Number
شماره سریال CPU
این فانکشن داخلی شماره سریال CPU سیستم مشتری را برای شما به DLL باز میگرداند و شما میتوانید با فانکشن عمومیاین مقدار را به VBA بازگردانید، شماره سریال CPU فقط یک شماره است، حتی اگر CPU دارای چند هسته باشد.
HDD_Count
تعدادهارد دیسکها
این فانکشن داخلی تعدادهارد دیسکهای موجود در رایانه مشتری را به DLL باز میگرداند، به شماره سریالهارددیسک، مراجعه کنید.
USB_Count
تعداد Flash USBهای متصل به سیستم
این فانکشن داخلی تعداد FlashUSBهای موجود در رایانه مشتری را به DLL باز میگرداند، به شماره سریال FlashUSB، مراجعه کنید.
HDD_Serial_Number
شماره سریالهارددیسک شماره1
این فانکشن داخلی شماره سریالهارددیسک سیستم مشتری را برای شما به DLL باز میگرداند و شما میتوانید با فانکشن عمومیاین مقدار را به VBA بازگردانید، شماره سریالهارددیسک میتواند بیش از یک شماره سریال باشد، بستگی به این دارد که شما چندهارددیسک داشته باشید.
شاید کلمه HDD کلمه مناسبی برای همههارد دیسکها نباشد چرا که اکنون نه تنهاهارددیسکهای HDD در رایانههای وجود دارد بلکه SSD و M2 نیز که نوعی SSD است نیز در رایانههای وجود دارند، لیکن از آنجا که توسط سرویسهای سختافزاری اسمبلی همههارددیسکها در یک زمره قرار میگیرند همگیهارددیسکها را در این مقال گنجاندهایم.
شماره سریال هرهارددیسک را میتوانید با شماره آن پیدا کنید، اول ببینید چندهارددیسک دارید (HDD_Count)سپس یکی یکی شماره سریال آنها را ببینید:
HDD_Serial_Number(1)
HDD_Serial_Number(2)
...
نکته:
֍ تعداد فیزیکی هارددیسک مهم است نه پارتیشنها، پارتیشنها دارای Volume هستند که یک شماره سریال نرمافزاری است و ثابت نیست، ضمن اینکه به راحتی قابل تغییر است، اما شماره سریال سختافزاری فیزیکی هارددیسک چه از نوع HDD یا SDD و M2 باشد کاملا ثابت است.
USB_Serial_Number
شماره سریال Flash USB شماره 1
این فانکشن داخلی شماره سریال FlashUSB سیستم مشتری را برای شما به DLL باز میگرداند و شما میتوانید با فانکشن عمومیاین مقدار را به VBA بازگردانید، شماره سریال FlashUSB میتواند بیش از یک شماره سریال باشد، بستگی به این دارد که شما چند FlashUSB داشته باشید.
شماره سریال هر FlashUSB را میتوانید با شماره آن پیدا کنید، اول ببینید چند FlashUSB دارید (USB_Count)سپس یکی یکی شماره سریال آنها را ببینید:
USB_Serial_Number(1)
USB_Serial_Number(2)
...
نکته:
֍ برخی از FlashUSB قابلیت شماره سریال سخت افزاری ندارند، این FlashUSBها معمولا یک شماره سریال تکراری مثل 11111111 دارند، در این گونه موارد شماره سریال برگردانده نخواهد شد.
عملگرهای داخلی تعریف شده توسط کاربر 📄
عملگرهایی که به پروژه اضافه میکنید اگر از خارج از DLL قابل فراخوانی نباشند در این بخش فهرست میشوند تا برای بررسی و ویرایشهای بعدی به خصوص هنگامیکه میخواهید اشکالاتشان را هنگام کامپایل رفع کنید، به آنها رجوع کرده و ویرایش کنید.
اضافه کردن عملگر داخلی جدید➕
برای اضافه کردن یک عملگر حاوی یک فرمول جدید، میتوانید از این گزینه استفاده کنید.
🔧 Extended Codes
کد پیشرفتهتر
این بخش در ارتباط با این گزینه Commands Manual است، در این بخش دست شما کاملا باز است، اگر بر اساس راهنمیCommand Manual پیش بروید.
⚡ Generate All
تولید همه اجزای مورد نظر
این سرشاخه تمام زیر شاخههای خود را اجرا میکند، که شامل موارد زیر است:
🧩 DLL Generate
تولید فایلDLL
این زیر شاخه فایلهای DLL نهایی را تولید میکند، که شامل DLL 32 بیتی و 64 بیتی است.
⚙️ VBA Module Generate
تولید ماژول VBA
این زیر شاخه فایلModule مربوط به VBA نهایی را تولید میکند، که شامل دستوراتی که متناسب با DLL تولید شده ارتباط با DLL را فراهم میسازد.
🧪 VBA Tester Generate
تولید ماژول VBA تست
این زیر شاخه فایلModuleی را تولید میکند در آن SUBهای VBA برای تست DLL بر اساس مقادیر تصادفی برای تست برقراری ارتباط با فانکشنهای DLL را فراهم میکند.
📂 Open DLL Path
باز کردن فولدر خروجی DLL و فایل ماژول VBA
این شاخه فولدری را که در آن فایلهای نهایی شامل DLLها و فایلهای VBA مورد نیاز تولید شدهاند را باز میکند تا بتوانید به آنها راحتتر دسترسی داشته باشید.
❓ Help & Language
راهنماینرمافزار را در اینجا ببینید.

پروژههای منتشر شده برای عموم (Published):
نمایش، ویرایش و چاپ متون فارسی تحت DOS در ویندوز
تبدیل متن فارسی داس به ویندوز اکسلTXLSx
نرم افزار ویرایش DSKKAR00 و DSKWOR00 لیست بیمه
حذف کاراکتر های جدولی از گزارش های تحت DOS
تبدیل متن و جداول گزارش های تحت DOS به Excel
چاپ فرم های ارزشیابی 100 امتیازی کارمندان
حضور و غیاب و موارد انضباطی (ماهناز)
کارنامه ماهانه توصیفی (ماهتوس)
حفاظت از برنامه نویسی در DOS تحت Windows با قفلگذاری روی Flash USB
حفاظت از پروژههای Autoplay Media Studio
حفاظت از پروژههای SetupFactory
حفاظت از پروژههای Multimedia Builder
حفاظت از فایلهای PDF ، بر اساس کدفعالسازی برای هر فایل متناسب با شماره سریال سخت افزاری
تولید فایلهای EXE از فایل های PDF بدون امکان چاپ و ذخیره PDF to EXE (pdf2exe)
حفاظت از فایلهای اکسل Excel، بر اساس تبدیل فایل به EXE
حفاظت از کدهاي برنامه نويسي شده در محيط VBA-Access
تغيير تصوير بک گراند صفحه ورود به Windows 7
بروزآوري آيکن هاي ويندوز Refresh Desktop Icons
فلوچارت و الگوریتم Flowgorithm
تکنیکهای ماکرونویسی در Powerpoint
نرم افزار نمایش محتوای فایل vcf به خصوص فایل های vcf موبایل
تغییر وضوح اسلاید پاورپوینت در استخراج با فرمت تصویر PNG و JPG
دانلود سورس کد PHP نمایش آنلاین کارنامههای PDF
دانلود سورس کد PHP ثبتنام آنلاین
قفل کردن Google Chrome (chromeblocker)
نرمافزار تبدیل فایلهای WEBP به PNG تنها با یک راست کلیک
سامانه آنلاین بارگذاری فایل Excel فیش حقوقی
فایل فشرده ماشین مجازی DOS ویژه VMware Workstation با امکانات فارسی

























