Obojestransko tiskanje

Pomoč pri delu z MS Excelom
Odgovori
majh
Prispevkov: 5
Pridružen: Če Apr 06, 2006 8:35 am

Obojestransko tiskanje

Odgovor Napisal/-a majh »

Zdravo. Uporabna stran ter forum :) kr tako naprej!
Iščem pa eno rešitev. Iz meseca v mesec tiskam več v excelu in sedaj bi mi že zelo prav prišla funkcija "obojestranskega tiskanja". Pa tega nikjer ne najdem nič pametnega.
OK. V Wordu se pač znajdeš in daš tiskati najprej sode strani, vstavim iste liste v tiskalnik in dam potem še lihe [idealno :)]
V excelu pa nevem kaj in kako. Delovni list ima kar precej strani, tako da ne pride v poštev, da bi vsak list posebej tiskal. Rad bi nekaj takega kot je že v Wordu. A je to možno kako doseči?
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

V starem forumu (dosegljiv v datoteki matjazev_net.chm) je že bilo to vprašanje in tedaj sem napisal makro, ki vam omogoča izbor poljubnih strani, ki naj jih Excel natisne. Če pa potrebujete pa ga lahko popravim tako, da sam izbere vse liha/sode:

Makro vas bo vprašal za seznam strani (ločite jih z vejico!) in jih izpisal:

Koda: Izberi vse

'Avtor: Matjaž Prtenjak
'Junij 2002
Function mSplit(text As String, meja As String) As Variant
    Dim rezultat() As Variant
    Dim stevec As Integer
    Dim pozicija As Integer
    Dim dolzina As String
    Dim tmp As String
   
    tmp = text
    stevec = 0
    pozicija = 0
    dolzina = Len(meja)
    Do
        ReDim Preserve rezultat(stevec)
        pozicija = InStr(tmp, meja)
        rezultat(stevec) = Left$(tmp, pozicija - 1)
        stevec = stevec + 1
        tmp = Mid$(tmp, pozicija + dolzina)
    Loop While InStr(tmp, meja) > 0
 
    ReDim Preserve rezultat(stevec)
    rezultat(stevec) = tmp
    mSplit = rezultat()
End Function

'Avtor: Matjaž Prtenjak
'August 2002
Sub NatisniStrani()
  Dim strani As String
  
  strani = InputBox("Strani (ločene z vejico)", "Izberite strani", "")
  If (IsEmpty(strani)) Then Exit Sub
  
  Dim seznam As Variant
  seznam = mSplit(strani, ",")
  
  Dim i As Integer
  For i = LBound(seznam) To UBound(seznam)
    If IsNumeric(seznam(i)) Then
      ActiveSheet.PrintOut From:=seznam(i), to:=seznam(i)
    End If
  Next
End Sub
lp,
Matjaž Prtenjak
Administrator
majh
Prispevkov: 5
Pridružen: Če Apr 06, 2006 8:35 am

Odgovor Napisal/-a majh »

uau tole je zakon :) hvala ti!
če ti ni pretežko in imaš čas, bi te res prosil da narediš da sam izbere vse lihe oz. sode strani.

pa še to me zanima, ako je možno, da bi mu še povedal koliko kopij želim.
ponavadi namreč tiskam v 3eh oz. 5ih izvodih (gradbene situacije).
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Spodaj je makro, ki pa ga nisem preizkusil, ker nimam časa. Če kaj ne dela pač povejte in bom popravil. Makro vas bo najprej spraševal od katere do katere strani naj natisne, koliko kopij naj natisne ter ali naj tiska lihe ali sode strani. Ko boste vse vpisali vas bo še enkrat vprašal ali ste prepričani ter začel tiskati.

Makro nima posebnih kontrol zato vpisujte smislne podatke! Vsa stvar bi izgledala precej boljše, če bi bil to lep obrazec... a potem je več dela in koda ne more biti objavljena na netu, saj je zadaj obrazec... No mogoče bom pa kdaj to dodal v mDodatke :)

Koda: Izberi vse

' 12.4.2006
Sub NatisniLiheSodeStrani()
  Dim StraniOd As Integer
  Dim StraniDo As Integer
  Dim Sode As Boolean
  Dim StKopij As Integer
  
  StraniOd = InputBox("Natisni strani OD ...", "Izberite strani", "")
  StraniDo = InputBox("Natisni strani DO ...", "Izberite strani", "")
  StKopij = InputBox("Koliko kopij naj natisnem ...", "Izberite strani", "")
  Sode = (MsgBox("Ali tiskam SODE strani?", vbQuestion + vbYesNo, "Sode ali LIHE") = vbOK)
  
  Dim Izbor As String
  Izbor = "Izbrali ste sledeče pogoje: " & Chr(10) & _
          " tiskaj strani OD " & StraniOd & Chr(10) & _
          " tiskaj strani DO " & StraniDo & Chr(10)
  If (Sode) Then
    Izbor = Izbor & " tiskaj SODE strani " & Chr(10)
  Else
    Izbor = Izbor & " tiskaj LIHE strani " & Chr(10)
  End If
  Izbor = Izbor & " tiskaj " & StKopij & " kopij" & Chr(10) & Chr(10) & Chr(10) & _
          " Ali nadaljujem s tiskanjem? "
  
  If (MsgBox(Izbor, vbQuestion + vbOKCancel, "Ali tiskam?") <> vbOK) Then Exit Sub
 
  Dim i As Integer
  For i = StraniOd To StraniDo
    If ((i Mod 2 = 0) And Sode) Or ((i Mod 2 <> 0) And (Not Sode)) Then
      ActiveSheet.PrintOut From:=seznam(i), To:=seznam(i), Copies:=StKopij
    End If
  Next
End Sub
lp,
Matjaž Prtenjak
Administrator
majh
Prispevkov: 5
Pridružen: Če Apr 06, 2006 8:35 am

Odgovor Napisal/-a majh »

zdravo. nekej me zajebava. ko stisnem F5 mi vrže:
Compile Error:
Sub or Function not defined
in mi obarva tole kar sem odebelil spodaj.
' 12.4.2006
Sub NatisniLiheSodeStrani()
Dim StraniOd As Integer
Dim StraniDo As Integer
Dim Sode As Boolean
Dim StKopij As Integer

StraniOd = InputBox("Natisni strani OD ...", "Izberite strani", "")
StraniDo = InputBox("Natisni strani DO ...", "Izberite strani", "")
StKopij = InputBox("Koliko kopij naj natisnem ...", "Izberite strani", "")
Sode = (MsgBox("Ali tiskam SODE strani?", vbQuestion + vbYesNo, "Sode ali LIHE") = vbOK)

Dim Izbor As String
Izbor = "Izbrali ste sledeče pogoje: " & Chr(10) & _
" tiskaj strani OD " & StraniOd & Chr(10) & _
" tiskaj strani DO " & StraniDo & Chr(10)
If (Sode) Then
Izbor = Izbor & " tiskaj SODE strani " & Chr(10)
Else
Izbor = Izbor & " tiskaj LIHE strani " & Chr(10)
End If
Izbor = Izbor & " tiskaj " & StKopij & " kopij" & Chr(10) & Chr(10) & Chr(10) & _
" Ali nadaljujem s tiskanjem? "

If (MsgBox(Izbor, vbQuestion + vbOKCancel, "Ali tiskam?") <> vbOK) Then Exit Sub

Dim i As Integer
For i = StraniOd To StraniDo
If ((i Mod 2 = 0) And Sode) Or ((i Mod 2 <> 0) And (Not Sode)) Then
ActiveSheet.PrintOut From:=seznam(i), To:=seznam(i), Copies:=StKopij
End If
Next
End Sub
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:),

Pisati bi moralo:

Koda: Izberi vse

  ActiveSheet.PrintOut From:=i, To:=i, Copies:=StKopij 
lp,
Matjaž Prtenjak
Administrator
majh
Prispevkov: 5
Pridružen: Če Apr 06, 2006 8:35 am

Odgovor Napisal/-a majh »

tole kar si napisal, zdej popravi zadevo :) hvala.

vendar je še nekaj narobe.
ko me vpraša "Ali tiskam SODE strani?" in mu odgovoril DA, me ne šmira in vedno tiska LIHE.
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:), ja bo potrebno makre prej malce sprobati... Samo ko me vedno daje čas..
V sledeči vrstici napačno piše '= vbOK', mora pa pisati '= vbYes', kot je popravljeno spodaj.

Koda: Izberi vse

Sode = (MsgBox("Ali tiskam SODE strani?", vbQuestion + vbYesNo, "Sode ali LIHE") = vbYes) 
lp,
Matjaž Prtenjak
Administrator
majh
Prispevkov: 5
Pridružen: Če Apr 06, 2006 8:35 am

Odgovor Napisal/-a majh »

hehe sem probal in sedaj dela kot švicarska urca :D
na začetku je malo zamudno, dokler se ne navadiš na sistem tiskanja (več izvodov naenkrat tiskam, pa liste je potrebno potem sistematično obračati...), samo sedaj ko mi je vse jasno je pa tole zelo uporabna zadeva

ako še kdo rabi tole, objavljam celotno popravljeno kodo:

Koda: Izberi vse

'Avtor: Matjaž Prtenjak
' 12.4.2006
Sub NatisniLiheSodeStrani()
  Dim StraniOd As Integer
  Dim StraniDo As Integer
  Dim Sode As Boolean
  Dim StKopij As Integer
 
  StraniOd = InputBox("Natisni strani OD ...", "Izberite strani", "")
  StraniDo = InputBox("Natisni strani DO ...", "Izberite strani", "")
  StKopij = InputBox("Koliko kopij naj natisnem ...", "Izberite strani", "")
  Sode = (MsgBox("Ali tiskam SODE strani?", vbQuestion + vbYesNo, "Sode ali LIHE") = vbYes) 
 
  Dim Izbor As String
  Izbor = "Izbrali ste sledeče pogoje: " & Chr(10) & _
          " tiskaj strani OD " & StraniOd & Chr(10) & _
          " tiskaj strani DO " & StraniDo & Chr(10)
  If (Sode) Then
    Izbor = Izbor & " tiskaj SODE strani " & Chr(10)
  Else
    Izbor = Izbor & " tiskaj LIHE strani " & Chr(10)
  End If
  Izbor = Izbor & " tiskaj " & StKopij & " kopij" & Chr(10) & Chr(10) & Chr(10) & _
          " Ali nadaljujem s tiskanjem? "
 
  If (MsgBox(Izbor, vbQuestion + vbOKCancel, "Ali tiskam?") <> vbOK) Then Exit Sub
 
  Dim i As Integer
  For i = StraniOd To StraniDo
    If ((i Mod 2 = 0) And Sode) Or ((i Mod 2 <> 0) And (Not Sode)) Then
      ActiveSheet.PrintOut From:=i, To:=i, Copies:=StKopij 
    End If
  Next
End Sub 
Odgovori