PDA

View Full Version : مبتدی: عدم تغییر در شی بعد از مقدار دهی مجدد



kolibri
یک شنبه 03 آذر 1398, 15:41 عصر
سلام
من برای یک کاری گرفتار اکسل و VB شدم و دست و پا شکسته دارم میرم جلو
در بخشی از برنامه میام بر مبنای یک لیست دیگر، باید یه سری آیتم ها رو جمع کنم!

For d = date1 To date2 Dim O As New MyList
Str = 0
Pub = 0
Prd = 0
O.Ave_Product = lsh.Range("K1")
O.Ave_Story = lsh.Range("K2")
O.Day = d
For Each x In Lst
If CDate(x.key) = d Then
Str = Str + x.Story
Pub = Pub + x.Publish
Prd = Prd + x.Product
End If
Next x
O.Story = Str
O.Publish = Pub
O.Product = Prd
OutLst.Add O

Next d

اما وقتی خروجی می گیرم:
Dim z As Integerz = 1
For Each lx In OutLst
sh.Cells(z, 22) = OutLst(z).Day
sh.Cells(z, 23) = OutLst(z).Product
sh.Cells(z, 24) = OutLst(z).Publish
sh.Cells(z, 25) = OutLst(z).Story
sh.Cells(z, 26) = OutLst(z).Ave_Product
sh.Cells(z, 27) = OutLst(z).Ave_Story
z = z + 1
Next lx

همه خروجی ها یکسان هست. در حای که چک کردم که در مواردی شرط مورد نظر در کد بلاک اول اجرا شده و مقدار ها تغییر می کند اما خروجی بدین صورت هست:


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5


3/19/2020
0
0
0
2
5



مشکل چیست؟

the king
یک شنبه 03 آذر 1398, 16:13 عصر
Dim New در VBA میاد موقع تعریف متغیر شی جدید بهش اختصاص میده، نه هر دفعه که به Dim برسه.
برای همین در VBA این کد :


Dim i As Integer
For i = 1 To 2
Dim x As New MyList
Next i


معادل این کد نیست :


Dim i As Integer
Dim x As MyList
For i = 1 To 2
Set x = New MyList
Next i


شما چون در حلقه تون O رو با Set O = New MyList تجدید نمی کنید در کل حلقه d دارید صرفا با یک MyList کار می کنید که داخل حلقه تعویض نمیشه، صرفا همون بار اول موقع تعریف شدن New شده.
برای همین همه آیتم های درج شده یک شیء واحد هستند.