PDA

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



smartman
2012/03/23, 19:45
با سلام خدمت همه کاربران

های لایت کردن سطر (ستون) جاری یک لیست در قالب یک تکنیک کاربردی در فایل ضمیمه، نشان داده شده است.


3140

3141





Sub Auto_Open()
On Error Resume Next

Dim CheckRegistry As String
CheckRegistry = GetSetting(appname:="SigmaPlot", section:="Excel", _
key:="Addin", Default:="0")


If Dir(ThisWorkbook.Path + "\Sigmaplot.xla") = "" Then
SPRemoveMenu
ResetRegistry
End If

End Sub
Sub SPRemoveMenu()
On Error Resume Next

Dim spButtonCheck As CommandBarControl
Dim spCommandbar As CommandBarControl

Set spCommandbar = CommandBars("Worksheet Menu Bar").Controls("Insert")
Set spCommandbar = CommandBars(1).Controls(4) 'add for foreign OS

For Each spButtonCheck In spCommandbar.Controls
If spButtonCheck.Caption = "SigmaPlot Graph" Then
spButtonCheck.Delete
Application.CommandBars("Standard").Controls(20).Delete
Application.CommandBars(3).Controls(20).Delete 'add for foreign OS
Exit Sub
End If
Next

End Sub
Sub ResetRegistry()

Dim CheckRegistry As String

' Check the registry for an entry
CheckRegistry = GetSetting(appname:="SigmaPlot", section:="Excel", _
key:="Addin", Default:="0")

If CheckRegistry = 1 Then
'Set the registry setting for sigmaplot addin
SaveSetting appname:="SigmaPlot", section:="Excel", _
key:="Addin", setting:=0
End If

End Sub

m_d6712
2012/03/24, 05:24
یکی از دوستان سوالی مطرح کرد درباره این تاپیک که فکر کردم خوب باشه جوابشو اینجا هم بدهم.





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


with
set
is Nothing
xlColorIndexAutomatic
Intersect

.............با تشکر.............


سلام دوست عزیز.


1- with عملکرد ساده ای داره. فقط برای کوتاه کردن کد نویسی ازش استفاده می کنن.

مثلا:
به جای


Range("B2:P16").Font.Bold = False
Range("B2:P16").Interior.ColorIndex = xlColorIndexAutomatic
Range("B2:P16").Font.color = blue

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


With Range("B2:P16")
.Font.Bold = False
.Interior.ColorIndex = xlColorIndexAutomatic
.Font.color = blue
End With


2- set در زبان ویژوال بیسیک برای نسبت دادن یک شی به شی دیگر استفاده میشه:
اولا باید فرق شی و متغیر رو بدونی.
مثلا

dim a as integer
خوب این یک متغیر است و به راحتی برای نسبت دادن از یک مساوی استفاده میشه کرد. مثلا

a= target.row

اما range یک شی هست. همچنین workbook, worksheet, و row و column. اینها شی هستند که برخی باز شامل شی هایی هم میشوند. مثلا range ممکنه شامل چند row بشه و row ممکنه شامل چند cell بشه. در حالی که range خودش شی ای از شی های worksheet هایی هست که خود این worksheet ها فرزند یک workbook هستش. :)

حالا این بحث خیلی مفصلی هست. اما به هر صورت برای نسبت دادن یک شی به یک شی جدید از عبارت set استفاده می کنیم.

مثلا
dim a as range خوب این یک شی از نوع range هست
حالا می گیم

a = range("A1:A10") غلطه
باید بنویسی:

set a = range("A1:A10")

اگر اینطور عمل کنی. a و
range("A1:A10") معنی واحدی میدن.
یعنی a.intorior.backcolor رنگ پشت زمینه اون منطقه A1 نا A10 رو معنی میده

a.intorior.backcolor= black


با این شی ها کارای زیادی میشه کرد. یه مطالعه بکنشون.
برای پیدا کردن شی مادر یا شی کافیه بنویسی:

dim b as range
set b = a.Parent

به این صورت.




3- is nothing در زبان VB معنی NULL رو میده. یعنی یک شی ای هنوز به شی خاصی نسبت داده نشده است. ببین یک متغیر وقتی تعریف میشه مقدار دهی اولیه میشه. اگر هم نشه به هرحال یک مقدار داخل خودش داره. اما یک شی وقتی تعریف میشه NULL هست. یعنی به هیچ چیزی اشاره نمی کنه. مگر شما به یک شی نسبت بدهیش:

مثلا:

dim a as range
تا الان a یک شی NULL هست.

باید یکی از دو روش زیر رو انتخاب کنی. بگی a یک شی جدید است یا a یک شی ای هست که الان وجود داره.

set a = new range به مفهوم اینه که a یک شی جدید است.

set a = range("A1:A10") به مفهوم اینه که a همون شی ای است که الان وجود داره و به خونه های A1 تا A10 اشاره داره.


پس وقتی میگیم if a is nothing then یعنی اگر هنوز a وجود نداره یعنی هیچ جایی واسه a تعریف نشده. این کارو بکن.

4- xlColorIndexAutomatic نماینده کد رنگ اتوماتیک هست. اینو بجای یک عدد که نمایند رنگ هست میتونی استفاده کنی. البته اگر حافظت خوبه می تونی عدد رو هم حفظ کنی :دی

5- Intersect دو تا range مختلف رو به عنوان ورودی می گیره و فضای مشترک بین این دو رو برای ما مشخص می کنه. می تونی از این کد برای اینکه بدونی دو range با هم نقطه مشترک دارن یا نه استفاده کنی.



موفق و موید باشی.
[hr]





و اما در مورد خود تاپیک





با سلام خدمت همه کاربران

های لایت کردن سطر (ستون) جاری یک لیست در قالب یک تکنیک کاربردی در فایل ضمیمه، نشان داده شده است.

تکنیک کاربردی1066 (http://parsaspace.com/files/4202064884/Technique1066.xlsm.html)


سلام.
من فایل شمارو دیدم. خیلی خوب بود و زیبا.

فقط چند نکته که فکر کردم به بهبود فایل شما کمک می کنه.

همه چیز خوب بنظر میرسه غیر از کند بودن فایل شما.
ابتدا به نظرم کند رسید. خوب تصمیم گرفتم عوض 550 سطر از عدد 30000 استفاده کنم.
چه اتفاقی می افتد؟
فایل بسیار کند میشود.

1- در ابتدا شما از تابع intersect استفاده کردید که اصلا نیازی نیست. در واقع intersect برای بدست آوردن range ای است که بین دو range ورودی مشترک است. اما هدف شما این نیست. من فکر میکنم که هدفتون این بوده که متوجه بشوید که آیا target درون range مورد نظر هست یا نه؟
خوب این کار رو با استفاده از target.row و target.column و row و column های اون range تون با 4 عملیات میشه محاسبه کرد. نیازه نیست اگر 30000 هزار ردیف داریم نقاط مشترک همه 30000 تارو بدست بیاوریم که خودش یک فرآیند زمان براست.


2- Range("A2:H550").Font.Bold = False
Range("A2:H550").Interior.ColorIndex = xlColorIndexAutomatic

این دو عبارت باز خیلی زیاد محاسبات لازم داره. کافیه سطر و سلولی که تغییر میدهید رو با 2 عدد همیشه در نظر بگیرید. مثلا شماره سطر و ستون مورد نظر رو در خانه هایXY و XX ذخیره کنید. در مرحله بعد فقط نیاز است اون سطر و خونه مورد نظر رو به حالت اول برگردونید.


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

موفق باشید.

smartman
2012/03/24, 16:31
جناب استاد داوری
از حسن توجه و نظر شما و دوستانی که از پاسخ شما تشکر کردند بینهایت سپاس گزارم.
با اینکه از ابتدا متوجه این مشکل بودم اما دقیقا نمیدونستم که باید چکار کنم.

یاد یک ضرب المثل افتادم که میگه «املای نانوشته، غلط نداره» خلاصه اینکه با توجه به راهنمایی های شما نتیجتا فایل نهایی به این شکل دراومد. (http://parsaspace.com/files/8000064884/Technique1066-2.xlsm.html)

در ضمن هر دو فایل با کاربرگهای LTR عملکرد به مراتب بهتری دارند که دلیلشو نمیدونم.

Javid Mokhtari
2012/03/24, 17:25
با سلام و تشکر از دوست خوبمون.
البته هنوز اشکالات ریز و درشتی هم داره که این هم طبیعی هستش.
یکی از ایرادهاش اینه که وقتی فایل باز میشه ،اگه سطری به غیر از سطری که در هنگام باز شدن فایل فعال است رو انتخاب کنی،سطر قبلی در حالت انتخاب میمونه.
که با یک کد ساده در رویدادهای مختلف میشه حلش کرد.مثل:

Private Sub Workbook_Open()
Range("a2:h3000").Interior.ColorIndex = xlColorIndexNone
End Sub

~M*E*H*D*I~
2012/03/27, 21:02
سلام
راستش من توضیحات دوستان رو نخوندم و فقط فایل رو دیدم دستمون 2 تا شیت داشت یکی فقط سطر رو هایلایت میکرد یکیم که مثل جدول ضرب بود سطر و ستون رو هایلایت میکرد راستش من این کد رو برداشتم یکم ذسکاری کردم واسه هایلایت کردن ردیف اینطوری اصلا نیاز به انتخاب range نیست سرعتشم بالاست حالا نمیدونم دوستمون چرا به اون صورت عمل کرده به هر حال این هم روشیه

Ali Parsaei
2014/04/23, 17:01
داشتم در اينترنت دنبال مطلبي راجع به SelectionChange مي گشتم، به کدي برخوردم جهت BOLD کردن متن سطر فعال، ديدم جالب است گفتم در سايت بهش اشاره کنم، قبلش گفتم بگردم ببينم قبلا" در سايت چيزي راجع به آن آمده يا نه که به اين موضوع برخوردم، واقعا" دوستان قديمي سايت زحمت کشيده اند. حيف است که اين مطالب با کهنه شدن وسط مطالب ديگر گم مي شود، کاش مي شد کاري کرد که به صورتي هميشه در صدر باشند، البته ظاهرا" سايت اين امکان را داراست ولي ما کمتر از آن استفاده مي کنيم. اين مطلب را نوشتم تا شايد به بهانه نوشته من دوباره اين مطلب در صدر قرار گرفته و مورد توجه قرار گيرد.
اين هم کدي که گفتم (بد نيست پايان اين موضوع اضافه شود):

Dim x As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
ActiveCell.EntireRow.Font.Bold = True
If x = Empty Then
x = ActiveCell.Row
ElseIf Not x = ActiveCell.Row Then
Rows(x).EntireRow.Font.Bold = False
End If
x = ActiveCell.Row
End Sub


منبع: http://support.microsoft.com/kb/213193

علی فاطمی
2014/04/23, 17:18
سلام
راستش من توضیحات دوستان رو نخوندم و فقط فایل رو دیدم دستمون 2 تا شیت داشت یکی فقط سطر رو هایلایت میکرد یکیم که مثل جدول ضرب بود سطر و ستون رو هایلایت میکرد راستش من این کد رو برداشتم یکم ذسکاری کردم واسه هایلایت کردن ردیف اینطوری اصلا نیاز به انتخاب range نیست سرعتشم بالاست حالا نمیدونم دوستمون چرا به اون صورت عمل کرده به هر حال این هم روشیه
با سلام این فایل فکر کنم بدلیل قدیمی بودن قابل رویت نیست لطفا اگر در آرشیو موجوده مجددا قرار بدین تا استفاده کنیم
ممنون

mokaram
2014/04/24, 08:12
با سلام این فایل فکر کنم بدلیل قدیمی بودن قابل رویت نیست لطفا اگر در آرشیو موجوده مجددا قرار بدین تا استفاده کنیم
ممنون

تو آرشیوم اینا پیدا کردم خدمت شما