< návrat zpět
MS Excel
Téma: Načtení dat z několika souborů - různá hesla 
Zaslal/a zmetik 12.1.2014 17:04
Dobrý den,
Potřeboval bych poradit s makrem, které by mělo projít všechny soubory v určité složce (soubory mají stejnou strukturu)a natahat z nich data do řádků souhrnného souboru. Problémem je, že jednotlivé zdrojové soubory jsou zamčené různými hesly. Pomocí makra bych chtěl zadat jedno heslo a poté projít všechny soubory tak, aby se načetla data jen ze souborů, u kterých sedí zadané heslo. Makro jsem dotáhl do stavu, kdy mi načte data, pokud všechny soubory mají heslo stejné, ale zastaví se s chybou, pokud narazí na soubor s heslem odlišným a již nepokračuje. Další věcí je, že všechny úspěšně načtené soubory ze zdrojové složky by se poté měly automaticky přesunout do složky jiné, aby bylo vidět, které soubory jsou již zpracované.
Níže zasílám rozepsané makro:
Sub nacisthodnoty()
Dim souborkalkulace As String
Dim cesta As String
Dim heslo As String
Dim i As Integer
i = 2
Application.DisplayAlerts = False
Application.ScreenUpdating = False
cesta = "C:\PREvsPOST\InputPrecalc\"
souborkalkulace = Dir(cesta)
heslo = InputBox("Input the password to unprotect Calculation Tools", "Calculation Tool password")
Do While Len(souborkalkulace) > 0
Workbooks.Open (cesta & souborkalkulace), , , , heslo
Range("C11").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 1)
Range("L11").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 2)
Range("C19").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 3)
ActiveWorkbook.Close
i = i + 1
souborkalkulace = Dir
Loop
End Sub
Díky moc za všechny potenciální rady:-)
  
  
  
kp57(12.1.2014 20:47)#017209 
No ten chybový stav bych ošetřil:
On Error Resume Next
příkazy
On Error Goto 0
a ten přesun:
Name OldName As NewNamecitovat 
zmetik(12.1.2014 22:00)#017211 
pokud ošetřím chybový stav tak, jak navrhujete, tak mi to automaticky zavře načítací souhrnný soubor :-(
citovat 
kp57(12.1.2014 23:09)#017212 
Sub nacisthodnoty()
Dim souborkalkulace As String, cesta As String, heslo As String, i As Integer
i = 2
Application.DisplayAlerts = False
Application.ScreenUpdating = False
cesta = "C:\PREvsPOST\InputPrecalc\"
souborkalkulace = Dir(cesta)
heslo = InputBox("Input the password to unprotect Calculation Tools", "Calculation Tool password")
On Error Resume Next
Do While Len(souborkalkulace) > 0
 Workbooks.Open (cesta & souborkalkulace), , , , heslo
 If Err = 0 Then
 Range("C11").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 1)
 Range("L11").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 2)
 Range("C19").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 3)
 i = i + 1
 ActiveWorkbook.Close
 Name cesta & souborkalkulace As NovaCesta & souborkalkulace
 Else
 Err = 0
 End If
 souborkalkulace = Dir
Loop
On Error GoTo 0
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Subcitovat  
 eLCHa(13.1.2014 8:55)#017218
Využijte proměnnou typu Workbook
Sub nacisthodnoty()
 Dim souborkalkulace As String
 Dim cesta As String
 Dim heslo As String
 Dim i As Integer
 Dim w As Workbook
 
 i = 2
 Application.DisplayAlerts = False
 Application.ScreenUpdating = False
 
 cesta = "C:\PREvsPOST\InputPrecalc\"
 souborkalkulace = Dir(cesta)
 heslo = InputBox("Input the password to unprotect Calculation Tools", "Calculation Tool password")
 
 Do While Len(souborkalkulace) > 0
 On Error Resume Next
 Set w = Workbooks.Open(Filename:=cesta & souborkalkulace, Password:=heslo)
 On Error GoTo 0
 
 If Not w Is Nothing Then
 w.Sheets("XY").Range("C11").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 1)
 w.Sheets("XY").Range("L11").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 2)
 w.Sheets("XY").Range("C19").Copy Destination:=Workbooks("nacitaci.xlsm").Worksheets("list1").Cells(i, 3)
 w.Close
 Set w = Nothing
 
 i = i + 1
 souborkalkulace = Dir
 End If
 Loop
 
 Application.DisplayAlerts = True
 Application.ScreenUpdating = True
End Sub
citovat 
zmetik(18.1.2014 16:21)#017354 
Již funguje, děkuji za pomoc :-)
citovat