Diskuze: Nefunkční makro - "error time 445" na Excel 2016
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

plelovsky:8.6.2018 11:01
Tarantula222:9.6.2018 0:08
V makre používaš metódu "FileSearch" ktorá už v novších verziách
exclu neexistuje.
Upravil som ti to na funkciu Dir, asi to bude ešte chcieť doladiť. Vyskúšaj
a daj vedieť.
Private Sub CommandButton6_Click()
arch = ActiveSheet.Range("L5").Value
If Trim(arch) = "" Then
arch = CurDir
Else
If Not Len(Dir(arch & "\" & NUL)) = 0 Then 'tato časť bude chcieť pravdepodobne upraviť. Neviem čo je v premennej NUL
ChDir arch
Else
arch = CurDir
End If
End If
' určení jména a cesty
mes = Month(Date)
rok = Year(Date)
Den = Day(Date)
soub = "AR" & Right(rok, 2) & Right("0" & mes, 2) & Right("0" & Den, 2) & ".XLS"
macesta = Application.GetSaveAsFilename(soub, fileFilter:="Archiv (*.xls), *.xls")
ActiveSheet.Range("L5").Select
ActiveSheet.Unprotect
ActiveSheet.Range("L5").Value = CurDir
If macesta <> False Then
' kontrola zda již neexistuje
co = vbYes
ActiveSheet.Protect
ActiveSheet.Range("a6").Select
If Not Len(Dir(macesta)) = 0 Then
co = MsgBox("Dnes jste již jeden soubor vytvořil. Přepsat?", vbYesNo)
If co = vbYes Then
Kill (macesta)
End If
End If
If co = vbYes Then
ActiveWorkbook.SaveAs Filename:=macesta, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Application.Quit
End If
End If
End Sub
Odpovídá na Tarantula222
Milan Janoušek:9.6.2018 19:20
Milan Janoušek:9.6.2018 19:20
Funguje, jsi machr. Můžu Tě ještě poprosit o úpravu všech
zbývajících kódů od 1 - 5. Ta 6estka je super šlape.
Dík moooc a C@uki.
Tarantula222:9.6.2018 22:48
Chyba bola ešte v dvojke, to som si včera nevšimol. Máš ju opravenú, vyskúšaj.
Private Sub CommandButton2_Click()
' výstup do BEST
' Sheets("Opis").Visible = False
Dim ud, ucdb, stucdb As String
volrad = 10
posun = 5
dtspl = Date
for3 = "yyyymmdd"
mes = Month(Date)
rok = Right(Year(Date), 2)
den = Day(Date)
prvlist = ActiveSheet.Name
li = ActiveSheet.Index
ActiveSheet.Range("a6").Select
ActiveSheet.Unprotect
' výběry
' Load vyberform
' vyberform.Show
co = MsgBox("Jen tento list?", vbYesNo + vbDefaultButton2, "Tento list")
If co = vbYes Then
vet = ActiveSheet.Range("a1").CurrentRegion.Rows.Count - posun
If vet = 0 Then
xx = MsgBox("Na tomto listu nejsou žádné přikazy", vbOK)
Exit Sub
End If
jmli = prvlist
Else
jmli = ""
End If
' co = MsgBox("Omezit datum splatnosti?", vbYesNo + vbDefaultButton2)
' If co = vbYes Then
' dtspl = Format(InputBox("Do jakého data zaplatit vše?", "Omezení data splatnosti", dtspl), for3)
' dt = Format(dtspl, "dd.mm.yyyy")
' End If
' umístění souborů
cesta = ActiveSheet.Range("L3").Value
If Trim(cesta) = "" Then
cesta = CurDir
Else
If Not Len(Dir(cesta & "\*.IKM")) = 0 Then
ChDir cesta
Else
cesta = CurDir
End If
End If
' určení jména a cesty
soub = "prikaz_KB_" & rok & " " & Right(" " & mes, 2) & " " & Right(" " & den, 2) & "_faktury" & ".IKM"
macesta = Application.GetSaveAsFilename(soub, fileFilter:="Formát BEST (.ikm), *.ikm")
ActiveSheet.Range("L3").Value = CurDir
If macesta <> False Then
' kontrola zda již neexistuje
co = vbYes
cesta = Left(macesta, InStrRev1((macesta), "\"))
'If Not Len(Dir(macesta)) = 0 Then
' co = MsgBox("Dnes jste již jeden soubor vytvořil. Přepsat?", vbYesNo)
'End If
' přepsat ANO
If co = vbYes Then
koso = 0 ' kontrolní součet
co = 0 ' počet chyb
povet = 0 ' počet vět do výstupního souboru
pcd = ActiveSheet.Range("L1").Value
Open macesta For Output As #1 ' Otevře soubor pro zápis.
Call HlaPa(1, 0, 0)
dt = Format(Year(Date)) & Right("0" & Format(Month(Date)), 2) & Right("0" & Format(Day(Date)), 2)
Dim mySheet As Worksheet
For Each mySheet In Worksheets
If mySheet.Name = "Opis" Then
Exit For
End If
If jmli = "" Then
mySheet.Select
End If
ActiveSheet.Range("a6").Select
ActiveSheet.Unprotect
vet = ActiveSheet.Range("a1").CurrentRegion.Rows.Count - posun
If vet = 0 Then Exit For
rud = "L4"
If Not KontUct(ActiveSheet.Range(rud).Value) Then
ActiveSheet.Range(rud).Select
co = co + 1
End If
UctDbt = Uctc
ucdb = UctDbt
KBD = "0100"
For i = 1 To vet
j = 2
UI = ActiveCell(i, j)
If Not KontUI(UI) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
Exit For
End If
UI = IIf(UI = "UHR", "0", "1")
j = j + 1
If Not KontUct(ActiveCell(i, j)) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
End If
UctKredit = Uctc
uckr = UctKredit
j = j + 1
KBK = Right("0000" & Format(ActiveCell(i, j)), 4)
If Not KontKB(KBK) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
End If
If UctDbt = UctKredit And KBD = KBK Then
xx = MsgBox("Nesmí být stejné účty debet a kredit", vbExclamation, "VAROVÁNÍ")
ActiveCell.Offset(i - 1, j - 3).Range("a1").Select
co = co + 1
Exit For
End If
j = j + 1
Castka = Int(ActiveCell(i, j) * 100)
koso = koso + Castka
If Not KontCastka(Castka) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
End If
Castka = Right(String(15, "0") & Format(Castka), 15)
j = j + 1
Splatnost = ActiveCell(i, j)
dd = ""
mm = ""
rr = ""
k = 1
zn = Mid(Splatnost, k, 1)
Do Until zn < "0" Or zn > "9"
dd = dd + zn
k = k + 1
zn = Mid(Splatnost, k, 1)
Loop
k = k + 1
zn = Mid(Splatnost, k, 1)
Do Until zn < "0" Or zn > "9"
mm = mm + zn
k = k + 1
zn = Mid(Splatnost, k, 1)
Loop
k = k + 1
zn = Mid(Splatnost, k, 1)
Do Until zn < "0" Or zn > "9"
rr = rr + zn
k = k + 1
zn = Mid(Splatnost, k, 1)
Loop
r = Val(rr)
If r < 1000 Then
r = r + 2000
End If
m = Val(mm)
d = Val(dd)
If m = 2 Then
If r Mod 4 = 0 Then
kd = 29
Else
kd = 28
End If
Else
If m > 7 Then
kd = 31 - m Mod 2
Else
kd = 30 + m Mod 2
End If
End If
spl = Right("0000" & r, 4) + Right("0" & mm, 2) + Right("0" & dd, 2)
spl1 = Right("0" & dd, 2) + "." + Right("0" & mm, 2) + "." + Right("0000" & r, 4)
If d < 1 Or d > kd Or m > 12 Or m < 1 Then
xx = MsgBox("Nesprávný datum", vbExclamation, "VAROVÁNÍ")
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
Else
If Not KontSplat(spl1) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
End If
End If
j = j + 1
VS = Right(String(10, "0") & Trim(ActiveCell(i, j)), 10)
If Not KontVS(VS) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
End If
j = j + 1
KS = Right(String(10, "0") & Trim(ActiveCell(i, j)), 10)
If Not KontKS(KS) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
End If
j = j + 1
SS = Right(String(10, "0") & Trim(ActiveCell(i, j)), 10)
If Not KontSS(SS) Then
ActiveCell.Offset(i - 1, j - 1).Range("a1").Select
co = co + 1
Exit For
End If
j = j + 1
Zpravapr = Left(ActiveCell(i, j) & Space(30), 30)
j = j + 1
zpravapa = Left(ActiveCell(i, j) & Space(30), 30)
' If spl <= dtspl Or dtspl = "" Then
If pcd < 999 Then
pcd = pcd + 1
Else
pcd = 0
End If
Print #1, "01"; Right("00000" & Format(li * 1000 + pcd), 5); dt; spl; "CZK"; Castka; UI; "0000"; KS; Space(143); KBD; ucdb; VS; SS; Zpravapr; " "; KBK; uckr; VS; SS; zpravapa; Space(9)
povet = povet + 1
' ActiveCell(i, 1) = "P"
' Else
' ActiveCell(i, 1) = ""
' End If
Next i
ActiveSheet.Range("L1").Value = pcd
If co = 0 Then
VV = vet + volrad
VP = VV + posun
' With ActiveSheet
' rozsah = "e" & VP
' vzorec = "=COUNTIF(a6:a" & VP - 1 & ", ""P"" )"
' .Range(rozsah).Value = vzorec
' rozsah = "e" & VP + 1
' vzorec = "=SUMIF(a6:a" & VP - 1 & ", ""P"" , e6:e" & VP - 1 & " )"
' .Range(rozsah).Value = vzorec
' End With
' CommandButton4.Caption = "Zamknout list"
' CommandButton4_Click
Else
Exit For
End If
If jmli <> "" Then
Exit For
End If
Next mySheet
Call HlaPa(2, povet, koso)
Close #1 ' Uzavře soubor.
' Kontrola počtu vět
If co = 0 Then
If povet > 0 Then
' Sheets("Opis").Visible = True
Sheets("Opis").Activate
ActiveSheet.Unprotect
ActiveSheet.Range("a6").Select
vet = ActiveSheet.Range("a1").CurrentRegion.Rows.Count + posun + volrad
rozsah = "a6:m" & vet + 30
ActiveSheet.Range(rozsah).Select
Selection.EntireRow.Delete
ActiveSheet.Range("a6").Select
i = 0
stucdb = "99999"
zavet = 0
Open macesta For Input As #1 ' Otevře soubor pro čtení
Do While Not EOF(1) ' Loop until end of file.
Line Input #1, textline ' Read line into variable.
kd = Left(textline, 2)
If kd = "01" Then
i = i + 1
j = 2
kd = Mid(textline, 200, 4)
ucdb = Mid(textline, 204, 16)
If stucdb <> ucdb Then
ActiveCell(i, j) = " "
i = i + 1
ActiveCell(i, j + 1) = "Na vrub uctu: " & ucdb & " / " & kd
i = i + 1
ActiveCell(i, j) = " "
stucdb = ucdb
i = i + 1
End If
uh = IIf(Mid(textline, 42, 1) = "0", "UHR", "INK")
ActiveCell(i, j) = uh
j = j + 1
ud = Mid(textline, 277, 16) ' ucet příjemce
ActiveCell(i, j) = ud
j = j + 1
ud = Mid(textline, 273, 4) ' kod banky příjemce
ActiveCell(i, j) = ud
j = j + 1
ud = Mid(textline, 27, 15) ' částka
ActiveCell(i, j) = Val(ud) / 100
j = j + 1
rr = Mid(textline, 16, 4) ' splatnost rok
mm = Mid(textline, 20, 2) ' splatnost mes
dd = Mid(textline, 22, 2) ' splatnost den
ActiveCell(i, j) = dd & "." & mm & "." & rr
j = j + 1
ud = Mid(textline, 293, 10) ' variabilní symb
ActiveCell(i, j) = ud
j = j + 1
ud = Mid(textline, 47, 10) ' konstantní symb
ActiveCell(i, j) = ud
j = j + 1
ud = Mid(textline, 303, 10) ' specifický symb
ActiveCell(i, j) = ud
j = j + 1
ud = Mid(textline, 240, 30) ' Zpráva pro příkazce
ActiveCell(i, j) = ud
j = j + 1
ud = Mid(textline, 313, 30) ' zpráva pro příjemce
ActiveCell(i, j) = ud
End If
zavet = zavet + 1
Loop
Close #1 ' Uzavře soubor.
VV = i + volrad
VP = VV + posun
rozsah = "b" & VP & ":e" & VP + 1
rrozsah = " " & VP & ":" & VP + 1
ActiveSheet.Range(rozsah).Select
Selection.Font.Bold = True
Selection.Font.Size = 11
Selection.HorizontalAlignment = xlLeft
ActiveSheet.Rows(rrozsah).RowHeight = 20
ActiveCell(1, 2) = "Počet příkazů:"
ActiveCell(2, 2) = "Celkem Kč:"
rozsah = "e" & VP
ActiveSheet.Range(rozsah).Select
Selection.NumberFormat = "0"
Selection.HorizontalAlignment = xlRight
vzorec = "=COUNT(e6:e" & VP - 1 & " )"
ActiveSheet.Range(rozsah).Value = vzorec
rozsah = "e" & VP + 1
ActiveSheet.Range(rozsah).Select
Selection.NumberFormat = "#,##0.00"
Selection.NumberFormat = for1
Selection.HorizontalAlignment = xlRight
vzorec = "=SUM(e6:e" & VP - 1 & " )"
ActiveSheet.Range(rozsah).Value = vzorec
ActiveSheet.Protect
If zavet = povet + 2 Then
xx = MsgBox("Soubor " & macesta & " byl úspěšně vytvořen." + Chr(13) + Chr(13) _
+ " přečteno příkazů " & povet & Chr(13) _
+ " zapsáno příkazů " & zavet - 2 & Chr(13) + Chr(13) _
+ "Soubor dávky nyní zašlete pomocí služby mojebanka do KB." + Chr(13) _
+ "Funkci pro načtení dávky najdete v aplikaci mojebanka pod položkou" + Chr(13) _
+ "menu ""Dávkové příkazy"", pod odkazem ""Odeslání dávky do banky"". ", vbOKOnly)
xx = MsgBox("Přejete si opis na tiskárnu?", vbYesNo)
If xx = vbYes Then
' OpisBtn_Click
pocstran = Int(i - 5 / 45) + 1
rozsah = "b6:k" & i + posun + volrad + 2
ActiveSheet.PageSetup.PrintArea = rozsah
With ActiveSheet.PageSetup
.PrintTitleRows = "$3:$5"
.PrintTitleColumns = ""
.LeftHeader = "Dne &D"
.CenterHeader = "&""Arial CE,tučné""&16Opis platebních příkazů do mojebanka&""Arial CE,obyčejné""" & Chr(10) & ""
.RightHeader = "Strana &P"
.LeftMargin = Application.InchesToPoints(0.78740157480315)
.RightMargin = Application.InchesToPoints(0.78740157480315)
.TopMargin = Application.InchesToPoints(0.984251968503937)
.BottomMargin = Application.InchesToPoints(0.984251968503937)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.511811023622047)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.CenterHorizontally = False
.CenterVertically = False
' .Orientation = xlPortrait
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = pocstran
End With
' ActiveWindow.SelectedSheets.PrintOut Copies:=1
ActiveWindow.SelectedSheets.PrintPreview
' Sheets("Opis").Select
' ActiveWindow.SelectedSheets.Visible = False
Sheets(prvlist).Activate
End If
Else
xx = MsgBox("Nesouhlasí počet vět ve výstupním souboru " & macesta & ". Bude smazán", vbOKOnly)
Kill (macesta)
End If
Else
xx = MsgBox("Soubor " & macesta & " se nevytvořil", vbOKOnly)
Kill (macesta)
End If
Else
xx = MsgBox("Byly nalezeny chyby v zadání příkazů", vbOKOnly)
Kill (macesta)
End If
End If
End If
End Sub
Akceptované řešení
+20 Zkušeností
+2,50 Kč
+20 Zkušeností
+2,50 Kč

Odpovídá na Tarantula222
Milan Janoušek:14.6.2018 15:24
Milan Janoušek:14.6.2018 15:24
Díky ještě jednou. Funguje na 102 %.
@hojki.
M.
Tarantula222:14.6.2018 15:34
Za málo, ešte prosím označ odpoveď nech mám body k plusu.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.
Zobrazeno 8 zpráv z 8.