Оцените плиз мой первый макрос. Что можно подкрутить - VB

Узнай цену своей работы

Формулировка задачи:

Добрый день,
написал свой первый макрос, хотелось бы узнать мнение профи, чтобы сразу избежать ошибок и на будущее запомнить это.
Задача:
есть заполненный столбец в листе, необходимо для каждой записи из этого столбца подтянуть некоторые другие данные из БД.
Делаю:
коннект к БД и в цикле работаю с этим листом, вызывая хранимую процедуру и каждый раз передавая ей в качестве параметра значение из этого столбца. Все,что возвращает БД, помещаю в recordset и оттуда вставляю в лист.
Во время выборки максимальной даты придумал временное решение: засунуть в ячейку, потом в переменную и очистить ячейку.
Вот листинг макроса:
Листинг программы
  1. 'StatusBar at the end of file
  2. Application.StatusBar = "Importing data from SQL server..."
  3. 'clearing worksheet
  4. Worksheets("Import").Range("C2:Z50000").Clear
  5. 'connecting to DB to call procedure
  6. Set rst = New ADODB.Recordset
  7. Set Cnn = New ADODB.Connection
  8. Cnn.ConnectionString = "Provider=SQLOLEDB;Server=**;Trusted_Connection=Yes"
  9. Cnn.ConnectionTimeout = 0
  10. Cnn.CommandTimeout = 0
  11. Cnn.Open
  12. 'connecting to DB to select max(date) only once
  13. Set rst2 = New ADODB.Recordset
  14. rst2.ActiveConnection = Cnn
  15. Set rst2 = Cnn.Execute("select *")
  16. Call ActiveSheet.Cells(100, 100).CopyFromRecordset(rst2)
  17. rep_date = ActiveSheet.Cells(100, 100).Value
  18. ActiveSheet.Cells(100, 100).Clear
  19. Set rst2 = Nothing
  20. 'working with sheet "Import"
  21. With Sheets("Import")
  22. 'breaking loop
  23. If ((.Cells(2, 1) = "") And (.Cells(3, 1) = "")) Then
  24. Application.StatusBar = False
  25. MsgBox ("No data is available.")
  26. Application.ScreenUpdating = True
  27. Cnn.Close
  28. Exit Sub
  29. End If
  30. '----end breaking loop
  31. i = 2
  32. Pustoe_pole:
  33. Do While Not ((.Cells(i, 2) = "") And (.Cells(i, 1) = "") And (.Cells(i + 1, 2) = "") And (.Cells(i + 1, 1) = ""))
  34. 'reading cust_numbers
  35. customer = .Cells(i, 1).Value
  36. If customer = "" Then
  37. i = i + 1
  38. GoTo Pustoe_pole
  39. End If
  40. 'calling to procedure
  41. SQL_Query = "exec ** '" & customer & "','" & rep_date & "'"
  42. rst.Open SQL_Query, Cnn
  43. 'inserting data into sheet
  44. .Cells(i, 3).CopyFromRecordset rst
  45. rst.Close
  46. i = i + 1
  47. Loop
  48. .Cells.Columns.AutoFit
  49. End With
  50. 'Ending
  51. Set rst = Nothing
  52. Cnn.Close
  53. Set Cnn = Nothing
  54. Application.StatusBar = False
  55. MsgBox "Done!"
  56. End Sub

спасибо всем большое.

Решение задачи: «Оцените плиз мой первый макрос. Что можно подкрутить»

textual
Листинг программы
  1. ' промежуточное сохранение на лист - лишнее:
  2. ' Call ActiveSheet.Cells(100, 100).CopyFromRecordset(rst2)
  3. ' rep_date = ActiveSheet.Cells(100, 100).Value
  4. ' ActiveSheet.Cells(100, 100).Clear
  5.  
  6. rep_date = rst2(0).Value

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы