ایجاد لیست کشویی

the_king

مدیرکل انجمن
سلام استاد علی
یه سوال داشتم اگر وقتش رو داشته باشی
این هست که چطور ویرایش بزارم که وقتی یه متن یا شماره تلفن رو اضاف میکنم توی تمامی صفحاتی که اسم همون شرکت یا شخص هست اضاف یا کم بشه؟؟؟؟
ممنونت میشن
سه تا کار هست، یکی اینکه بخواهید برای شرکت خاصی مشخصات قبلی به مشخصات جدیدی تغییر کنه. فرضا شماره 09123456 که دیگه دست شخص دیگری ئه رو به شماره 09126789 تغییر بدید.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، در همه ستون های اطلاعات اون شرکت مقدار Text2.Text رو به Text3.Text تغییر بده :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                Set RNG = sh.Rows(RNG.Row)
                RNG.Replace TextBox2.Text, TextBox3.Text, LookAt:=xlPart
            End If
        Next
    End If
End Sub
تو کد بالا xlPart هست، یعنی همه جای رشته رو بگرد و Replace کن، نه فقط مقدار کلی اش رو. یعنی مهم نیست که مقدار اول رشته است یا آخرش رشته یا میان رشته. هر چی باشه میان رشته عوض می کنه. اگه بجای xlPart از xlWhole استفاده بشه دیگه فقط کل مقدار Cell رو مقایسه میکنه و نه یک قسمت از مقدار رو. فرضا اگه 0912 رو به 98912+ تغییر بدید ممکنه هیچ موردی پیدا نکنه چون انتظار داره کل مقدار فقط عبارت 0912 باشه.

یک حالت دیگه اینه که نمی خواهید دنبال مقدار خاصی بگردید، فقط میخواهید مقدار جدید در اون Cell ثبت بشه، کاری ندارید که مقدار قبلی چی بود.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، مقدار Text3.Text رو در ستون شماره تماس (E) ثبت کن :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                sh.Cells(RNG.Row, "E") = TextBox3.Text
            End If
        Next
    End If
End Sub

یک حالت دیگه اینه که نمیخواهید مقدار قبلی در Cell حذف بشه، میخواهید حفظ بشه و با یکی دو کاراکتر فاصله مقدار جدیدی بهش اضافه کنید.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، مقدار Text3.Text رو به مقدار در ستون شماره تماس (E) اضافه کن :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                sh.Cells(RNG.Row, "E") = Trim(Format(sh.Cells(RNG.Row, "E")) + "  " + TextBox3.Text)
            End If
        Next
    End If
End Sub
 

aghil.m

Member
سه تا کار هست، یکی اینکه بخواهید برای شرکت خاصی مشخصات قبلی به مشخصات جدیدی تغییر کنه. فرضا شماره 09123456 که دیگه دست شخص دیگری ئه رو به شماره 09126789 تغییر بدید.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، در همه ستون های اطلاعات اون شرکت مقدار Text2.Text رو به Text3.Text تغییر بده :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                Set RNG = sh.Rows(RNG.Row)
                RNG.Replace TextBox2.Text, TextBox3.Text, LookAt:=xlPart
            End If
        Next
    End If
End Sub
تو کد بالا xlPart هست، یعنی همه جای رشته رو بگرد و Replace کن، نه فقط مقدار کلی اش رو. یعنی مهم نیست که مقدار اول رشته است یا آخرش رشته یا میان رشته. هر چی باشه میان رشته عوض می کنه. اگه بجای xlPart از xlWhole استفاده بشه دیگه فقط کل مقدار Cell رو مقایسه میکنه و نه یک قسمت از مقدار رو. فرضا اگه 0912 رو به 98912+ تغییر بدید ممکنه هیچ موردی پیدا نکنه چون انتظار داره کل مقدار فقط عبارت 0912 باشه.

یک حالت دیگه اینه که نمی خواهید دنبال مقدار خاصی بگردید، فقط میخواهید مقدار جدید در اون Cell ثبت بشه، کاری ندارید که مقدار قبلی چی بود.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، مقدار Text3.Text رو در ستون شماره تماس (E) ثبت کن :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                sh.Cells(RNG.Row, "E") = TextBox3.Text
            End If
        Next
    End If
End Sub

یک حالت دیگه اینه که نمیخواهید مقدار قبلی در Cell حذف بشه، میخواهید حفظ بشه و با یکی دو کاراکتر فاصله مقدار جدیدی بهش اضافه کنید.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، مقدار Text3.Text رو به مقدار در ستون شماره تماس (E) اضافه کن :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                sh.Cells(RNG.Row, "E") = Trim(Format(sh.Cells(RNG.Row, "E")) + "  " + TextBox3.Text)
            End If
        Next
    End If
End Sub
استاد علی ممنون که فقط همین حرف رو میشه زد و تشکر کرد
اگر بخوام که اسم شرکت رو تغییر بدم چطور میشه
مثلا یه جا توی یه صفحه همون شرکت رو به اسم "شرکت مهندسی معکوس " و توی یه صفحه دیگه به اسم "مهندسی معکوس" ذخیره کرده باشم چطور اسم شرکت رو توی تمام صفحات به یه اسم ذخیره کنم
یا اینکه توی سه صفحه اسم یه شرکت رو با یه حرف کم یا زیاد ذخیره کرده باشم چطور اصلاحش کنم ؟؟؟
ممنونت میشم
 

aghil.m

Member
"یا اینکه توی سه صفحه اسم یه شرکت رو با یه حرف کم یا زیاد ذخیره کرده باشم چطور اصلاحش کنم ؟؟؟"
یا اینکه توی یه صفحه اسم یه شرکت رو با یه حرف کم یا زیاد ذخیره کرده باشم چطور اصلاحش کنم ؟؟؟
 

aghil.m

Member
سه تا کار هست، یکی اینکه بخواهید برای شرکت خاصی مشخصات قبلی به مشخصات جدیدی تغییر کنه. فرضا شماره 09123456 که دیگه دست شخص دیگری ئه رو به شماره 09126789 تغییر بدید.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، در همه ستون های اطلاعات اون شرکت مقدار Text2.Text رو به Text3.Text تغییر بده :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                Set RNG = sh.Rows(RNG.Row)
                RNG.Replace TextBox2.Text, TextBox3.Text, LookAt:=xlPart
            End If
        Next
    End If
End Sub
تو کد بالا xlPart هست، یعنی همه جای رشته رو بگرد و Replace کن، نه فقط مقدار کلی اش رو. یعنی مهم نیست که مقدار اول رشته است یا آخرش رشته یا میان رشته. هر چی باشه میان رشته عوض می کنه. اگه بجای xlPart از xlWhole استفاده بشه دیگه فقط کل مقدار Cell رو مقایسه میکنه و نه یک قسمت از مقدار رو. فرضا اگه 0912 رو به 98912+ تغییر بدید ممکنه هیچ موردی پیدا نکنه چون انتظار داره کل مقدار فقط عبارت 0912 باشه.

یک حالت دیگه اینه که نمی خواهید دنبال مقدار خاصی بگردید، فقط میخواهید مقدار جدید در اون Cell ثبت بشه، کاری ندارید که مقدار قبلی چی بود.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، مقدار Text3.Text رو در ستون شماره تماس (E) ثبت کن :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                sh.Cells(RNG.Row, "E") = TextBox3.Text
            End If
        Next
    End If
End Sub

یک حالت دیگه اینه که نمیخواهید مقدار قبلی در Cell حذف بشه، میخواهید حفظ بشه و با یکی دو کاراکتر فاصله مقدار جدیدی بهش اضافه کنید.
همچین کدی میگه همه Sheet ها رو بگرد و اگه نام شرکت (C1:C100) اون چیزی بود که در TextBox1.Text نوشته شده، مقدار Text3.Text رو به مقدار در ستون شماره تماس (E) اضافه کن :
کد:
Private Sub CommandButton1_Click()
    If TextBox1.Text <> "" Then
        For Each sh In Sheets
            Set RNG = sh.Range("C1:C100")
            Set RNG = RNG.Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
            If Not RNG Is Nothing Then
                sh.Cells(RNG.Row, "E") = Trim(Format(sh.Cells(RNG.Row, "E")) + "  " + TextBox3.Text)
            End If
        Next
    End If
End Sub
سلام استاد علی
جواب سوال رو با همون جوابهایی که برام نوشته بودی پیداکردم
ممنون
فقط اینکه چطور میتونم کاربری برنامه ای که نوشتم رو به چند تا سیستم محدود کنم؟؟؟؟
و انیکه اگر کپی شد مثلا رمز روی برنامه فعال بشه یا نشه ازش استفاده کرد یا اصلا باز نشه؟؟؟
 

the_king

مدیرکل انجمن
سلام استاد علی
جواب سوال رو با همون جوابهایی که برام نوشته بودی پیداکردم
ممنون
فقط اینکه چطور میتونم کاربری برنامه ای که نوشتم رو به چند تا سیستم محدود کنم؟؟؟؟
و انیکه اگر کپی شد مثلا رمز روی برنامه فعال بشه یا نشه ازش استفاده کرد یا اصلا باز نشه؟؟؟
این چیزا دیگه در حد Excel و VBA نیست. با زبان های برنامه نویسی به زحمت میشه همچین محدودیت هایی رو اعمال کرد، اونا خودشون برای این قضیه مشکل زیاد دارند، چه برسه به VBA داخل Excel که خودش حالت ماکرویی داره و میشه راحت جلوی اجرا شدن کد VBA رو گرفت و تغییرش داد. این کارا رو باید روی کدی انجام داد که کامپایل بشه و دیگه کسی کد برنامه تون رو نه بتونه ببینه و نه بتونه تغییر بده، VBA برای اینجور کاربرد ها طراحی نشده.
با ابزار هایی مثل Excel To Exe میتوانید اجرای فایل تون رو به یه یک مدت زمانی خاص یا با یک سریال خاص محدود کنید، ولی باز معلوم نیست امنیت اش چقدر جدی باشه. www.exceltoexe.com
 
آخرین ویرایش:

aghil.m

Member
این چیزا دیگه در حد Excel و VBA نیست. با زبان های برنامه نویسی به زحمت میشه همچین محدودیت هایی رو اعمال کرد، اونا خودشون برای این قضیه مشکل زیاد دارند، چه برسه به VBA داخل Excel که خودش حالت ماکرویی داره و میشه راحت جلوی اجرا شدن کد VBA رو گرفت و تغییرش داد. این کارا رو باید روی کدی انجام داد که کامپایل بشه و دیگه کسی کد برنامه تون رو نه بتونه ببینه و نه بتونه تغییر بده، VBA برای اینجور کاربرد ها طراحی نشده.
با ابزار هایی مثل Excel To Exe میتوانید اجرای فایل تون رو به یه یک مدت زمانی خاص یا با یک سریال خاص محدود کنید، ولی باز معلوم نیست امنیت اش چقدر جدی باشه. www.exceltoexe.com
سلام استاد علی
امکانش هست بشه برنامه اکسل رو بین دو یا چند تا سیستم لینک کرد که با اعمال تغییرات یا چند وقت یک بار آپدیت بشه ؟؟؟
 

the_king

مدیرکل انجمن
سلام استاد علی
امکانش هست بشه برنامه اکسل رو بین دو یا چند تا سیستم لینک کرد که با اعمال تغییرات یا چند وقت یک بار آپدیت بشه ؟؟؟
می توانید یک فایل رو در شبکه بین چند کامپیوتر Share کنید که همگی یک فایل رو ویرایش کنند، اما دیگه امکان Sync کردن دو تا فایل متفاوت با هم رو Excel نداره.
 

aghil.m

Member
می توانید یک فایل رو در شبکه بین چند کامپیوتر Share کنید که همگی یک فایل رو ویرایش کنند، اما دیگه امکان Sync کردن دو تا فایل متفاوت با هم رو Excel نداره.
سلام استاد علی
منظورم همین فایلم بود که براش فرم درست کردم البته با راهنماییهای شما که بشه بین چند تا سیستم باشه و با هر تغییراتی روی بقیه سیستم ها هم اعمال بشه؟؟؟؟
 

the_king

مدیرکل انجمن
سلام استاد علی
منظورم همین فایلم بود که براش فرم درست کردم البته با راهنماییهای شما که بشه بین چند تا سیستم باشه و با هر تغییراتی روی بقیه سیستم ها هم اعمال بشه؟؟؟؟
فایل روی بقیه سیستم ها نیست، یک فایله، اگه چهار سیستم هم داشته باشید، فایل تون فقط یک نسخه است و فقط روی یکی از اون سیستم ها است، بقیه سیستم ها فایلی ندارند، خیلی ساده Open رو که انتخاب می کنند، بجای انتخاب فایل در درایو های :C و :D و ... در Network سیستم مورد نظر (فرضا PC-1 ) رو باز می کنند و در پوشه Share شده فلان فایل اکسل رو باز می کنند. به همین سادگی. از دید Excel هیچ تفاوتی بین فایلی که روی سیستم هست با فایلی که روی شبکه است نیست. اینجا نه بحث برنامه نویسی مطرحه و نه کد نویسی اکسل. فقط یک فایله که بجای اینکه روی سیستم باشه روی شبکه Share شده.
 

aghil.m

Member
فایل روی بقیه سیستم ها نیست، یک فایله، اگه چهار سیستم هم داشته باشید، فایل تون فقط یک نسخه است و فقط روی یکی از اون سیستم ها است، بقیه سیستم ها فایلی ندارند، خیلی ساده Open رو که انتخاب می کنند، بجای انتخاب فایل در درایو های :C و :D و ... در Network سیستم مورد نظر (فرضا PC-1 ) رو باز می کنند و در پوشه Share شده فلان فایل اکسل رو باز می کنند. به همین سادگی. از دید Excel هیچ تفاوتی بین فایلی که روی سیستم هست با فایلی که روی شبکه است نیست. اینجا نه بحث برنامه نویسی مطرحه و نه کد نویسی اکسل. فقط یک فایله که بجای اینکه روی سیستم باشه روی شبکه Share شده.
سلام استاد علی
میتونم برای فرمم یک فرم نام کاربری با پسورد درست کنم که حتما برای استفاده از این برنامه باید نام کاربری و پسوردی که مشخص میشه رو وارد کرد که بشه ازش استفاده کرد؟؟؟؟
و اینکه چطور شیت های فایلم رو غیر فعال کنم که بجز ورود و ویرایش از طریق فرم نشه توی خودشون تغییرات اعمال کرد؟؟؟
ممنونت میشم از وقتی که برام میزاری
 

the_king

مدیرکل انجمن
سلام استاد علی
میتونم برای فرمم یک فرم نام کاربری با پسورد درست کنم که حتما برای استفاده از این برنامه باید نام کاربری و پسوردی که مشخص میشه رو وارد کرد که بشه ازش استفاده کرد؟؟؟؟
و اینکه چطور شیت های فایلم رو غیر فعال کنم که بجز ورود و ویرایش از طریق فرم نشه توی خودشون تغییرات اعمال کرد؟؟؟
ممنونت میشم از وقتی که برام میزاری
امنیت درست و حسابی نداره. کدی برای حفاظت می نویسید که به سادگی میشه جلوی اجراشو گرفت. از اساس از حفاظت فایل های آفیس صرف نظر کنید.
 

aghil.m

Member
امنیت درست و حسابی نداره. کدی برای حفاظت می نویسید که به سادگی میشه جلوی اجراشو گرفت. از اساس از حفاظت فایل های آفیس صرف نظر کنید.
سلام استاد علی
منظورم حفاظت ازش نبود و فقط یه فرم ورود کاربر داشته باشه ؟همین
و اینکه میشه برنامه رو به vb6 انتقال بدم؟؟؟؟؟اگر میشه چطور؟؟؟
ممنون
 

the_king

مدیرکل انجمن
سلام استاد علی
منظورم حفاظت ازش نبود و فقط یه فرم ورود کاربر داشته باشه ؟همین
ممنون
فرم ورود تون با کد VBA ای که می نویسید کار می کنه، خودش که به تنهایی کاری انجام نمیده و VBA هم قابل غیر فعال کردنه. کسی که فایل اکسل رو باز می کنه مجبور نیست که از اون فرم عبور رد بشه؛ میتونه جلوی اجرای کد های VBA رو به سادگی بگیره و بعد کد اش رو ویرایش کنه و به همین راحتی فرم ورود رو دور بزنه.

و اینکه میشه برنامه رو به vb6 انتقال بدم؟؟؟؟؟اگر میشه چطور؟؟؟
اگه بخواهید بانک اطلاعاتی تون همچنان اکسل بمونه، تبدیل اش خیلی راحت نیست و مزیت خاصی هم ایجاد نمی کنه، دلیلش اینه که خوندن و نوشتن در اکسل بخش زیادی از کد تون رو تشکیل خواهد داد که نوشتن اش وقت گیر هم هست.
با توجه به منسوخ بودن VB6 و همسطح بودن زبان اش با VBA که ارتباط ساده تری هم با اکسل داره این انتقال به VB6 مزیت خاصی هم برای برنامه تون نخواهد داشت.
 

aghil.m

Member
فرم ورود تون با کد VBA ای که می نویسید کار می کنه، خودش که به تنهایی کاری انجام نمیده و VBA هم قابل غیر فعال کردنه. کسی که فایل اکسل رو باز می کنه مجبور نیست که از اون فرم عبور رد بشه؛ میتونه جلوی اجرای کد های VBA رو به سادگی بگیره و بعد کد اش رو ویرایش کنه و به همین راحتی فرم ورود رو دور بزنه.


اگه بخواهید بانک اطلاعاتی تون همچنان اکسل بمونه، تبدیل اش خیلی راحت نیست و مزیت خاصی هم ایجاد نمی کنه، دلیلش اینه که خوندن و نوشتن در اکسل بخش زیادی از کد تون رو تشکیل خواهد داد که نوشتن اش وقت گیر هم هست.
با توجه به منسوخ بودن VB6 و همسطح بودن زبان اش با VBA که ارتباط ساده تری هم با اکسل داره این انتقال به VB6 مزیت خاصی هم برای برنامه تون نخواهد داشت.
ممنون استاد علی که وقت گذاشتی
توی چه برنامه ای میتونم همین برنامه vendor list رو بنویسم
اگر برام مهم نباشه که بانک اطلاعاتیم اکسل باشه و فقط یه بانک اطلاعاتی باشه که مثل همین فایلم یه فرم ورود اطلاعات داشته باشه و یه فرم جستجو و ویرایش
تو چه زبان برنامه نویسی میتونم بنویسمش ولی یه بانک اطلاعاتی خوب بتونم ازش در بیارم (البته کاری به امنیتش هم ندارم)
چون دوست دارم کاری رو که شروع کردم خوب از آب دربیاد
و مهم نیست که تا بحال بگوشم نخورده باشه چون یقینا با کمک فرد خوبی مثل شما و دوستان یاد خواهم گرفت
I NEVER LOSE,EITHER I WIN OR I LEARN این جمله ای هست که همیشه روی دسکتاپ نگهش میدارم
بازم ممنون از وقتی که میزاری
 

جدیدترین ارسال ها

بالا