امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
افزایش سرعت دسترسی به اکسل با وی بی
نویسنده پیام
Darg غایب
مدير بازنشسته
*****

ارسال‌ها: 894
موضوع‌ها: 40
تاریخ عضویت: تير ۱۳۸۴

تشکرها : 381
( 702 تشکر در 190 ارسال )
ارسال: #1
افزایش سرعت دسترسی به اکسل با وی بی
سلام
برنامه ضمیمه رو ببینید
آیا می شه سرعت دست رسی به اکسل رو بیشتر کرد چون با این کد ها مکافاتیه تا یک کاربر بخواد یک اکسپورت به اکسل داشته باشه
کد ها رو نگاه کنید باید چه چیزه دیگه ای اضافه بشه تا سرعت از این بالا تر بره؟
(آخرین ویرایش در این ارسال: ۱۶-آبان-۱۳۸۵, ۱۲:۱۳:۲۲، توسط Darg.)
۱۶-آبان-۱۳۸۵, ۱۲:۱۰:۵۳
وب سایت ارسال‌ها
پاسخ
ashkan آفلاین
بنيانگذار سايت
******

ارسال‌ها: 1,553
موضوع‌ها: 80
تاریخ عضویت: آبان ۱۳۸۲

تشکرها : 0
( 140 تشکر در 87 ارسال )
ارسال: #2
RE: افزایش سرعت دسترسی به اکسل با وی بی
من تست کردم خیلی کنده .
شاید بهتر باشه اول اطلاعات رو بریزی تو یه فایل بعد به اکسل بگی بازش کنه.

آشنایی با نظریه زبان باعث شد تا بفهمم کامپیوتر اونی نیست که من میدونم.
۱۷-آبان-۱۳۸۵, ۰۸:۴۴:۰۲
وب سایت ارسال‌ها
پاسخ
Darg غایب
مدير بازنشسته
*****

ارسال‌ها: 894
موضوع‌ها: 40
تاریخ عضویت: تير ۱۳۸۴

تشکرها : 381
( 702 تشکر در 190 ارسال )
ارسال: #3
RE: افزایش سرعت دسترسی به اکسل با وی بی
سلام
از شما متشکرم آقا اشکان که لااقل برنامه رو دیدید. اون روشی که معرفی کردید سرعت رو بالا می بره ممنون اما من بیشتر روی کد ها کار کردم و نتایج قابل قبولی گرفتم.

یادم اومد قبلا آقا حامد ارفعی با آی دی Hamed_Arfaee به من لطف داشتند و در VBA فرمانی رو معرفی کردند که باعث افزایش سرعت نوشتن اطلاعات می شد. درواقع با False کردن مقدار خصوصیت ScreenUpdating میشه باعث این شد که Excel وقتی رو برای به روز کردن اطلاعات نمایشی صرف نکنه و بعدا که ما همه اطلاعات رو نوشتیم با یک بار True کردن ScreenUpdating باعث می شیم که Excel به جای مثلا 2000 بار (این در کد نمونه اتفاق می افتاد) فقط یک بار اقدام به نوسازی محتویات صفحه نمایش کنه.
از طرفی پیش خودم فکر کردم با وجود False بودن Visible پنجره Excel حتی False بودن ScreenUpdating کارساز نباشه برای همین امتحان کردم کد زیر رو اضافه کردم:
.Application.ScreenUpdating = False
و در پایان نوشتن اطلاعات در سلول های اکسل کد زیر رو آوردم:
.Application.ScreenUpdating = True

بدون این دو خط در برنامه قبلی زمان روی سیستم من 57 ثانیه بود (کپشن فرم اصلی زمان رو نشون می ده در پایان عملیات)
اما با False و True کردن به موقع خصوصیت ScreenUpdating زمان به 47 ثانیه کاهش پیدا کرد که این خودش بسی جای شکر داره.
تا یادم نرفته این رو هم بگم که روشی که در بالا معرفی شد در صورتی که پنجره Excel در حالت مشاهده (Visible=True) باشه سرعت رو تا 10 برابر هم بیشتر می کنه!!!

اما برای کاری که من می خوام انجام بدم حتی زمان 47 ثانیه هم خیلی زیاده.

بعدا یاد یه قضیه ای افتادم:
برای اینکه یک مجموعه سلول رو از Excel دریافت کنیم Excel اون مجموعه رو در آرایه ماتریکس مانندی به Vb تحویل می ده.
این شد که با خودم گفتم حتما عکسش هم ممکنه!
یعنی ما به جای اینکه بیایم تک تک سلول ها رو مقدار دهی کنیم. بیاییم و یک آرایه مربعی تشکیل بدیم و با مقدار دهی اون آرایه بعدا و فقط با یک خط کد بتونیم یک جا اطلاعات رو به Excel وارد کنیم.
این کار رو کردم و به نتیجه رسیدم.

زمان روش جدید نه دهم ثانیست Cool Happy
یعنی 63 برابر بیشتر از روش های قبلی Clap
کد ضمیمه همون برنامه قبلی با این تفاوت که کار اون رو به جای 57 ثانیه در نه دهم ثانیه انجام میده.

البته کار های دیگه ای هم کردم:
مثلا باز به جای اینکه بیام و تک تک سلول ها رو تغییر اندازه فونت بدم اومدم و همه یک مجموعه رو یکجا تغییر اندازه فونت دادم باید کد روببینید.
۱۹-آبان-۱۳۸۵, ۰۲:۱۶:۱۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : لفوری
perspolis آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: بهمن ۱۳۸۶

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #4
RE: افزایش سرعت دسترسی به اکسل با وی بی
واقعا عالی بود
ارزش یه تشکر درست و حسابی رو داره
۱۰-بهمن-۱۳۸۶, ۱۲:۵۳:۴۹
ارسال‌ها
پاسخ
gmsara آفلاین
تازه وارد

ارسال‌ها: 23
موضوع‌ها: 5
تاریخ عضویت: آذر ۱۳۸۴

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #5
RE: افزایش سرعت دسترسی به اکسل با وی بی
سلام
می شه بگید این برنامه ضمیمه کجاست؟ من شدیدا به روشش نیاز دارم. یا اگه ممکنه راهنمایی کنید.
۱۴-مرداد-۱۳۸۸, ۰۹:۴۳:۵۸
ارسال‌ها
پاسخ
MT888 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 44
موضوع‌ها: 7
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35
( 17 تشکر در 12 ارسال )
ارسال: #6
RE: افزایش سرعت دسترسی به اکسل با وی بی
سلام در تاپیک زیر میتونید دانلودش کنید
http://forum.iranled.com/showthread.php?tid=6250
۱۴-مرداد-۱۳۸۸, ۰۹:۵۸:۲۳
ارسال‌ها
پاسخ
gmsara آفلاین
تازه وارد

ارسال‌ها: 23
موضوع‌ها: 5
تاریخ عضویت: آذر ۱۳۸۴

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #7
RE: افزایش سرعت دسترسی به اکسل با وی بی
(۱۴-مرداد-۱۳۸۸, ۰۹:۵۸:۲۳)MT888 نوشته است: سلام در تاپیک زیر میتونید دانلودش کنید
http://forum.iranled.com/showthread.php?tid=6250

سلام
من اون تاپیک را دیدم، ولی اون کدها تغییراتی را که اینجا در موردش صحبت شده را نداره!
۱۷-مرداد-۱۳۸۸, ۰۹:۳۲:۴۰
ارسال‌ها
پاسخ
MT888 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 44
موضوع‌ها: 7
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35
( 17 تشکر در 12 ارسال )
ارسال: #8
RE: افزایش سرعت دسترسی به اکسل با وی بی
سلام منم از این دو خط کد استفاده کردم ولی زمان تغییر نکرد فکر میکنم این کدهارو جای درستی نزاشتم واسه همین تغییری ندیدم
۱۷-مرداد-۱۳۸۸, ۱۱:۳۳:۵۰
ارسال‌ها
پاسخ
relax_cp آفلاین
كاربر دو ستاره
**

ارسال‌ها: 97
موضوع‌ها: 35
تاریخ عضویت: دى ۱۳۸۶

تشکرها : 27
( 16 تشکر در 14 ارسال )
ارسال: #9
RE: افزایش سرعت دسترسی به اکسل با وی بی
(۱۹-آبان-۱۳۸۵, ۰۲:۱۶:۱۷)Darg نوشته است: کد ضمیمه همون برنامه قبلی با این تفاوت که کار اون رو به جای 57 ثانیه در نه دهم ثانیه انجام میده.

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

هر آنچه براي خود مي پسندي براي ديگران نيز بپسند و هر آنچه براي خود نمي پسندي براي هيچكس مپسند.
(آخرین ویرایش در این ارسال: ۱۷-مرداد-۱۳۸۸, ۱۹:۰۲:۱۳، توسط relax_cp.)
۱۷-مرداد-۱۳۸۸, ۱۸:۳۵:۲۳
وب سایت ارسال‌ها
پاسخ
Darg غایب
مدير بازنشسته
*****

ارسال‌ها: 894
موضوع‌ها: 40
تاریخ عضویت: تير ۱۳۸۴

تشکرها : 381
( 702 تشکر در 190 ارسال )
ارسال: #10
RE: افزایش سرعت دسترسی به اکسل با وی بی
نقل قول: با تشکر از شما فقط اگر میشه کد اصلاح شده نهایی را با همان ماتریس بذارید.
متاسفانه این تاپیک برای خیلی وقت پیشه و من اون کد قبلی رو دیگه ندارم

اما روی همین کدی که خودتون گذاشتید توضیح می دم
ببینید منظر این هست که شما به جای اینکه بیاید سلول ها رو یکی یکی مقدار دهی کنید (نمونش تو کد شما 3*5 هزار بار این اتفاق می افتاد) بیاید و یک آرایه بسازید اون آرایه رو مقدار دهی کنید و بعد یک باره آرایه رو به اکسل بدید.
این کد:

کد:
Dim aaa(1 To 5000, 1 To 3) As String
Me.Caption = Second(Now)
Dim i As Integer
Dim mApplication  As New Excel.Application
Dim mWorkbook     As New Excel.Workbook
         Set mWorkbook = mApplication.Workbooks.Add
Dim mWorksheet    As New Excel.Worksheet
         Set mWorksheet = mWorkbook.Sheets.Add
         mWorksheet.Name = "Test Sheet"
mApplication.Visible = False
Application.ScreenUpdating = False
For i = 1 To 5000
    'With mWorksheet.Cells
    '    .Cells(1, i) = 10
    '    .Cells(2, i) = 22
    '    .Cells(3, i) = .Cells(1, i) + .Cells(2, i)
    'End With
        aaa(i, 1) = 10
        aaa(i, 2) = 22
        aaa(i, 3) = aaa(i, 1) + aaa(i, 2)
Next
'For i = 1 To 5000
'    With mWorksheet.Cells
'        .Cells(i, 1) = aaa(i, 1)
'        .Cells(i, 2) = aaa(i, 2)
'        .Cells(i, 3) = aaa(i, 1) + aaa(i, 2)
'    End With
'Next

mWorksheet.Range("A1:C5000") = aaa

Application.ScreenUpdating = True
    mApplication.Visible = True
Me.Caption = Me.Caption & "   " & Second(Now)
تو این کد اگر دقت کنید ابتدا من ارایه شما رو اصلاح کردم که در تحویل اون به اکسل اطلاعات به هم نریزند بعد اون یک خطی که اضافه کردم کار رو تموم کرد:

کد:
mWorksheet.Range("A1:C5000") = aaa
به این ترتیب کد شما که روی سیستم من 11 ثانیه زمان اجراش بود در کمتر از یک ثانیه اجرا شد!
امید وارم مفهموم بوده باشه
۱۹-مرداد-۱۳۸۸, ۲۳:۲۱:۴۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : فاطمه وطن دوست, MT888, relax_cp
gmsara آفلاین
تازه وارد

ارسال‌ها: 23
موضوع‌ها: 5
تاریخ عضویت: آذر ۱۳۸۴

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #11
RE: افزایش سرعت دسترسی به اکسل با وی بی
(۱۹-مرداد-۱۳۸۸, ۲۳:۲۱:۴۱)Darg نوشته است:
نقل قول: با تشکر از شما فقط اگر میشه کد اصلاح شده نهایی را با همان ماتریس بذارید.
متاسفانه این تاپیک برای خیلی وقت پیشه و من اون کد قبلی رو دیگه ندارم

اما روی همین کدی که خودتون گذاشتید توضیح می دم
ببینید منظر این هست که شما به جای اینکه بیاید سلول ها رو یکی یکی مقدار دهی کنید (نمونش تو کد شما 3*5 هزار بار این اتفاق می افتاد) بیاید و یک آرایه بسازید اون آرایه رو مقدار دهی کنید و بعد یک باره آرایه رو به اکسل بدید.
این کد:

کد:
Dim aaa(1 To 5000, 1 To 3) As String
Me.Caption = Second(Now)
Dim i As Integer
Dim mApplication As New Excel.Application
Dim mWorkbook As New Excel.Workbook
Set mWorkbook = mApplication.Workbooks.Add
Dim mWorksheet As New Excel.Worksheet
Set mWorksheet = mWorkbook.Sheets.Add
mWorksheet.Name = "Test Sheet"
mApplication.Visible = False
Application.ScreenUpdating = False
For i = 1 To 5000
'With mWorksheet.Cells
' .Cells(1, i) = 10
' .Cells(2, i) = 22
' .Cells(3, i) = .Cells(1, i) + .Cells(2, i)
'End With
aaa(i, 1) = 10
aaa(i, 2) = 22
aaa(i, 3) = aaa(i, 1) + aaa(i, 2)
Next
'For i = 1 To 5000
' With mWorksheet.Cells
' .Cells(i, 1) = aaa(i, 1)
' .Cells(i, 2) = aaa(i, 2)
' .Cells(i, 3) = aaa(i, 1) + aaa(i, 2)
' End With
'Next

mWorksheet.Range("A1:C5000") = aaa

Application.ScreenUpdating = True
mApplication.Visible = True
Me.Caption = Me.Caption & " " & Second(Now)
تو این کد اگر دقت کنید ابتدا من ارایه شما رو اصلاح کردم که در تحویل اون به اکسل اطلاعات به هم نریزند بعد اون یک خطی که اضافه کردم کار رو تموم کرد:

کد:
mWorksheet.Range("A1:C5000") = aaa
به این ترتیب کد شما که روی سیستم من 11 ثانیه زمان اجراش بود در کمتر از یک ثانیه اجرا شد!
امید وارم مفهموم بوده باشه


با تشکر از شما
ممکنه توضیح بدید اگه اطلاعات یک جدول بخواهیم بریزیم داخل EXCEL باید چه کار کرد؟ که همین سرعت هم حفظ شود؟

ممنون می شم اگه راهنمایی بفرمایید
۲۱-مرداد-۱۳۸۸, ۱۳:۴۰:۵۳
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  بستن برنامه اکسل در حال اجرا aleas 1 1,064 ۲۳-شهریور-۱۳۹۸, ۱۷:۲۴:۱۱
آخرین ارسال: Di Di
Shy [فوری] خواندن فایل تکست و تبدیل آن به فایل اکسل توسط CommandButton ahmadelectron 1 3,530 ۰۵-خرداد-۱۳۹۴, ۱۶:۵۲:۲۷
آخرین ارسال: Ghoghnus
  [سوال] مشکل جابجا کردن مقدار متغیر از ThisWorkbook به Worksheet_Change در اکسل eppagh 0 2,200 ۰۸-اسفند-۱۳۹۳, ۲۱:۴۷:۵۴
آخرین ارسال: eppagh
  [سوال] اجرای کد با کلیک روی لینک نوشته در اکسل eppagh 0 2,334 ۰۳-بهمن-۱۳۹۳, ۱۶:۱۹:۰۴
آخرین ارسال: eppagh
  [سوال] مقایسه سرعت متدهای آماده vba با کدهای دستنویس eppagh 1 2,176 ۱۰-دى-۱۳۹۳, ۱۳:۱۶:۱۶
آخرین ارسال: babyy
  [سوال] به دست آوردن ماکسیمم یا مینیمم مقدار یک رنج اکسل eppagh 3 4,164 ۰۹-دى-۱۳۹۳, ۱۵:۳۲:۳۷
آخرین ارسال: eppagh
Question [سوال] فرم شناور روی شیت اکسل eppagh 0 2,217 ۱۲-شهریور-۱۳۹۳, ۱۴:۲۴:۱۴
آخرین ارسال: eppagh
  ويروسي براي كاهش سرعت اينترنت rap0661 10 9,271 ۲۶-مرداد-۱۳۹۳, ۱۷:۴۶:۱۱
آخرین ارسال: Vb6Moderator
Question [سوال] کنترل پنجره Save as اکسل eppagh 3 2,806 ۱۳-مرداد-۱۳۹۳, ۱۴:۰۶:۰۰
آخرین ارسال: babyy
  [سوال] ترکیب متغیر و نوشته برای آرگومان‌ها در vba اکسل eppagh 6 4,971 ۰۸-مرداد-۱۳۹۳, ۱۰:۵۷:۱۴
آخرین ارسال: eppagh

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS