-
VBA for Excel
Ahoj, snad mi niekto poradi:
Na ulahcenie prace som si chcel naprogramovat makro (podotykam ze nie som programator ani netuzim nim byt a VBA sa venujem par dni), ktoreho cast je tu:
Set NewSheet = Sheets.Add(Type:=xlWorksheet)
ActiveSheet.Name = "supisharkov"
npoc = Sheets.Count
'urcenie harkov na vymaz
For i = 1 To npoc
ActiveSheet.Cells(i, 1).Value = Sheets(i).Name
ActiveSheet.Cells(i, 2).Value = Left(ActiveSheet.Cells(i, 1), 6)
Next i
'mazanie harkov
For i = 1 To npoc
If ActiveSheet.Cells(i, 2).Value = "supkab" Then
Sheets(ActiveSheet.Cells(i, 1).Value).Select
ActiveWindow.SelectedSheets.Delete
ActiveWorkbook.Sheets("supisharkov").Select
End If
Next i
Sheets("supisharkov").Select
ActiveWindow.SelectedSheets.Delete
Malo by to fungovat takto: vytvoril by sa novy harok (list), spocital by sa pocet harkov v zosite. V novom harku by 1. cyklus vypisal do 1. stlpca mena vsetkych harkov. Druhy cyklus by na zaklade casti nazvu jednotlive nepotrebne harky mazal. Napokon by sa zmazal aj ten docasne vytvoreny pomocny harok "supisharkov". Chapem ze skusenejsim programatorom sa tento sposob moze zdat streleny a tazkopadny, ale kazdopadne to funguje v Exceli XP. Ale problem je v tom, ze v Exceli97 to zahlasi hned prvu chybu v 1. riadku (inac som ten riadok odkukal niekde z netu). Ak ho aj ignorujem (tu by som si este snad vedel pomoct), zahlasi sa dalsia chyba v 1. cykle pri funkcii left. S tym ale neviem pohnut: ved Excel97 tuto funkciu obsahuje, a dokonca aj v helpe je na to priklad... Co s tym pls???
-
Tvé řešení opravdu není z nejúspornějších. Jestli chceš dosáhnout toho, aby se vymazaly listy, jejichž název začíná na "subkap", dá se to napsat třeba takhle:
Kód:
Public Sub Vymazat()
Dim wksList As Worksheet
For Each wksList In ActiveWorkbook.Worksheets
If wksList.Name Like "subkap*" Then wksList.Delete
Next wksList
End Sub
Snad to bude fungovat i v Excelu 97 (zkoušeno v 2000).
-
No, kazdopadne diky, zajtra to urcite vyskusam...
-
Super, funguje to. Diky.
Este 1 problemik pri 97: Funkcia chr v riadku pre leftfooter hlasi "ocakava sa pole". Co mu tam vlastne chyba ku stastiu? Potrebujem mat lavu patu v 2 riadkoch a chr(10) by malo simulovat "enter".
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = "meno" & chr(10) & "&F"
.CenterFooter = "Zoznam káblov"
.RightFooter = cislostrany
.LeftMargin = Application.InchesToPoints(0.2)
.RightMargin = Application.InchesToPoints(0.2)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.7)
.HeaderMargin = Application.InchesToPoints(0.2)
.FooterMargin = Application.InchesToPoints(0.4)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = True
.Zoom = 80
'.PrintErrors = xlPrintErrorsDisplayed
End With
-
Ten řádek vypadá v pořádku. Jsi si jistý, že to hlásí chybu v něm? Jinak pro přechod na nový řádek je ve VBA přímo konstanta vbLf. Můžeš to zkusit napsat takhle, třeba to pomůže:
Kód:
ActiveSheet.PageSetup.LeftFooter = "meno" & vbLf & "&F"
-
No, áno, je to v tom riadku - vždy sa to tam sekne, označí ho žltou (presne to "chr") a chce ladiť. Inak skúsil som aj otvoriť si nový súbor, nahrať nové makro kde som len vložil pätu a potom som sa doňho v editore pozrel - napísalo to tam presne to isté, tak neviem (vlastne odtiaľ som to odkukal). Ale dám si poradiť a skúsim tvoj nápad. Ale až v pondelok - v robote. Dík.
-
Tak pomohlo to. Diky moc. Inac som prekvapeny ako dlho trva ten "page setup" (teda aspon na P233 so 48MB RAM). Cau.