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

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

تشکرها : 27
( 16 تشکر در 14 ارسال )
ارسال: #12
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 ثانیه زمان اجراش بود در کمتر از یک ثانیه اجرا شد!
امید وارم مفهموم بوده باشه

از اصلاح کد متشکرم
سوالی دارم: اگر آرایه از 0 شروع شود مانند: dim aaa(10,20) as string
باید به شکل زیر تغییر انجام شود:
کد:
mWorksheet.Range("A1:C20") = aaa
و یا اینکه باید به روش دیگری انجام دهیم؟
ممنون

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

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

تشکرها : 381
( 702 تشکر در 190 ارسال )
ارسال: #13
RE: افزایش سرعت دسترسی به اکسل با وی بی
(۲۱-مرداد-۱۳۸۸, ۱۳:۴۰:۵۳)gmsara نوشته است: ممکنه توضیح بدید اگه اطلاعات یک جدول بخواهیم بریزیم داخل EXCEL باید چه کار کرد؟ که همین سرعت هم حفظ شود؟
مظورتون از جدول چیه؟! نمی دونم شاید منظورتون جدول دیتابیس هست!

اما این روش یه روش کلی هست برای افزایش سرعت, به این ترتیب که در اون محلی که سرعت کند می شه کار رو یه سره می کنیم.
اون زمان وقتی هست که وی بی می خواد ارتباطی با اکسل برقرار کنه. خوب.
توی این روش ما اومدیم اول تکلیف همه اطاعاتمون رو روشن کردیم (درون یک آرایه ماتریکسی) بعد اون رو فقط یک بار (یک بار برقراری همون ارتباط زمان گیر) به اکسل ارسال می کنیم.
این خیلی مفهموم هست

یا به عنوان نمونه شما می خواید 100 تا سلول رو تغییر رنگ بدید. به جای اینکه بیاید داخل یه چرخه 100 بار با اکسل ارتباط برقرار کنید و 100 بار فرمان تغییر رنگ رو بدید میاید و مثلا با فراخوان Range("A1:A100") کار رو در یک فرمان تموم می کنید و به این ترتیب سرعت تقریبا 100 برابر بیشتر می شه.

نقل قول: ...اگر آرایه از 0 شروع شود...
مشخصه که اکسل تمام ارایه ای که بهش تحویل می دید رو به عنوان خانه های سلول در نظر می گیره.
خوب اگر یه آرایه تشکیل بدید که از 0 تا 10 بیش باشه مشخصا اکسل هم ایندکس های یک تا 11 رو برای این آرایه در نظر می گیره. این کاملا در اختیار شماست.
اونجا که آرایه خودمون رو به شکل 1 تا 10 تعریف می کنیم در واقع کار مقدار دهی خودمون رو راحت می کنیم.
نکته اصلی که ما باید خودمون رو باهاش سازگار کنیم این هست که ایندکس های اکسل از یک شروع می شه نه از صفر.
۲۱-مرداد-۱۳۸۸, ۱۶:۲۹:۴۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : MT888
relax_cp آفلاین
كاربر دو ستاره
**

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

تشکرها : 27
( 16 تشکر در 14 ارسال )
ارسال: #14
RE: افزایش سرعت دسترسی به اکسل با وی بی
آره چون وقتی آرایه من از صفر شروع میشه و مقدار دهی در ماتریکس انجام می دم مشکلی نیست ولی وقتی به اکسل متصلش می کنم میاد و ستون اول را کلا خالی می کنه و از ستون دوم مقداردهی می کنه.
پس با تغییر ایندکس اعداد مشکل حل می شه؟

هر آنچه براي خود مي پسندي براي ديگران نيز بپسند و هر آنچه براي خود نمي پسندي براي هيچكس مپسند.
۲۲-مرداد-۱۳۸۸, ۰۸:۲۶:۱۱
وب سایت ارسال‌ها
پاسخ
gmsara آفلاین
تازه وارد

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

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #15
RE: افزایش سرعت دسترسی به اکسل با وی بی
(۲۱-مرداد-۱۳۸۸, ۱۶:۲۹:۴۲)Darg نوشته است:
(۲۱-مرداد-۱۳۸۸, ۱۳:۴۰:۵۳)gmsara نوشته است: ممکنه توضیح بدید اگه اطلاعات یک جدول بخواهیم بریزیم داخل EXCEL باید چه کار کرد؟ که همین سرعت هم حفظ شود؟
مظورتون از جدول چیه؟! نمی دونم شاید منظورتون جدول دیتابیس هست!

بله منظورم یک TABLE از یک DATABASE هست! من اگه یک TABLE با 30 فیلد و 16000 رکورد چطور توی یک ماتریکس بریزم؟! تک تک فیلد ها را باید اسم ببرم!!!
(آخرین ویرایش در این ارسال: ۲۷-مرداد-۱۳۸۸, ۰۹:۳۷:۳۸، توسط gmsara.)
۲۷-مرداد-۱۳۸۸, ۰۹:۳۳:۲۳
ارسال‌ها
پاسخ
relax_cp آفلاین
كاربر دو ستاره
**

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

تشکرها : 27
( 16 تشکر در 14 ارسال )
ارسال: #16
RE: افزایش سرعت دسترسی به اکسل با وی بی
فکر کنم یکی از راه حل هات اینه که یک بار این 30 فیلد را بنویسی بعد ازش استفاده کنی.

هر آنچه براي خود مي پسندي براي ديگران نيز بپسند و هر آنچه براي خود نمي پسندي براي هيچكس مپسند.
۲۷-مرداد-۱۳۸۸, ۰۹:۵۴:۳۵
وب سایت ارسال‌ها
پاسخ
gmsara آفلاین
تازه وارد

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

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #17
RE: افزایش سرعت دسترسی به اکسل با وی بی
(۲۷-مرداد-۱۳۸۸, ۰۹:۵۴:۳۵)relax_cp نوشته است: فکر کنم یکی از راه حل هات اینه که یک بار این 30 فیلد را بنویسی بعد ازش استفاده کنی.

بله، ولی من دنبال راه حل منطقی هستم. فکر این هم کنید ممکنه این 30 تا بشه 60 تا فیلد
۲۷-مرداد-۱۳۸۸, ۱۷:۰۹:۴۶
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  بستن برنامه اکسل در حال اجرا 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

پرش به انجمن:


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

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