|
Тема
|
как да оптимизирам кода?
|
|
Автор | ACtron-B (Нерегистриран) |
Публикувано | 02.03.06 11:54 |
|
Някой може ли да ми помогне с идеи за оптимизация на долният код. Той служи за търсене в колоната G на Sheet1: Text1.Text = ExcelApp.Sheets("Sheet1").Range("G" & vertical). Проблемът ми е точно тук, много се бави докато прерови колоната с 2000 реда. Ясно ми е че много от вас ще кажач: "Защо използваш Ексел, глупаво е!" Няма как налага се да е Ексел!
Private Sub command1_click()
Screen.MousePointer = vbHourglass
DoEvents
If Text1.Text <> "" Then
vertical = 2
While ExcelApp.Sheets("Sheet1").Range("G" & vertical) <> ""
If Text1.Text = ExcelApp.Sheets("Sheet1").Range("G" & vertical) Then
Label1.Caption = ExcelApp.Sheets("Sheet1").Range("d" & vertical)
Label2.Caption = ExcelApp.Sheets("Sheet1").Range("b" & vertical) - _
ExcelApp.Sheets("Sheet1").Range("H" & vertical)
Label4.Caption = ExcelApp.Sheets("Sheet1").Range("f" & vertical)
If Label2.Caption <= 0 Then
Screen.MousePointer = vbNormal
DoEvents
Msg = "Няма налично количество"
End If
Text2.SetFocus
Screen.MousePointer = vbNormal
DoEvents
Exit Sub
End If
vertical = vertical + 1
Wend
End If
PROMPT = MsgBox("Стока с такъв код не е намерена!", 0, "Внимание!")
Text1.SetFocus
Screen.MousePointer = vbNormal
DoEvents
End Sub
| |
Тема
|
Re: как да оптимизирам кода?
[re: ACtron-B]
|
|
Автор | ActiveX (Нерегистриран) |
Публикувано | 02.03.06 14:11 |
|
Ами нормално е да се бави, защото се прехвърля информация от едно приложение към друго, което е доста тромаво.
Но може да си оптимизираш малко кода :
- не сравнявай в цикъла стойността на текстовото поле Text1 - първо запиши тази стойност в една стрингова променлива, и ползвай променливата при сравнението;
- по-добро решение на ExcelApp.Sheets("Sheet1").Range("G" & vertical) :
dim xlSheet as Excel.Weorksheet
set xlSheet = excelApp.Sheets("Sheet1")
и по-надолу ползвай xlSheet вместо горното - това ускорява работата с този обект
| |
Тема
|
Re: как да оптимизирам кода?
[re: ACtron-B]
|
|
Автор |
wqw (АзСъмЖив) |
Публикувано | 02.03.06 15:29 |
|
Може през clipboard-а да пробваш дали е по-бързо. Виж това:
Option Explicit
Private Function GetColumnsData(oSheet As Object, sColumns As String) As Collection
Dim vElem As Variant
Set GetColumnsData = New Collection
For Each vElem In Split(sColumns, " ")
Clipboard.Clear
oSheet.Range(vElem & ":" & vElem).Copy
GetColumnsData.Add Split(Clipboard.GetText(), vbCrLf), vElem
Next
End Function
Private Sub Form_Load()
Dim oData As Collection
Dim vElem As Variant
With CreateObject("Excel.Application")
.Visible = True
.RecentFiles.Item(1).Open
Set oData = GetColumnsData(.Sheets("Sheet1"), "G H A B C D E")
End With
Debug.Print "size = "; UBound(oData("G"))
For Each vElem In oData("G")
Debug.Print vElem
Next
End Sub
cheers,
</wqw>
| |
Тема
|
Re: как да оптимизирам кода?
[re: ACtron-B]
|
|
Автор | Actron-B (Нерегистриран) |
Публикувано | 04.03.06 15:43 |
|
Благодаря за помоща!
Оправих го, стана доста бързо с жертване на няколко секунди повече при зареждане на приложението. Просто взех стойностите от колоната която ми трябва и ги записах в MSFlexGrid, после вместо в ексел търся в Grid което е много по бързо.
| |
|
|
|
|