Vytvoření databáze MS Access z aplikace Excel pomocí objektu DAO

ID článku: 151566 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

V některých případech můžete chtít vytvořit databázi aplikace Microsoft Access z Aplikace Microsoft Excel pro Windows 95 verze 7.0 sešitu, ale nejsou schopny použijte odkazy. Zatímco upřednostňovaný způsob přesunutí aplikace Microsoft Excel sešit do aplikace Microsoft Access je použít odkazy, můžete použít také přístup k datům (DAO) objektu.

Příčina

Zahrnout důvodů není možné použít odkazy (ale nejsou pouze) následující:
  • Není nainstalována aplikace Microsoft Access pro Windows 95 verze 7.0 na počítač.
  • Nejsou dostatek systémových prostředků v aplikaci Microsoft Excel a Aplikace Microsoft Access načíst současně.

Jak potíže obejít

Můžete vytvořit libovolné verze Microsoft data access objects (DAO) Databáze aplikace Access. Přestože tato metoda není co odkazy, můžete vytvořit databázi aplikace Microsoft Access z aplikace Microsoft Excel sešit. Tuto metodu měli použít, pouze pokud máte zkušenosti s Visual Basic for Applications a jsou dostatečně obeznámeni s aplikací Microsoft Access databáze lze upravovat tabulky vytvořené pomocí tohoto kódu.

Jsou některé kroky, které potřebujete-li změnit typy dat každého pole a zda chcete indexování.

Další informace

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo předpokládané. Zahrnuje, ale neomezuje se pouze na předpokládaných záruk obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však tyto příklady funkce nebo konstrukce podle konkrétních požadavků uživatele. Kód v tomto článku bude projít všechny listy v Microsoft Verze 7.0 sešit aplikace Excel a vytvořit tabulku aplikace Access podle v kódu. Existuje několik požadavků pro tento kód funkce správně.

Poznámka: Tyto požadavky jsou podobné co by vyžadováno, kdyby bylo přenos dat pomocí odkazy.

Prosím zkontrolujte, zda sešit používají má seznam na každém listu skládající se z nejméně dvou sloupců.

Požadavky jsou:

  • Data musí být ve formě sloupec s názvy polí v prvním řádku. Zatímco dat může začít libovolného řádku, Tato podrutina předpokládá tento řádek 1 obsahuje názvy polí a nic pod řádek 1 je data Tabulka.
  • Data musí být souvislá. Chybějící záznamu dat nebude Tato podrutina nepříznivě. Avšak po prázdný řádek. zjistil, podprogram bude předpokládat, že načtení všech údaje o aktuální list. Podobně Jakmile je prázdný sloupec zjistil, podprogram bude předpokládat, že neexistují žádné další pole doprava.
  • Každý sloupec bude považována za pole a každý řádek se považují záznam. Například data by měla být nastavit takto:
          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
    						
    Všimněte si, že neúplné záznamy jsou povoleny.
Podprogram níže popsané bude takto:
  • Deklaraci proměnných. Není vyžadováno, je užitečné pro syntaxi Kontrola a snižování množství paměti použít.
  • Vypnutí aktualizace obrazovky. To bude urychlit podprogram spuštění, Navíc se nezobrazí obrazovka flash.
  • Vytvoření databáze. První argument určuje umístění databáze bude, a jaký bude název. Vytvoří nový podprogram databáze ve stejné složce jako sešit a se stejným názvem jako sešit (s příponou MDB). Pokud databáze již existuje. s tímto názvem do složky zprávou budou dotazem, zda je Chcete odstranit existující databázi. To je prováděno přesahy, vytváření: Chyba 3294 Databáze již existuje.
  • Nastavení opakování projít všechny listy v sešitu.

    Poznámka: Protože moduly, listy s grafem a listy dialogů nejsou součástí kolekce listu nebudou mít vliv podprogram.
  • Ve smyčce listu vytvořte tabulku na základě názvu listu.
  • Zadejte smyčka prochází každým sloupcem v oblasti dat a vytvoří pole v tabulce s názvem záhlaví sloupce. V Vytvořte podprogram v části pole, je třeba znát typ dat Přiřazení nového pole. To provedete podprogram vyhledá buňky přímo pod jeho a určuje vlastnost formát čísla Buňka.

    Zadání příkazu Select Case, která vypadá většina písmeno vlevo Vlastnost Formát čísla. Typ dat je vytvořen, na základě toho písmeno. Pokud je vrácena "m", "d" nebo "y", typ dat je nastaven na "dbDate". Pokud je vrácena "G", k formátování buňky pod ní "Obecné". Pokud v takovém případě je třeba zjistit, zda buňka obsahuje číslo nebo text.

    Otestujte, zda buňka obsahuje číslo nebo text, podprogram pokusí se obsah buňky vydělte číslem 2. Pokud selže rozdělení, rutinní kapek na popisovač chyb, které určuje, zda neshoda "Type" Chyba je. Pokud v takovém případě se pole nastaveno na dbText. Pokud rozdělení je úspěšná, podprogram klesne na další buňku dolů určení, pokud tato divize bude úspěšná. To je nutné, protože je nutné určit, že všechny záznamy obsahují dané číslo pole před přiřazením typu dat do formátu čísla. Pokud všechny Divize úspěšné, je přiřazen typ dat dbDouble.

    Protože kontrola všech buněk ve sloupci je časově náročný proces. Na podprogram kontroluje přítomnost "Zip" nebo "Postal" ve sloupci záhlaví. Důvodem je, že by měla být PSČ a PSČ Formát dbText. I když máte všechny pětimístné PSČ vašem listu, můžete přidat některé den PSČ číslice 9. Pokud máte pole formátována jako "dbDouble", zobrazí se chybová zpráva Při pokusu o zadání poštovního plus čtyři hodnoty. Hledání "Zip" nebo "Poštovní" snižuje čas procesoru pro vytvoření pole.

    Pokud selžou všechny příkazy Select Case, pole nastaveno na dbText.
  • Po vytvoření všech polí na listu je přidána všechna data v tabulce.
  • Po přidání všech dat do tabulky je vybrána další list a proces začíná znovu, dokud nebyly všechny listy vybrán a uložen jako tabulka.
          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 Sub
    
    ErrorHandler:
         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

Odkazy

Aplikace Microsoft Access 97

Další informace o vytváření indexů klepněte na kartě Rejstřík v Nápověda pro Microsoft Access, zadejte následující text:
Indexy, vytváření
a potom poklepejte na přechod "Vytvoření indexu pro vybraný text rychlejší vyhledání a řazení záznamů."

Aplikace Microsoft Access verze 7.0

Další informace o indexování klepněte v nabídce Nápověda Průvodce odpověďmi v aplikaci Microsoft Access 7.0 zadejte: Index v Vyhledávací pole a klepněte na tlačítko "rozhodnout, zda a kdy použití indexu."

Aplikace Microsoft Access 2.0

Další informace o indexování hledání klepněte v nabídce Nápověda Aplikace Microsoft Access verze 2.0, typ Index v pole Hledat klepněte na "Index (viz také indexy)" a klepněte na tlačítko "vytváření je Index"podle témat.

Vlastnosti

ID článku: 151566 - Poslední aktualizace: 4. července 2012 - Revize: 12.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
Klíčová slova: 
kbdtacode kbhowto kbprogramming kbmt KB151566 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku: 151566
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu