Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) VBA - Importar valores do excel 2003 para o access 2003


gaspar.gualves

Pergunta

Olá pessoal,

Eu estou tentando fazer um script em VBA no qual eu importo determinados valores de celulas (Strings) no Excel para meu banco de dados Access. Tive dificuldade para achar esse tipo de codigo... e consegui um que chega proximo do que eu quero, mas nesse codigo ele busca por referencia a nomes de celulas no Excel (não tenho certeza). Vi também que existem comandos como Range("").Value e Cells(1,1).Value que fazem exatamente o que eu preciso... mas eu infelizmente não sei como aplica-los no meu codigo. Segue meu codigo :

Function CargaImpact()

Set fs = Application.FileSearch

Dim strQry As String

Dim myRec As DAO.Recordset

Dim dbExcel As DAO.Database

Dim rsExcel As DAO.Recordset

Set myRec = CurrentDb.OpenRecordset("Pesquisa")

fs.LookIn = "C:\Documents and Settings\galves\My Documents\Projeto Office\Pesquisas"

fs.Execute

fs.FileName = "*.*"

MsgBox fs.FoundFiles.Count

For i = 1 To fs.FoundFiles.Count

Set dbExcel = OpenDatabase(fs.FoundFiles(i), False, True, "Excel 8.0; HDR=YES;")

Set rsExcel = dbExcel.OpenRecordset("Sheet1$")

Do While Not rsExcel.EOF

myRec.AddNew

myRec.Fields("Incident ID") = rsExcel.Fields("Incident ID")

myRec.Fields("day") = Day(rsExcel.Fields("Open Time"))

myRec.Fields("month") = Month(rsExcel.Fields("Open Time"))

myRec.Fields("hour") = Hour(rsExcel.Fields("Open Time"))

myRec.Fields("Contact") = rsExcel.Fields("Contact")

myRec.Fields("Location") = rsExcel.Fields("Location")

myRec.Fields("Description") = Left(rsExcel.Fields("Brief Description"), 254)

myRec.Fields("Opened By") = rsExcel.Fields("Opened By")

myRec.Fields("CI") = rsExcel.Fields("CI Name")

myRec.Fields("auto") = rsExcel.Fields("Automated (excl Resolved)")

myRec.Fields("Problem Status") = rsExcel.Fields("Problem Status")

myRec.Fields("Status") = rsExcel.Fields("Status")

myRec.Fields("file") = fs.FoundFiles(i)

myRec.Update

'Read records and process data

rsExcel.MoveNext

Loop

Next i

End Function

Obrigado desde já pela atenção,

Aguardo Respostas.

Editado por gaspar.gualves
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Cara,

Ta dificil... num to achando nada, eu pesquisei mais um poucoe descobri que uma macro no access também serve, não precisa ser necessariamente VBA, só que eu não faço ideia de como fazer essa macro, se alguém puder me ajudar :/...

Eu quero pegar valores de determinadas celulas em arquivos excel, e passar para o access. Essas celular não tem nomes, seria referenciando pelo numero dela, exemplo : A1, ou coluna 1 linha 1.

Eu já tenho os campos do access feito, não precisaria de nem um codigo pra criar campos ou coisa do tipo, o que eu quero é mais exatamente isso : (access)Nome <- (recebe) A1

A tabela final ficaria mais ou menos assim:

Nome

José

Maria

(e por ai vai.. com a macro adicionando masi nomes na tabela)

E são mais de um arquivo de excel que eu tenho que fazer isso... eu gostaria de pegar todos os arquivos de excel de uma determinada pasta.

Por favorrr AJUDEEM, to desesperado :/

Link para o comentário
Compartilhar em outros sites

  • 0

Fera simplesmente importe os dados da planilha para o excel, num precisa nem de macro nem de código.

No mais para entender melhor o código que você postou sugiro uma lida nos seguintes sites:

http://support.microsoft.com/kb/291308

http://www.anthony-vba.kefra.com/vba/vbabasic2.htm

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu cara... consegui resolver por aqui... vou postar o codigo caso alguém tenha a mesma duvida que eu :

Function CargaImpact()

Set fs = Application.FileSearch

Dim strQry As String

Dim myRec As DAO.Recordset

Dim dbExcel As DAO.Database

Dim rsExcel As DAO.Recordset

Set myRec = CurrentDb.OpenRecordset("Pesquisa")

fs.LookIn = "G:\AMGERAL\office2007\pesquisa"

fs.Execute

fs.FileName = "*.*"

MsgBox fs.FoundFiles.Count

For i = 1 To fs.FoundFiles.Count

Set dbExcel = OpenDatabase(fs.FoundFiles(i), False, True, "Excel 8.0; HDR=YES;")

Set rsExcel = dbExcel.OpenRecordset("Sheet1$")

Do While Not rsExcel.EOF

myRec.AddNew

'INFORMAÇÕES PESSOAIS

'Nome

rsExcel.MoveNext

rsExcel.MoveNext

rsExcel.MoveNext

rsExcel.MoveNext

rsExcel.MoveNext

rsExcel.MoveNext

myRec.Fields("Nome") = rsExcel.Fields("f2").Value

rsExcel.MoveLast

myRec.Update

'Read records and process data

rsExcel.MoveNext

Loop

Next i

End Function

Explicando um pouco melhor: o que eu fiz foi referenciar por coluna ("f2") e apartir dai ir 'descendo' até a celula que eu queria que ele pegasse (rsExcel.MoveNext), e por fim indo para ultima celula, para evitar que o access armazenasse valores de outras celulas, pois o comando myRec.Fields("Nome") = rsExcel.Fields("f2").Value armazena todas as celulas da coluna. Importante dizer que por padrão o excel nomeia as colunas com: F1 = COLUNA 1 , F2 = COLUNA 2 , e por ai vai....

Provavelmente deve haver alguma referencia padrão para linhas no excel, que deixe o codigo com menos cara de gambiarra que o meu haha, mas eu não encontrei, fica ai a dica.

Obrigado novamente.

Editado por gaspar.gualves
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...