Quem me poderá ajudar,
Pretendo colocar um comando numa folha Excel (Office 2010)para exportar automaticamente para o Access os dados de apenas uma linha podendo no entanto ter várias colunas. A outra condição será de a mesma DB por cada registo que receba do Excel mo coloque numa nova linha (não apagando os anteriores. A macro vba será executada a partir da folha de Excel.
Como sou muito, muito básico em vba, procurei na web um script que pudesse atender à minha necessidade, acabando por encontrar um que, no entanto me dá um erro na linha abaixo sinalizada a vermelho.
Se alguém me puder ajudar agradecia.
Desde já obrigado e um Bom ano de 2013 para todos
Outros elementos a considerar:
office Porfissional plus 2010
Windows 7, 32 bits
a BD a abrir chama-se: Obspreventivas.accdb
A Sheet do excel onde está a linha chama-se: OBSP
O file Excel onde está a Sheet anterior chama-se: ObsPrev.xlsm
Na foto podem ver as referências do projeto VBA que estão abertas
Instalei o o Microsoft DataBase Engine 2012
Aqui vai o script:
Sub ExcelToAccess()
'Declare variables
Dim dbConnection As ADODB.Connection
Dim dbFileName As String
Dim dbRecordset As ADODB.Recordset
Dim xRow As Long, xColumn As Long
Dim LastRow As Long
'Go to the worksheet containing the records you want to transfer.
Worksheets("OBSP").Activate
'Determine the last row of data based on column A.
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'Create the connection to the database.
Set dbConnection = New ADODB.Connection
'Define the database file name
dbFileName = "E:\Documentos Pai\Central Cervejas\ObservPreventivas\Obspreventivas.accdb"
'Define the Provider and open the connection.
With dbConnection
.Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & dbFileName & _
";Persist Security Info=False;"
.Open dbFileName
End With
'Create the recordset
Set dbRecordset = New ADODB.Recordset
dbRecordset.CursorLocation = adUseServer
dbRecordset.Open Source:="Tabela1", _
ActiveConnection:=dbConnection, _
CursorType:=adOpenDynamic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable
'Loop thru rows & columns to load records from Excel to Access.
'Assume row 1 is the header row, so start at row 2.
For xRow = 2 To 2 'LastRow
dbRecordset.AddNew
'Assume this is an 8-column (field) table starting with column A.
For xColumn = 1 To 8
dbRecordset(Cells(1, xColumn).Value) = Cells(xRow, xColumn).Value ' o script pára aqui nesta linha. Abre a BD mas não inicia a cópia das células
Next xColumn
dbRecordset.Update
Next xRow
'Close the connections.
dbRecordset.Close
dbConnection.Close
'Release Object variable memory.
Set dbRecordset = Nothing
Set dbConnection = Nothing
'Optional:
'Clear the range of data (the records) you just transferred.
'Range("A2:H" & LastRow).ClearContents
End Sub
Pretendo colocar um comando numa folha Excel (Office 2010)para exportar automaticamente para o Access os dados de apenas uma linha podendo no entanto ter várias colunas. A outra condição será de a mesma DB por cada registo que receba do Excel mo coloque numa nova linha (não apagando os anteriores. A macro vba será executada a partir da folha de Excel.
Como sou muito, muito básico em vba, procurei na web um script que pudesse atender à minha necessidade, acabando por encontrar um que, no entanto me dá um erro na linha abaixo sinalizada a vermelho.
Se alguém me puder ajudar agradecia.
Desde já obrigado e um Bom ano de 2013 para todos
Outros elementos a considerar:
office Porfissional plus 2010
Windows 7, 32 bits
a BD a abrir chama-se: Obspreventivas.accdb
A Sheet do excel onde está a linha chama-se: OBSP
O file Excel onde está a Sheet anterior chama-se: ObsPrev.xlsm
Na foto podem ver as referências do projeto VBA que estão abertas
Instalei o o Microsoft DataBase Engine 2012
Aqui vai o script:
Sub ExcelToAccess()
'Declare variables
Dim dbConnection As ADODB.Connection
Dim dbFileName As String
Dim dbRecordset As ADODB.Recordset
Dim xRow As Long, xColumn As Long
Dim LastRow As Long
'Go to the worksheet containing the records you want to transfer.
Worksheets("OBSP").Activate
'Determine the last row of data based on column A.
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'Create the connection to the database.
Set dbConnection = New ADODB.Connection
'Define the database file name
dbFileName = "E:\Documentos Pai\Central Cervejas\ObservPreventivas\Obspreventivas.accdb"
'Define the Provider and open the connection.
With dbConnection
.Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & dbFileName & _
";Persist Security Info=False;"
.Open dbFileName
End With
'Create the recordset
Set dbRecordset = New ADODB.Recordset
dbRecordset.CursorLocation = adUseServer
dbRecordset.Open Source:="Tabela1", _
ActiveConnection:=dbConnection, _
CursorType:=adOpenDynamic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable
'Loop thru rows & columns to load records from Excel to Access.
'Assume row 1 is the header row, so start at row 2.
For xRow = 2 To 2 'LastRow
dbRecordset.AddNew
'Assume this is an 8-column (field) table starting with column A.
For xColumn = 1 To 8
dbRecordset(Cells(1, xColumn).Value) = Cells(xRow, xColumn).Value ' o script pára aqui nesta linha. Abre a BD mas não inicia a cópia das células
Next xColumn
dbRecordset.Update
Next xRow
'Close the connections.
dbRecordset.Close
dbConnection.Close
'Release Object variable memory.
Set dbRecordset = Nothing
Set dbConnection = Nothing
'Optional:
'Clear the range of data (the records) you just transferred.
'Range("A2:H" & LastRow).ClearContents
End Sub