Access - интеграция с Excel - PullRequest
       17

Access - интеграция с Excel

2 голосов
/ 08 сентября 2010

Привет всем, работаю над созданием новой базы данных для работы.Они используют Excel для своих ежедневных отчетов, и все данные хранятся там, поэтому я решил использовать внутреннюю часть базы данных в Access, а внешнюю - в Excel, чтобы любая аналитическая работа могла быть легко выполнена после того, как вседанные были импортированы в Excel.

Теперь я довольно новичок в VBA, постепенно привыкая к его использованию, написал код для переноса одной из вычисленных таблиц из Access в Excel:

Option Explicit

Public Const DataLocation As String = "C:\Documents and Settings\Alice\Desktop\Database\TestDatabase21.accdb"

Sub Market_Update()
    Call ImportFromAccessTable(DataLocation, "Final_Table", Worksheets(2).Range("A5"))
End Sub

Sub ImportFromAccessTable(DBFullName As String, TableName As String, TargetRange As Range)

    Dim cn As ADODB.Connection, rs As ADODB.Recordset, intColIndex As Integer

    Set TargetRange = TargetRange.Cells(1, 1)
    ' open the database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & DBFullName & ";"
    Set rs = New ADODB.Recordset
    With rs
        ' open the recordset
        ' .Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable

        ' all records
        .Open "SELECT * FROM Final_Table", cn, , , adCmdText
        ' filter records

        For intColIndex = 0 To rs.Fields.count - 1 ' the field names
            TargetRange.Offset(0, intColIndex).Value = rs.Fields(intColIndex).Name
        Next
        TargetRange.Offset(1, 0).CopyFromRecordset rs ' the recordset data

    End With
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

Sub Company_Information()

   Dim companyName As String

On Error GoTo gotoError

   companyName = Application.InputBox(Prompt:="Enter Company Name", _
                           Title:="Company Name", Type:=2)                  

    Exit Sub 'Don't execute errorhandler at end of routine

gotoError:
    MsgBox "An error has occurred"

End Sub

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

У меня есть две проблемы, с которыми у меня проблемы;во-первых, у меня уже есть форматирование ячеек для ячеек, куда данные будут вставлены в Excel;Я хочу применить форматирование к значениям, как только они будут вставлены в Excel.

Во-вторых;У меня есть дополнение для Excel, которое обновляет некоторые ежедневные значения фондового рынка;эти значения необходимо передавать в Access в конце каждого рабочего дня, чтобы поддерживать базу данных в рабочем состоянии, я попробовал некоторый код, но у меня возникли некоторые проблемы с его работой.

Код этой части можно увидетьследующее:

Sub UPDATE()

   Dim cnt As ADODB.Connection
   Dim stSQL As String, stCon As String, DataLocation As String
   Dim stSQL2 As String

   'database path - currently same as this workbook
   DataLocation = ThisWorkbook.Path & DataLocation
   stCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
   "Data Source=" & DataLocation & ";"
   'SQL code for GL Insert to Access
   stSQL = "INSERT INTO Historical_Stock_Data SELECT * FROM [Portfolio] IN '" _
   & ThisWorkbook.FullName & "' 'Excel 8.0;'"

   'set connection variable
   Set cnt = New ADODB.Connection
   'open connection to Access db and run the SQL
   With cnt
        .Open stCon
        .CursorLocation = adUseServer
        .Execute (stSQL)
   End With
   'close connection
   cnt.Close

   'release object from memory
   Set cnt = Nothing

End Sub

Я получаю следующую ошибку:

Run-time Error '-2147467259 (80004005)'

The Microsoft Jet database engine cannot open the file 'Cocuments and Settings\Alice\Desktop\Database'. It is already opened exclusively by another user or you need permission to view its data.

Я довольно плохо знаком с базами данных, VBA и Access, поэтому любая помощь будет принята с благодарностью.

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

Спасибо заранее!

Ответы [ 3 ]

2 голосов
/ 09 сентября 2010

Решение вашей первой проблемы:
Извините, что несу плохие новости, но весь ваш первый модуль не нужен.Вместо этого попробуйте:

  1. Перейдите к Данные-> Импорт внешних данных-> Импорт данных , выберите файл доступа, выберите таблицу и нажмите «Готово»!сделанный!
  2. Щелкните правой кнопкой мыши новый «Диапазон внешних данных», чтобы увидеть ряд параметров, некоторые из которых связаны с форматированием.Вы даже можете сохранить исходное форматирование ячейки и просто обновить значения.Я делаю это все время.
  3. Чтобы обновить таблицу данных Excel позже, есть панель инструментов «Диапазон внешних данных», которая позволяет обновлять ее, а также опция «обновить все», чтобы обновить каждую таблицу вфайл Excel.(Вы также можете автоматизировать этот код. Это займет несколько проб и ошибок, но вы определенно готовы к этой задаче)

Относительно вашей второй проблемы
Я никогда не использовал его, но там также есть опция «Новый веб-запрос».Я предполагаю, что им можно манипулировать и обновлять одинаково.

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

alt text

2 голосов
/ 08 сентября 2010

Выполните ввод / обновление / просмотр данных в Access.Одним из преимуществ Access является использование форм, которые позволяют обновлять таблицы без какого-либо кода.Затем разрешите пользователям легко экспортировать данные в Excel, например, нажимая на некоторые кнопки команд.

Модули: образец автоматизации Excel - ячейка за ячейкой, которая медленная

Модули: перенос записей в Excel с помощью автоматизации

0 голосов
/ 09 сентября 2010

в принципе ничего плохого в соединении excel / access. Я не знаком с ADO (я использую DAO), но ваше сообщение об ошибке, похоже, указывает на то, что путь к источнику данных сформирован не полностью; или вы уже открыли и, следовательно, блокируете его.

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