Macro v excelu

steni

Fizikalc
5. jan 2008
682
39
28
Ravne na Koroškem
V celico N3 bi rad zapisal stran x od xx strani.
Zapisal sem macro :

Sub pagenumbers()
Dim MyR As Range
Dim PageNumber As Long


Set Mysheet = ActiveSheet
PageNumber = 1
Set MyR = Range("N3")
MyR.Value = "Stran " & PageNumber

Do While Not Intersect(MyR, ActiveSheet.UsedRange) Is Nothing
If MyR.EntireRow.PageBreak = xlPageBreakAutomatic Then
MyR.Value = "Stran " & PageNumber
PageNumber = PageNumber + 1

End If
Set MyR = MyR.Offset(1, 0)
Loop
End Sub

Kaj imam narobe oziroma kaj moram dodati, da bo stvar delovala.
Sedaj mi na vsako stran napiše "stran 1", macro moram ročno zagnati.
Ali je možno, da se macro samodejno zažene vsakič ko dam predogled tiskanja ali tiskanje.
 

Leska

Pripravnik
8. sep 2007
268
0
16
Tvoj makro (Excel 2010) na 1. *in drugo* stran zapiše "Stran 1". Za pravilno oštevilčenje zamenjaj vrstici:
MyR.Value = "Stran " & PageNumber
PageNumber = PageNumber + 1

Če pa želiš izpis "stran x od xx strani" pa namesto 1. vrstice kode zgoraj uporabi
MyR.Value = "Stran " & PageNumber & " od " & ActiveSheet.HPageBreaks.Count + 1

>Ali je možno, da se macro samodejno zažene vsakič ko dam predogled tiskanja ali tiskanje.
Definirat moraš odziv na dogodek :
Private Sub Workbook_BeforePrint(Cancel As Boolean)
pagenumbers
End Sub
 

steni

Fizikalc
5. jan 2008
682
39
28
Ravne na Koroškem
Hvala za pomoč moj macro sedaj izgleda takole :

Sub pagenumbers()
Dim MyR As Range
Dim PageNumber As Long
Set Mysheet = ActiveSheet
PageNumber = 1
Set MyR = Range("M3")
MyR.Value = "Stran " & PageNumber & " od " & ActiveSheet.HPageBreaks.Count + 1
Do While Not Intersect(MyR, ActiveSheet.UsedRange) Is Nothing
If MyR.EntireRow.PageBreak = xlPageBreakAutomatic Then
PageNumber = PageNumber + 1
MyR.Value = "Stran " & PageNumber & " od " & ActiveSheet.HPageBreaks.Count + 1
End If
Set MyR = MyR.Offset(1, 0)
Loop
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
pagenumbers
End Sub

Oštevilčenje strani deluje kot sem želel,vendar ga še vedno ročno poganjam.
Imam pa še eno vprašanje:
kaj spremeniti v macru, če želim, da se mi na začetku vsake strani ponovi x vrstic(to nastavim:priprava strani,list,....), številka strani pa je v celici, ki je v eni izmed teh x vrstic?
 
Nazadnje urejeno:

Leska

Pripravnik
8. sep 2007
268
0
16
Citat:
Uporabnik steni pravi:
Oštevilčenje strani deluje kot sem želel,vendar ga še vedno ročno poganjam.
Očitno nisi prebral, kaj piše na linku, ki sem ti ga prilepil zgoraj: "Unlike standard macros which are installed in standard modules, Workbook Events are installed in ThisWorkBook in the following manner: F11 (Visual Basic Editor), Get into your project library (name of your workbook) with Ctrl+R (View, Project Explorer), under the name of your workbook you see Microsoft Excel Objects, then before Modules you see ThisWorkBook, doubleclick and paste the code into the code window (F7)."
...
Citat:
Uporabnik steni pravi:Imam pa še eno vprašanje:
kaj spremeniti v macru, če želim, da se mi na začetku vsake strani ponovi x vrstic(to nastavim:priprava strani,list,....), številka strani pa je v celici, ki je v eni izmed teh x vrstic?
Dvomim, da je kakšna enostavna rešitev za tole (bi se pa verjetno našla kakšna, ki bi ti dala enak rezultat). "Vrstice, ponovljene na vrhu" so - domnevam - vedno enake. Če bi jih hotel spreminjati *med* tiskanjem vsake strani, pa bi moral imeti na to vezan dogodek, ki pa ga ni.
 

jgfd

Pripravnik
7. sep 2007
348
0
16
mi lahko kdo odgovori kaj se to napiše/definira vedno na začetku makra
npr:
Dim MyR As Range
Dim PageNumber As Long

sem sam tudi nekaj makrov napisal in vedno brez teh vrstic pa je bilo vse ok

kdaj in zakaj se to uporablja?

hvala
 

doto

Fizikalc
25. jul 2007
3.175
0
36
Tako se dela pravilno. S tem definiraš spremenljivko in ji določiš tip. Če tega ni prevajalnik avtomatsko kreira spremenljivko in ji dodeli tip, ko ji prvič dodeliš vrednost. V VBscriptu drugače obstaja ukaz, s katerim lahko od prevajalnika zahtevaš, da v primeru, če spremenljivke ne definiraš javi napako. Samo privzeto je to izklopljeno. Pravilno je zaradi tega, ker lahko pride do situacije, če nisi pazljiv, da spremenlivko uporabiš v kakšnem pogoju, ko še ni definirana. Ali pa ji dodliš vrednost različnih tipov, npr številka, ali niz znakov.

Primer:

If a Then
' naredi nekaj
End If

a ima tu nedefinirano vrednost

ali

a = "alter.si"
If a = 1 Then
' naredi nekaj
End If

a ima tu tip string, v pogoju ga pa primerjaš z integer.

Če imaš striktno preverjanje, te na take napake opozori prvajalnik.