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.
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í.
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
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.
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.
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.