Como criar o banco de dados Microsoft Access do Microsoft Excel usando DAO

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 151566
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Em alguns casos, você talvez queira criar um banco de dados Microsoft Access de um Microsoft Excel para pasta de trabalho do Windows 95 versão 7.0, mas não conseguem usar links de acesso. Enquanto o método preferencial de mover uma pasta de trabalho do Microsoft Excel para o Microsoft Access é usar links de acesso, você também pode usar o objeto de acesso de dados (DAO).
Causa
Os motivos para não poder usar os links de acesso incluem (mas não limitados a) o seguinte:
  • Microsoft Access para Windows 95 versão 7.0 não está instalado no computador.
  • Não há recursos suficientes no sistema para que o Microsoft Excel e Microsoft Access carregados ao mesmo tempo.
Como Contornar
Você pode usar objetos de acesso a dados (DAO) para criar qualquer versão de um banco de dados do Microsoft Access. Embora este método não seja como concluído como links de acesso, você pode usá-lo para criar um banco de dados Microsoft Access a partir de uma pasta de trabalho do Microsoft Excel. Esse método deve ser usado somente se você estiver familiarizado com Visual Basic for Applications e bastante familiarizado com bancos de dados para poder editar as tabelas que são criadas por esse código.

Algumas coisas que talvez você precise alterar são os tipos de dados de cada campo e se deseja ou não a indexação.
Mais Informações
Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. O código neste artigo irá passar por cada planilha em uma pasta de trabalho Microsoft Excel versão 7.0 e criar uma tabela do Microsoft Access como especificado no código. Há vários requisitos para este código funcionar corretamente.

Observação: Esses requisitos são semelhantes às que seriam necessário se você estava transferindo dados usando links de acesso.

Por favor, verifique se a pasta de trabalho usada tem uma lista em cada planilha consiste em pelo menos duas colunas.

Os requisitos são da seguinte maneira:

  • Os dados devem estar no formulário de coluna com os nomes de campo na primeira linha. Enquanto os dados podem iniciar em qualquer linha, essa sub-rotina pressupõe que linha 1 contém os nomes de campo e tudo sob linha 1 é dados para a tabela.
  • Os dados devem ser contíguos. Dados ausentes em um registro não afetarão negativamente essa sub-rotina. No entanto, após uma linha em branco é encontrada, a sub-rotina assumirá que ele tenha recuperado todos os dados na planilha atual. Da mesma forma, uma vez que uma coluna em branco é encontrada, a sub-rotina assumirá que existem mais campos para a direita.
  • Cada coluna será ser considerada como um campo e cada linha será ser considerada como um registro. Por exemplo, os dados devem ser configurados da seguinte maneira:
          Lname              Fname       EmpNum     SpouseName      Ebbeson            Frida          12         Dave      Edelstein          Alex           15      Edmonds            Cora           18         Paul      Eliasen            Deborah        22         Tom      Erickson           Gregory J      25         Lisa      Fallon             Scott          23      Feig               Wayne A.       35         Laurie      Fetty              Ellen M.       54         James						
    Observe que são permitidos registros incompletos.
A sub-rotina descrito a seguir fará o seguinte:
  • Declare variáveis. Embora isso não seja necessário, é útil para verificação e reduzindo a quantidade de memória que você usar a sintaxe.
  • Desative a atualização da tela. Isso fará com que a sub-rotina execução mais rápida, além de você não verá a tela piscar.
  • Crie o banco de dados. O primeiro argumento especifica onde o banco de dados será e qual será o nome. A sub-rotina cria o novo banco de dados na mesma pasta como a pasta de trabalho e com o mesmo nome que a pasta de trabalho (com uma extensão .mdb). Se já houver um banco de dados com esse nome na pasta, uma caixa de mensagem será exibido perguntando se você deseja excluir o banco de dados existente. Isso é feito por ajuste de registro "Erro 3294 banco de dados já existe."
  • Configure um loop para percorrer todas as planilhas na pasta de trabalho.

    Observação: Como módulos, folhas de gráfico e folhas de caixa de diálogo não fazem parte da coleção planilha, elas não afetarão a sub-rotina.
  • Dentro do loop de planilha, crie uma tabela baseada no nome da planilha.
  • Insira um loop que passa por cada coluna no intervalo de dados e cria um campo na tabela com o mesmo nome como títulos de coluna. Na seção Criar campo da sub-rotina, você precisa saber que tipo de dados para atribuir o novo campo. Para fazer isso, a sub-rotina examina a célula diretamente abaixo dela e determina a propriedade NumberFormat da célula.

    Uma instrução Select Case é inserida parecida à esquerda a maioria dos letra da propriedade NumberFormat. O tipo de dados é criado, com base nessa letra. Se um "m", "d" ou "y" é retornado, o tipo de dados é definido como "dbDate." Se "G" for retornado, a célula abaixo dela estiver formatada para "Geral". Se for esse o caso, você precisará determinar se a célula contiver um número ou texto.

    Para testar para ver se a célula contiver um número ou texto, a sub-rotina tenta dividir o conteúdo da célula por 2. Se a divisão falhar, a rotina cai para um manipulador de erro, que determina se o "Tipo incompatível" é o erro. Se for esse o caso, o campo é definido como dbText. Se a divisão for bem sucedida, a sub-rotina cai para a próxima célula para baixo para determinar se essa divisão ser bem-sucedida. Isso é necessário porque você precisa determinar que todos os registros contêm um número para esse campo antes de atribuir o tipo de dados em um formato de número. Se todas as divisões são bem-sucedidas, um tipo de dados de dbDouble é atribuído.

    Porque a verificação de que cada célula em uma coluna é um processo demorado. A sub-rotina verifica a presença de "CEP" ou "Postal" no cabeçalho da coluna. O motivo para isso é que os códigos de zip e códigos postal devem ser formatados como dbText. Mesmo se você tiver todos os códigos de zip de 5 dígitos na planilha, talvez queira adicionar um CEP 9 dígitos algum dia. Se você tiver o campo formatado como "dbDouble", você receberá uma mensagem de erro ao tentar inserir o ZIP mais valor quatro. Procurar por "CEP" ou "Postal" reduz o tempo do processador para criar o campo.

    Se todas as instruções Select Case falharem, o campo é definido como dbText.
  • Após a criação de todos os campos em uma planilha, todos os dados é adicionada à tabela.
  • Depois que todos os dados é adicionado à tabela, a próxima planilha está selecionada e o processo inicia novamente até que todas as planilhas foram selecionadas e salvas como uma tabela.
          Sub DataToAccess()     ' Declare variables.     Dim Db As database     Dim Rs As Recordset     Dim Td As TableDef     Dim Fd As Field     Dim x As Integer     Dim i As Integer     Dim f As Integer     Dim r As Integer     Dim c As Integer     Dim Message As String     Dim Title As String     Dim LastColumn As Integer     Dim NumberTest As Double     Dim StartCell As Object     Dim LastCell As Object     Dim Response     Dim CreateFieldFlag As Integer     Dim Flag As Integer     CreateFieldFlag = 0     Flag = 0     ' Turn off Screen Updating.     Application.ScreenUpdating = False     On Error GoTo ErrorHandler     ' Create the database.     ' This line will create an Microsoft Access 2.0 database. To vary the     ' version of the database, change the "dbVersion" constant.     ' See "CreateDatabase" in online Help for more information.     ' The database will be created in the same folder as the     ' activeworkbook.     Set Db = workspaces(0).CreateDatabase(ActiveWorkbook.Path & "\" & _        Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) _        & ".mdb", dbLangGeneral, dbVersion20)     ' Loop through all the worksheets in the workbook.     For i = 1 To Worksheets.Count        ' Select the "i th" worksheet and Cell "A1."        ' In this example, you need column headers in the first row.        ' These headers will become field names.        Worksheets(i).Select        Range("A1").Select        ' If the ActiveCell is blank, open a message box.        If ActiveCell.Value = "" Then            Message = "There is no data in the active cell: " & _                ActiveSheet.Name & "!" & ActiveCell.Address & Chr(10) & _                "Please ensure that all your worksheets have data on " & _                "them " & Chr(10) & _                "and the column headers start in cell A1" & Chr(10) & _                Chr(10) & "This process will now end."            Title = "Data Not Found"            MsgBox Message, , Title            Exit Sub        End If        ' Create a new Table, and use the Worksheet Name as the        ' Table Name.        Set Td = Db.CreateTableDef(Worksheets(i).Name)        ' Find the number of fields on the sheet and store the number        ' of the last column in a variable.        Selection.End(xlToRight).Select        LastColumn = Selection.Column        ' Select the current region. Then find what the address        ' of the last cell is.        Selection.CurrentRegion.Select        Set LastCell = Range(Right(Selection.Address, _            Len(Selection.Address) - _            Application.Search(":", Selection.Address)))        ' Go back to cell "A1."        Range("A1").Select        ' Enter a loop that will go through the columns and        ' create fields based on the column header.        For f = 1 To LastColumn            Flag = 0            ' Enter a select case statement to determine            ' the cell format.            Select Case Left(ActiveCell.Offset(1, 0).NumberFormat, 1)                Case "G"    'General format                    ' The "General" format presents a special problem.                    ' See above discussion for explanation                    If ActiveCell.Value Like "*Zip*" Then                        Set Fd = Td.CreateField(ActiveCell.Value, _                            dbText)                        Fd.AllowZeroLength = True                        r = LastCell.Row - 1                        Flag = 1                    Else                        If ActiveCell.Value Like "*Postal*" Then                            Set Fd = Td.CreateField(ActiveCell.Value, _                                dbText)                            Fd.AllowZeroLength = True                            r = LastCell.Row - 1                            Flag = 1                        End If                    End If                    ' Set up a text to determine if the field contains                    ' "Text" or "Numbers."                    For r = 1 To LastCell.Row - 1                        If Flag = 1 Then r = LastCell.Row                        CreateFieldFlag = 1                        NumberTest = ActiveCell.Offset(r, 0).Value / 2                    Next r                    ' If we get all the way through the loop without                    ' encountering an error, then all the values are                    ' numeric, and we assign the data type to be "dbDouble"                    If Flag = 0 Then                        Set Fd = Td.CreateField(ActiveCell.Value, dbDouble)                    End If                ' Check to see if the cell below is formatted as a date.                Case "m", "d", "y"                    Set Fd = Td.CreateField(ActiveCell.Value, dbDate)                ' Check to see if the cell below is formatted as currency.                Case "$", "_"                    Set Fd = Td.CreateField(ActiveCell.Value, dbCurrency)                ' All purpose trap to set field to text.                Case Else                    Set Fd = Td.CreateField(ActiveCell.Value, dbText)                End Select            ' Append the new field to the fields collection.            Td.Fields.Append Fd            ' Move to the right one column.            ActiveCell.Offset(0, 1).Range("A1").Select        ' Repeat the procedure with the next field (column).        Next f        ' Append the new Table to the TableDef collection.        Db.tabledefs.Append Td        ' Select Cell "A2" to start the setup for moving the data from        ' the worksheet to the database.        Range("A2").Select        ' Define the StartCell as the Activecell. All record addition        ' will be made relative to this cell.        Set StartCell = Range(ActiveCell.Address)        ' Open a recordset based on the name of the activesheet.        Set Rs = Db.OpenRecordset(Worksheets(i).Name)        ' Loop through all the data on the sheet and add it to the        ' recordset in the database.        For x = 0 To LastCell.Row - 2            Rs.AddNew            For c = 0 To LastColumn - 1                Rs.Fields(c) = StartCell.Offset(x, c).Value            Next c            Rs.Update        Next x     ' Repeat the process for the next worksheet in the workbook.     Next i     Application.ScreenUpdating = True     Exit SubErrorHandler:     Select Case Err        Case 3204   ' Database already exists.           Message = "There has been an error creating the database." & _                Chr(10) & _                Chr(10) & "Error Number: " & Err & _                Chr(10) & "Error Description: " & Error() & _                Chr(10) & _                Chr(10) & "Would you like to delete the existing" & _                "database:" & Chr(10) & _                Chr(10) & ActiveWorkbook.Path & "\" & _                Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & _                ".mdb"            Title = "Error in Database Creation"            Response = MsgBox(Message, vbYesNo, Title)            If Response = vbYes Then                Kill ActiveWorkbook.Path & "\" & _                  Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) -4) _                  & ".mdb"                Message = ""                Title = ""                Resume            Else                Message = "In order to run this procedure you need" & _                    Chr(10) & "to do ONE of the following:" & _                    Chr(10) & _                    Chr(10) & "1.  Move the existing database to a " & _                    "different directory, or " & _                    Chr(10) & "2.  Rename the existing database, or" & _                    Chr(10) & "3.  Move the workbook to a different " & _                    "directory, or" & _                    Chr(10) & "4.  Rename the workbook"                Title = "Perform ONE of the following:"                MsgBox Message, , Title                Message = ""                Title = ""                Exit Sub            End If        ' Check to see if the error was Type Mismatch. If so, set the        ' file to dbText.        Case 13 ' Type mismatch.            If CreateFieldFlag = 1 Then                Set Fd = Td.CreateField(ActiveCell.Value, dbText)                Fd.AllowZeroLength = True                Flag = 1                r = LastCell.Row - 1                CreateFieldFlag = 0                Resume Next            Else                Message = "You have a ""Type Mismatch"" in the code" _                    & Chr(10) _                    & Chr(10) & "Error Number: " & Err _                    & Chr(10) & "Error Description: " & Error() _                    & Chr(10) _                    & Chr(10) & "This procedure will close."                Title = "Type Mismatch"                MsgBox Message, , Title                Message = ""                Title = ""            End If        ' For any other error, display the error.        Case Else           Message = "An error has occured in the procedure." _                & Chr(10) _                & Chr(10) & "Error Number: " & Err _                & Chr(10) & "Error Description: " & Error()            Title = "An error has occured"            MsgBox Message, , Title            Message = ""            Title = ""     End Select     End Sub
Referências

Microsoft Access 97

Para obter mais informações sobre a criação de índices, clique na guia Índice na Ajuda do Microsoft Access, digite o seguinte texto:
índices, criando
e, em seguida, clique duas vezes no texto selecionado para ir para o "um índice para localizar e classificar registros mais rápido de criar".

Microsoft Access 7.0

Para obter mais informações sobre a indexação, clique em Assistente de resposta, no menu Ajuda no Microsoft Access 7.0, digite o índice na caixa Pesquisar e clique em "decidir se e quando usar um índice."

Microsoft Access 2.0

Para obter mais informações sobre a indexação, clique em Pesquisar no menu Ajuda no Microsoft Access versão 2.0, digite índice na caixa Pesquisar, clique em "Índice (Consulte também índices)" e clique em "Criando um índice" em tópicos.
7.00a 8.00 97 xl97 XL

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 151566 - Última Revisão: 12/04/2015 14:47:57 - Revisão: 2.3

Microsoft Excel 97 Standard Edition, Microsoft Excel 95 Standard Edition

  • kbnosurvey kbarchive kbmt kbdtacode kbhowto kbprogramming KB151566 KbMtpt
Comentários