Уваэаемые форумчане. помогите, пожалуйста, решить задачу. Есть у меня функция
Public Function Get_fcst(Month As Integer, Year As Integer, Market As String, SKU_ID As Integer, Lag As Integer)
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cm As New ADODB.Command
Dim marketT As String
Dim monthT As Integer
Dim YearT As Integer
Dim Lag_T As String 'new transformed variables
Select Case Market
Case "Armenia": marketT = "ARM"
Case "Azerbaijan": marketT = "AZE"
Case "Azerbaijan (Naxcivan)": marketT = "AZE_NH"
Case "Georgia (IMS)": marketT = "GEO_IMS"
Case "Georgia (PF)": marketT = "GEO"
Case "Moldova": marketT = "MD"
Case "Turkmenistan": marketT = "TRKM"
End Select
Select Case Lag
Case 0: Lag_T = "LAG_0"
Case 1: Lag_T = "LAG_1"
Case 2: Lag_T = "LAG_2"
Case 3: Lag_T = "LAG_3"
End Select
Dim monthN As Integer
monthN = Month + 3 - Lag
If monthN <= 12 Then
monthT = Month + 3 - Lag
YearT = Year
End If
If monthN > 12 Then
monthT = Month + 3 - Lag - 12
YearT = Year + 1
End If
cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
cnn.ConnectionString = "Data Source = S:\Export\!BD_Projects\TOOLS\Forecast Accuracy Report\FAR.xls; Extended Properties=Excel 8.0;"""
cnn.Open
Dim sqlstr As String
cm.ActiveConnection = cnn
cm.CommandText = "SELECT Month_Lag3, Year, Market, SKU_ID, " & Lag_T & " FROM [Forecast$] Where (Month_Lag3=" & monthT & " and Year=" & YearT & " and Market=""" & marketT & """ and SKU_ID=" & SKU_ID & ");"
sqlstr = cm.CommandText
rst.Open cm
Get_fcst = rst(4)
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
End Function
Функция работает правильно. но если менять параметры функции, то при пересчёте сильно возрастает размер файла (функция фозвращает около 400 значений на одном листе; скопирована в каждую из 400 ячеек). В процесах (CTRL+ALT+DEL) процес Excel занимет от 100 до 800 мегабайт, причем до начала пересчёта - только 17-20 мегабайт. При закрытии файла процес остается висеть и его приходится удалять вручную, иначе винда начинает глючить. В чём проблема, что в коде надо исправить, чтобы размер процесса Excel не зашкаливал?
П.С. Только недавно немного разобрался с ADO и не знаю всех тонкостей. Не судите строго.
Public Function Get_fcst(Month As Integer, Year As Integer, Market As String, SKU_ID As Integer, Lag As Integer)
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cm As New ADODB.Command
Dim marketT As String
Dim monthT As Integer
Dim YearT As Integer
Dim Lag_T As String 'new transformed variables
Select Case Market
Case "Armenia": marketT = "ARM"
Case "Azerbaijan": marketT = "AZE"
Case "Azerbaijan (Naxcivan)": marketT = "AZE_NH"
Case "Georgia (IMS)": marketT = "GEO_IMS"
Case "Georgia (PF)": marketT = "GEO"
Case "Moldova": marketT = "MD"
Case "Turkmenistan": marketT = "TRKM"
End Select
Select Case Lag
Case 0: Lag_T = "LAG_0"
Case 1: Lag_T = "LAG_1"
Case 2: Lag_T = "LAG_2"
Case 3: Lag_T = "LAG_3"
End Select
Dim monthN As Integer
monthN = Month + 3 - Lag
If monthN <= 12 Then
monthT = Month + 3 - Lag
YearT = Year
End If
If monthN > 12 Then
monthT = Month + 3 - Lag - 12
YearT = Year + 1
End If
cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
cnn.ConnectionString = "Data Source = S:\Export\!BD_Projects\TOOLS\Forecast Accuracy Report\FAR.xls; Extended Properties=Excel 8.0;"""
cnn.Open
Dim sqlstr As String
cm.ActiveConnection = cnn
cm.CommandText = "SELECT Month_Lag3, Year, Market, SKU_ID, " & Lag_T & " FROM [Forecast$] Where (Month_Lag3=" & monthT & " and Year=" & YearT & " and Market=""" & marketT & """ and SKU_ID=" & SKU_ID & ");"
sqlstr = cm.CommandText
rst.Open cm
Get_fcst = rst(4)
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
End Function
Функция работает правильно. но если менять параметры функции, то при пересчёте сильно возрастает размер файла (функция фозвращает около 400 значений на одном листе; скопирована в каждую из 400 ячеек). В процесах (CTRL+ALT+DEL) процес Excel занимет от 100 до 800 мегабайт, причем до начала пересчёта - только 17-20 мегабайт. При закрытии файла процес остается висеть и его приходится удалять вручную, иначе винда начинает глючить. В чём проблема, что в коде надо исправить, чтобы размер процесса Excel не зашкаливал?
П.С. Только недавно немного разобрался с ADO и не знаю всех тонкостей. Не судите строго.