Цикл по базе данных Access и выполнение основных операций с использованием Excel VBA - PullRequest
0 голосов
/ 09 ноября 2018

Я выполнял эти операции с помощью Excel, но исходные данные, с которыми я имею дело, поразительны для Excel. Я перешел к доступу в качестве базы данных, но я пытаюсь найти похожую функциональность. Я все еще использую Excel в качестве моего интерфейса.

Я старательно разбиваю свои данные на образцы. Взяв образец данных, проанализировав их, затем перейдем к следующему образцу. Я хотел бы сделать то же самое с данными Access. То, что я ищу, это как выполнять операции (суммирование, умножение, деление, макс, мин ...) на выборке с использованием цикла for. Кроме того, что является идентификатором максимального значения и идентификатором минимального значения. Я также имею дело с огромным количеством необработанных данных, поэтому оптимальным будет меньшее количество строк кода. Любые указатели в правильном направлении будут оценены.

Код в Excel:

For CoUnTer = 1 To FindRecordCount

        Set Circ_Rng = WS.Range(WS.Cells(CoUnTer , 5), WS.Cells(CoUnTer  + TempTimeFrame - 1, 5))
        Set DataPoint_Rng = WS.Range(WS.Cells(CoUnTer , 1), WS.Cells(CoUnTer  + TempTimeFrame - 1, 1))
        Set DataPoint_Circ_Rng = WS.Range(WS.Cells(CoUnTer , 8), WS.Cells(CoUnTer  + TempTimeFrame - 1, 8))
        Set DataPoint_SQ_Rng = WS.Range(WS.Cells(CoUnTer , 9), WS.Cells(CoUnTer  + TempTimeFrame - 1, 9))
        '---------------------------
        MaxPoint = WorksheetFunction.Max(CircPressure_Rng)
        Row_At_MaxPressure = WS.Columns(5).Cells.Find(MaxPoint, After:=WS.Cells(3, 5), SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlNext).Row

    Sigma_X_Sigma_Y = WorksheetFunction.Sum(Circ_Rng) * WorksheetFunction.Sum(DataPoint_Rng)
    Sigma_XY = WorksheetFunction.Sum(DataPoint_Circ_Rng)
    Sigma_X2 = WorksheetFunction.Sum(DataPoint_SQ_Rng)
    Min_X = WorksheetFunction.Min(DataPoint_Rng)

Код для доступа к данным: Этот код получает образец данных. Чего мне не хватает, как я могу справиться с операциями над ними, аналогично тому, что я сделал в Excel.

Sub GetAccessData()


Dim DBFullName As String
Dim Connect As String, Source As String
Dim Connection As ADODB.Connection
Dim Recordset As ADODB.Recordset
Dim Col As Long
Dim x As Long
Application.ScreenUpdating = False

'DataBase Path
DBFullName = WB_Path & "\RawData - Template.accdb"

'Open the Connection
Set Connection = New ADODB.Connection
Connect = "Provider=Microsoft.ACE.OLEDB.12.0;"
Connect = Connect & "Data Source=" & DBFullName & ";"
Connection.Open ConnectionString:=Connect

'Create a RecordSet
Set Recordset = New ADODB.Recordset
' Client-side cursor
Recordset.CursorLocation = adUseClient

With Recordset
    Source = "SELECT * FROM  RawData WHERE [ID] BETWEEN " & StartofData & " AND " & EndofData
    .Open Source:=Source, ActiveConnection:=Connection
    On Error Resume Next

End With
EndofData = Recordset.RecordCount

Set Recordset = Nothing
Connection.Close
Set Connection = Nothing
'Application.ScreenUpdating = True
'Application.EnableEvents = True

End Sub

1 Ответ

0 голосов
/ 17 ноября 2018

Как вы видите, Excel лучше для некоторых вещей, а Access лучше для некоторых вещей. Иногда вы можете буквально заменить Access для Excel, и наоборот, но часто каждый из них должен использоваться по назначению. Здесь, вероятно, есть несколько путей продвижения вперед, но я бы предпочел оставить ваши материалы Excel в Excel и управлять Excel из Access. Вы можете использовать Позднее связывание или Раннее связывание для управления одним приложением из другого приложения. Вот два варианта для рассмотрения.

‘EARLY BINDING
Option Compare Database
Option Explicit ' Use this to make sure your variables are defined

' One way to be able to use these objects throughout the Module is to Declare them
' Here and not in a Sub

Private objExcel As Excel.Application
Private xlWB As Excel.Workbook
Private xlWS As Excel.Worksheet

Sub Rep()

Dim strFile As String

strFile = "C:\your_path_here\YourExcelFile.xls"

' Opens Excel and makes it Visible
Set objExcel = New Excel.Application
objExcel.Visible = True

'Opens up the Workbook
Set xlWB = objExcel.Workbooks.Open(strFile)

'Sets the Workseet to the last active sheet - Better to use the commented version and use the name of the sheet.
Set xlWS = xlWB.ActiveSheet
'Set xlWS = xlWB("Sheet2")

With xlWS ' You are now working with the Named file and the named worksheet


End With

'Do Close and Cleanup
End Sub


 
‘LATE BINDING
Sub ControlExcelFromAccess()

' No reference to a type library is needed to use late binding.
' As long as the object supports IDispatch, the method can
' be dynamically located and invoked at run-time.

' Declare the object as a late-bound object
  Dim oExcel As Object
  Dim strFile As String

  strFile = "C:\your_path_here\YourExcelFile.xls"

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via IDispatch
  oExcel.Visible = True

  Set xlWB = oExcel.Workbooks.Open(strFile)

'Call code here . . .

Set oExcel = Nothing

End Sub

Просто скопируйте / вставьте свой код в этот код, при необходимости сделайте несколько небольших изменений, и вам будет хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...