Zagon macro-ja izven excela

Pomoč pri delu z MS Excelom
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a admin »

Pozdravljeni,

Niste mi odgovorili na vprašanje. Ti skripti (programčka) nista za Excel, temveč sta pisana v programskem jeziku VBS oz. Visual Basic Script.

To pa pomeni, da morate program zapisati v datoteko in ji dati končnico VBS, potem pa jo zagnati iz ukazne vrstice.

Takole:

Koda: Izberi vse

Cscript zazeni.vbs [ime excelove datoteke]
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a ajk »

Se opravičujem če sem nejasno napisal. Res je tako kot ste napisali. Programček (skripta) je zapisan v VBS datoteko (Sales.VBS), ki jo potem zaženem z BAT datoteko v katerem je ukaz:

Koda: Izberi vse

@echo off
pause
cscript Sales.vbs "C:\Test\Book1.xlsm"
pause
Problem je da mi druga skripta (Sales.VBS) ne deluje. Javlja mi da makroja ni mogoče zagnati, ker ali ni makro na voljo v delovnem zvezku ali pa so vsi makroji onemogočeni. Za test sem uporabil isti excellov zvezek v katerem je isti makro kot v primeru ko uporabljam prvi programček (skripto) ki deluje. Tako da je makro na valjo in tudi makroji niso onemogočeni.

Sales.VBS ki mi ne deluje

Koda: Izberi vse

Set objExcel = CreateObject("Excel.Application")

objExcel.Application.Run "'C:\Test\Book1.xlsm'!List1.test"

objExcel.DisplayAlerts = False
objExcel.Application.Quit
Set objExcel = Nothing
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a admin »

Pozdravljeni,

Preverite ali je procedura test javna 'public' in potem jo kličite brez definicije lista, samo '[ime dz]!test'
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a ajk »

Pozdravljeni

Zadeva deluje če naredim tako kot ste napisali, da izpustim definicijo lista. Sicer ne vem zakaj deluje brez tega me pa res zanima. Tam omenjate da naj preverim ali je procedura test javna. Ali to mislite na makro "test" v samem excelu? Kje pa bi se naj to nahajalo, ker jaz tega ne najdem.

Če lahko bi še nekaj vprašal. Imam isti primer kot je ta s katerim sem testiral s tem da mi makro iz tabele v excelu generira tekstovno datoteko. V kolikor zaženem z dvojnim klikom "programček.VBS" (ki zažene makro v excelu) stvar deluje in mi zgenerira tekstovno datoteko. V kolikor pa "programček.VBS" zaženem z BAT datoteko pa mi ne zgenerira tekstovne datoteke.

Pa še nekaj: ali bi se naj excel, ki vsebuje makro vedno shranjeval ko [ime].xlsm, mi v tem primeru zadeva ne deluje če ga shranim ko navaden xls ([ime].xls)

Hvala za odgovore
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a admin »

Pozdravljeni
ajk napisal/-a:Zadeva deluje če naredim tako kot ste napisali, da izpustim definicijo lista.
Potem je vse OK
ajk napisal/-a:Tam omenjate da naj preverim ali je procedura test javna. Ali to mislite na makro "test" v samem excelu?
Makro je stara in "zgrešena" beseda, ki se še vedno uporablja, ker je pač znana. V Excelu imate pač procedire (Procedure) ali/in funkcije (Function). Vsaka izmed njih pa je lahko javna (public) ali privatna (private) - če posebej ne specificirate dostopa, je javna
ajk napisal/-a:Če lahko bi še nekaj vprašal. Imam isti primer kot je ta s katerim sem testiral s tem da mi makro iz tabele v excelu generira tekstovno datoteko. V kolikor zaženem z dvojnim klikom "programček.VBS" (ki zažene makro v excelu) stvar deluje in mi zgenerira tekstovno datoteko. V kolikor pa "programček.VBS" zaženem z BAT datoteko pa mi ne zgenerira tekstovne datoteke.
To je vprašanje za kankreten makro, ki ga ne poznam, zato vam ne morem pomagati
ajk napisal/-a:Pa še nekaj: ali bi se naj excel, ki vsebuje makro vedno shranjeval ko [ime].xlsm, mi v tem primeru zadeva ne deluje če ga shranim ko navaden xls ([ime].xls)
Končnica xlsm je končnica excelovih delovnih zvezkov z makri od Excela 2003 dalje. Če imate delovni zvezek za Excel pred letom 2003 (takšen delovni zvezek ima liste, ki imajo 65000 vrstic, novi jih imajo 2.000.000), potem ga lahko shranite kot xls, sicer uporabljajte xlsm. To je to. Če veste da so notri makri, potem shranite kot xlsm in to je to.

Hvala za odgovore[/quote]
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a ajk »

Pozdravljeni

Najprej najlepša hvala za odgovore
ajk napisal/-a:Če lahko bi še nekaj vprašal. Imam isti primer kot je ta s katerim sem testiral s tem da mi makro iz tabele v excelu generira tekstovno datoteko. V kolikor zaženem z dvojnim klikom "programček.VBS" (ki zažene makro v excelu) stvar deluje in mi zgenerira tekstovno datoteko. V kolikor pa "programček.VBS" zaženem z BAT datoteko pa mi ne zgenerira tekstovne datoteke.
To je vprašanje za kankreten makro, ki ga ne poznam, zato vam ne morem pomagati

Makro ni nobena skrivnost, samo upam da ne bo preveč kritik na njegov račun :)

Koda: Izberi vse

Sub test1()
indeks = 3
indeks1 = 3
For indeks = 3 To 500
    If Range("List2!B" & CStr(indeks)) <> "" Then
        Range("List3!B" & CStr(indeks1)) = Range("List2!B" & CStr(indeks))
        Range("List3!C" & CStr(indeks1)) = Range("List2!C" & CStr(indeks))
        Range("List3!D" & CStr(indeks1)) = Range("List2!D" & CStr(indeks))
        Range("List3!E" & CStr(indeks1)) = Range("List2!E" & CStr(indeks))
        Range("List3!F" & CStr(indeks1)) = Range("List2!F" & CStr(indeks))
        Range("List3!G" & CStr(indeks1)) = Range("List2!G" & CStr(indeks))
        indeks1 = indeks1 + 1
    End If
Next indeks

    indeks = 3
    indeks1 = 3
    pozicijaRE2 = 0
    
For indeks = 3 To 500
    If Range("List3!B" & CStr(indeks)) = "RE2" Then
    If Range("List3!B" & CStr(indeks + 1)) <> "RE3" Then
        pozicijaRE2 = indeks
        
        For indeks1 = indeks To 500
            If Range("List3!B" & CStr(indeks1)) = "RE3" Then
                pozicijaRE3 = indeks1
                indeks = indeks1
                Exit For
            End If
        Next indeks1
        
        Range("List3!H" & CStr(pozicijaRE2) & ":" & "H" & CStr(pozicijaRE3)) = "x*x"
    End If
    End If
    
'Range("List3!A1:B2") = Range("List3!A3:B4")
    
Next indeks


indeks = 3
indeks1 = 3

For indeks = 3 To 500
   If Range("List3!H" & CStr(indeks)) = "x*x" Then
        Range("List3!B" & CStr(indeks1)) = Range("List3!B" & CStr(indeks))
        Range("List3!C" & CStr(indeks1)) = Range("List3!C" & CStr(indeks))
        Range("List3!D" & CStr(indeks1)) = Range("List3!D" & CStr(indeks))
        Range("List3!E" & CStr(indeks1)) = Range("List3!E" & CStr(indeks))
        Range("List3!F" & CStr(indeks1)) = Range("List3!F" & CStr(indeks))
        Range("List3!G" & CStr(indeks1)) = Range("List3!G" & CStr(indeks))
        indeks1 = indeks1 + 1
   End If
 Next indeks
    Range("List3!B" & CStr(indeks1) & ":" & "G500").ClearContents
    Range("List3!H3:H500").ClearContents
    
    Sheets("List3").Select
    
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Rows("1:2").Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select
  
'   Shrani aktivni zvezek v isto mapo kot je Workbook in v format "ime zvezka".LOG
        ActiveSheet.SaveAs Filename:= _
            ThisWorkbook.Path & "\" & ActiveWorkbook.Name & ".LOG", FileFormat:= _
            xlTextPrinter, CreateBackup:=False
  
  
  ActiveSheet.Name = "List3"
  
  'Sheets("List3").Select
    'Sheets(ActiveSheet.Name).Select
    'Sheets(ActiveSheet.Name).Copy
    'ActiveWorkbook.SaveAs Filename:= _
        '"C:\temp" & ActiveWorkbook.Name & "_" & Date & ".xls", FileFormat:= _
        'xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
     'ActiveWorkbook.Close
    
    
    'ActiveWorkbook.SaveAs Filename:="C:\temp\Book1.xls", FileFormat:=xlNormal, _
        'Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        'CreateBackup:=False
    'ActiveWindow.Close
    
'ActiveWorkbook.Close (SaveChanges = False)
    
    
End Sub

Skratka ko poženem BAT datoteko

Koda: Izberi vse

@echo off
pause
cscript Sales.vbs "C:\Test\Book1.xlsm"
pause
mi ne generira tekstovne datoteke z [ime dz].log (brez končnice xls)

VBS datoteka pa je sledeča

Koda: Izberi vse

Set objExcel = CreateObject("Excel.Application")

objExcel.Application.Run "'C:\Test\Book1.xlsm'!test1"

objExcel.DisplayAlerts = False
objExcel.Application.Quit
Set objExcel = Nothing
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a admin »

Pozdravljeni,

tole pa je tako konkretno in podrobno, da presega opcijo "zastonj pomoči". V kolikor želite vam lahko nudim plačljivo pomoč.
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a ajk »

Pozdravljeni

Popolnoma vas razumem in se opravičujem če sem zašel v podrobnosti, vendar vseeno hvala za odgovore. A na osnovi mojih "problemov" lahko podate okvirno ceno za plačljivo pomoč?

Hvala
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Zagon macro-ja izven excela

Odgovor Napisal/-a admin »

Pozdravljeni,

Pošljite e-pošto na naslov info@matjazev.net in tam opišite, kaj potrebujete. Na podlagi tega vam bom lahko natančno povedal ceno in/ali ostale pogoje.

Ob tem je seveda bolje in priporočliveje, da vam kodo napišem jaz - na podlagi vaših potreb - kot pa da gledam in popravljam vašo kodo.
lp,
Matjaž Prtenjak
Administrator
Odgovori