[]
É comum encontrarmos problemas com referência em automação com aplicativos Office, quando referenciamos uma biblioteca, por exemplo XP e temos instalada a versão 2003, então certamente ocorrerá um erro, de biblioteca ausente na referência.
Para evitar o erro, crie uma classe que faça este trabalho setando um objeto, sem usar a referência.
Em um novo módulo Classe cole o código abaixo e salve com o nome de "ExcelReporter"
=======================================================================
Option Explicit
Option Compare Database
Public Function OpenWorkbook(FileName As String) As Object
On Error GoTo OpenWorkbook_Err
Dim ExcelApp As Object
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = False
'Abre o arquivo no Excel
Dim wb As Object
Set wb = ExcelApp.Workbooks.Open(FileName)
Set OpenWorkbook = wb
Exit Function
OpenWorkbook_Err:
Err.Raise vbObjectError + 100, _
"Project1.ExcelReporter.OpenWorkbook", _
"ExcelReporter component failure"
End Function
Public Sub CloseWorkbook(wb As Object)
On Error GoTo CloseWorkbook_Err
Dim app As Object
Set app = wb.Application
app.DisplayAlerts = False
wb.Save
wb.Close
app.Quit
Exit Sub
CloseWorkbook_Err:
Err.Raise vbObjectError + 100, _ "Project1.ExcelReporter.CloseWorkbook", _
"ExcelReporter component failure"
Resume Next
End Sub
Para utilizar a Classe
Dim ex As ExcelReporter
Set ex = New ExcelReporter
Dim File AS String
File = "C:\Planilha.XLS"
'Para abrir
Dim wb As Object
Set wb = ex.OpenWorkbook(strFile)
Para Fechar
ex.CloseWorkbook wb
Pronto.... A forma mais facil de referenciar um objeto no Excel.
Espero que gostem
terça-feira, 7 de agosto de 2007
domingo, 29 de julho de 2007
Reiniciar Campo auto-numerador
[Exemplo]
Por muito tempo, procurei em Fóruns, sites, livros uma forma de reinicar um capo auto-numerador.
Hoje, admito que dificilmente usaria, pois, geralmente oculto essa informação.
Mas está aí.
Colaboração de Luiz Cláudio C. V. Rocha, no Fórum MSDN.
------------------------------------------------------------
Function ChangeSeed(strTbl As String, strCol As String, lngSeed As Long) As Boolean
'You must pass the following variables to this function.
'strTbl = Table containing autonumber field
'strCol = Name of the autonumber field
'lngSeed = Long integer value you want to use for next AutoNumber.
Dim cnn As ADODB.Connection
Dim cat As New ADOX.Catalog
Dim col As ADOX.Column
'Set connection and catalog to current database.
Set cnn = CurrentProject.Connection
cat.ActiveConnection = cnn
Set col = cat.Tables(strTbl).Columns(strCol)
col.Properties("Seed") = lngSeed
cat.Tables(strTbl).Columns.Refresh
If col.Properties("seed") = lngSeed Then
ChangeSeed = True
Else
ChangeSeed = False
End If
Set col = Nothing
Set cat = Nothing
Set cnn = Nothing
End Function
------------------------------------------------------------
Assinale a biblioteca Microsoft ADO Ext. for DDL and Security.
Por muito tempo, procurei em Fóruns, sites, livros uma forma de reinicar um capo auto-numerador.
Hoje, admito que dificilmente usaria, pois, geralmente oculto essa informação.
Mas está aí.
Colaboração de Luiz Cláudio C. V. Rocha, no Fórum MSDN.
------------------------------------------------------------
Function ChangeSeed(strTbl As String, strCol As String, lngSeed As Long) As Boolean
'You must pass the following variables to this function.
'strTbl = Table containing autonumber field
'strCol = Name of the autonumber field
'lngSeed = Long integer value you want to use for next AutoNumber.
Dim cnn As ADODB.Connection
Dim cat As New ADOX.Catalog
Dim col As ADOX.Column
'Set connection and catalog to current database.
Set cnn = CurrentProject.Connection
cat.ActiveConnection = cnn
Set col = cat.Tables(strTbl).Columns(strCol)
col.Properties("Seed") = lngSeed
cat.Tables(strTbl).Columns.Refresh
If col.Properties("seed") = lngSeed Then
ChangeSeed = True
Else
ChangeSeed = False
End If
Set col = Nothing
Set cat = Nothing
Set cnn = Nothing
End Function
------------------------------------------------------------
Assinale a biblioteca Microsoft ADO Ext. for DDL and Security.
Add-In - Customizando tempo
Ao conhecermos novas ferramentas de trabalho, vemos que algumas melhorias são significativas.
Meu primeiro contato com o VSTO foi muito confuso, pois, sempre trabalhei com MS Access e senti algumas dificuldades, ainda estou estudando a ferramenta.
Uma dentre centenas de facilidades é a indentação automática do código. No entando, descobri duas ferramentas que, hoje em dia não consigo trabalhar sem elas.
[Smart Indenter]: Responsável por Indentar meu código, um simples Ctrl + M, indenta o módulo todo, vale a pena instalar.
[MZ-Tools] - Dentre muitas funcionabilidades, como armazenar templates de códigos, revisão (encontra, por exemplo, variáveis declaradas e não utilizadas), nenhuma delas me ajuda tanto quanto o tratamento de erros automaticamente. Antes deste Add-In, perdia tempo escrevendo o tratamento de erros, hoje basta um clique ou um um [Ctrl + Alt + E] (Minha tecla de atalho para tratar Erros.
Com certeza, após a instalação destes Add-In, vocês não conseguirão trabalhar sem eles.
Meu primeiro contato com o VSTO foi muito confuso, pois, sempre trabalhei com MS Access e senti algumas dificuldades, ainda estou estudando a ferramenta.
Uma dentre centenas de facilidades é a indentação automática do código. No entando, descobri duas ferramentas que, hoje em dia não consigo trabalhar sem elas.
[Smart Indenter]: Responsável por Indentar meu código, um simples Ctrl + M, indenta o módulo todo, vale a pena instalar.
[MZ-Tools] - Dentre muitas funcionabilidades, como armazenar templates de códigos, revisão (encontra, por exemplo, variáveis declaradas e não utilizadas), nenhuma delas me ajuda tanto quanto o tratamento de erros automaticamente. Antes deste Add-In, perdia tempo escrevendo o tratamento de erros, hoje basta um clique ou um um [Ctrl + Alt + E] (Minha tecla de atalho para tratar Erros.
Com certeza, após a instalação destes Add-In, vocês não conseguirão trabalhar sem eles.
Atachando Arquivos como Binários
Exemplo
Por diversas vezes precisei montar templates de documentos (.doc, .xls, .html ou arquivo de imagem) para exportar dados, porém, sempre precisava salvar o documento em um local padrão e em algumas vezes havia o problema do usuário apagar, alterar nome, dentre outros problemas.
Então resolvi, anexar os documentos em um campo OLE e anexa-los no bando de dados.
Este procedimento é aconselhavel quando vamos atachar apenas templates, ou seja, poucos documentos. Seria inviável anexar fotos de produtos, por exemplo, para um cadastro de estoque.
Segue a função:
**** Importando o arquivo para banco de dados
----------------------------------------------------------
Public Sub ImportFile(FileName As String, Dest As field)
'Parâmetros: FileName = Nome, extensão e caminho completo do Arquivo
' Dest = Campo Tipo Ole que será armarezado o arquivo (obtenha através de uma RecordSet.
On Error GoTo ImportFile_Err
Dim buf
Open FileName For Binary As #1
buf = Input(LOF(1), 1)
Close #1
Dest.Value = Null
Dest.AppendChunk buf
Exit Sub
ImportFile_Err:
MsgBox Err.Description , vbExclamation + vbOKOnly, "Application Error"
Resume Next
End Sub
----------------------------------------------------------
**** Exportando para caminho específico
Public Sub DumpFile(OutFileName As String, FileData)
On Error GoTo DumpFile_Err
Open OutFileName For Output As #1
Print #1, FileData
Close #1
Exit Sub
DumpFile_Err:
MsgBox Err.Description, vbExclamation + vbOKOnly, "Application Error"
Resume Next
End Sub
----------------------------------------------------------
Criei um exemplo para vocês:
Por diversas vezes precisei montar templates de documentos (.doc, .xls, .html ou arquivo de imagem) para exportar dados, porém, sempre precisava salvar o documento em um local padrão e em algumas vezes havia o problema do usuário apagar, alterar nome, dentre outros problemas.
Então resolvi, anexar os documentos em um campo OLE e anexa-los no bando de dados.
Este procedimento é aconselhavel quando vamos atachar apenas templates, ou seja, poucos documentos. Seria inviável anexar fotos de produtos, por exemplo, para um cadastro de estoque.
Segue a função:
**** Importando o arquivo para banco de dados
----------------------------------------------------------
Public Sub ImportFile(FileName As String, Dest As field)
'Parâmetros: FileName = Nome, extensão e caminho completo do Arquivo
' Dest = Campo Tipo Ole que será armarezado o arquivo (obtenha através de uma RecordSet.
On Error GoTo ImportFile_Err
Dim buf
Open FileName For Binary As #1
buf = Input(LOF(1), 1)
Close #1
Dest.Value = Null
Dest.AppendChunk buf
Exit Sub
ImportFile_Err:
MsgBox Err.Description , vbExclamation + vbOKOnly, "Application Error"
Resume Next
End Sub
----------------------------------------------------------
**** Exportando para caminho específico
Public Sub DumpFile(OutFileName As String, FileData)
On Error GoTo DumpFile_Err
Open OutFileName For Output As #1
Print #1, FileData
Close #1
Exit Sub
DumpFile_Err:
MsgBox Err.Description, vbExclamation + vbOKOnly, "Application Error"
Resume Next
End Sub
----------------------------------------------------------
Criei um exemplo para vocês:
Assinar:
Postagens (Atom)