Stránka 1 z 1

Excel - makro pro export listů do nových souborů

Napsal: 17 lis 2009 16:03
od claxon
Zdravím,
mám sešit, kde je několik listů - počet není předem určen. Potřeboval bych makro, které mi exportuje každý list zvlášť do nového souboru *.dbf se jménem toho listu do složky ve keré se nachází ten otevřený sešit. Problém je ten, že v druhém listu jsou vzorce, které se odkazujou na první list.
Předem moc díky za pomoc.

Re: Excel - makro pro export listů do nových souborů

Napsal: 17 lis 2009 21:29
od navstevnik
podle http://excelplus.net/news.php?readmore=8, http://support.microsoft.com/kb/790163/cs neni export z Excelu do formatu dbf jednoduchou zalezitosti, navic v Ex 2007 neni podporovan.
Nutnost upravy excelovskeho listu pred exportem bude vyzadovat rucni praci, v prvnim odkazu je odkaz na doplnek (http://www.asap-utilities.com), umoznujici export do dbf.
Preji uspech.

Re: Excel - makro pro export listů do nových souborů

Napsal: 17 lis 2009 21:36
od claxon
Ruční práci mám vyřešenou pomocí jiného makra. Vím, že nelze export z 2007, ale to nevadí, protože cílová skupina jsou uživatelé 2003.
I tak prozatím díky za radu.

Re: Excel - makro pro export listů do nových souborů

Napsal: 03 pro 2009 23:14
od claxon
Sub SpecialniExport()
Dim Sesit As Workbook
Set Sesit = ActiveWorkbook
' Naetení aktuálního sešitu
Sesit.SaveAs (ActiveWorkbook.Path & "\temp")
' Uložení aktuálního sešitu jako nový soubor s názvem "temp.xls"

Dim i As Long
Dim List As Worksheet
For Each List In Sesit.Worksheets
' Vybrání všech listu v sešitu
Select Case List.Name
' Vybrání listu podle zadaného názvu
Case "Hranice toíd", "Popis", "Úprava"
' Vybrání listu s názvem "Hranice toíd", "Popis", "Úprava"
Application.DisplayAlerts = False
' Deaktivace chybových hlášení
List.Delete
' Vymazání vybraných listu
Application.DisplayAlerts = True
' Aktivace chybových hlášení
Case Else
Dim Bunka As Range
Set Bunka = List.Range("A1")
' Nastavení pole o souoadnicích "A1" jako poeátek tabulky s parametrem "Bunka"
Dim BunkaX As Range
Set BunkaX = List.Range("A2")
' Nastavení pole o souoadnicích "A2" jako poeátek tabulky s parametrem "BunkaX"
Bunka.End(xlDown).EntireRow.Delete
Bunka.End(xlDown).EntireRow.Delete
' Vymazání posledních dvou oádku

Do While BunkaX.Formula <> ""
Select Case UCase(Left(Trim(BunkaX.Value), 3))
Case "KOD"
' Vybrání sloupcu, které mají v záhlaví text obsahující "KOD"
Range(BunkaX, Bunka.End(xlDown)).NumberFormat = "@"
' Zmina formátu vybraných sloupcu na formát "text"
End Select
Set BunkaX = BunkaX.Offset(0, 1)
Loop

Bunka.EntireRow.Delete
' Vymazání prvního oádku
End Select
Next

On Error GoTo Heaven

Dim Sheet As Worksheet
Dim OutputPath As String
Dim OutputFile As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
Dim FileNumber As Byte

For Each Sheet In Sheets
Dim SheetName As String
If Len(Sheet.Name) > 8 Then
FileNumber = FileNumber + 1
SheetName = LCase(Left(Sheet.Name, 6))
SheetName = SheetName & Format("00", FileNumber)
Else
SheetName = LCase(Sheet.Name)
End If
SheetName = Replace(SheetName, "e", "c")


OutputFile = ActiveWorkbook.Path & "\" & SheetName & ".dbf"
' Uloží každý list zvláš? se jménem listu a poíponou .dbf
Sheet.Copy
' Zkopíruje a vytvooí nový sešit s jedním listem, tato kopie sešitu se stane aktivní
ActiveWorkbook.SaveAs Filename:=OutputFile, FileFormat:=xlDBF4, CreateBackup:=False
ActiveWorkbook.Close
Next

Finally:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
Exit Sub

Heaven:
MsgBox "Nelze uložit ve formátu DBF." & vbCrLf & _
"Zdroj: " & Err.Source & " " & vbCrLf & _
"Eíslo chyby: " & Err.Number & " " & vbCrLf & _
"Popis: " & Err.Description & " " & vbCrLf
GoTo Finally


MsgBox "Úprava sešitu byla úspišni provedena.", vbOKOnly, "Oznámení"
' V poípadi, že úprava probihne v pooádku, oznámí uživateli

End Sub

Re: Excel - makro pro export listů do nových souborů  Vyřešeno

Napsal: 03 pro 2009 23:16
od claxon
Tak jsem to nakonec vyřešil sám. Díky. Kdyby měl někdo podobný problém, na dotazy odpovím. Pište na mail.