Forum » Programiranje » Visual Basic in Excel
Visual Basic in Excel
Kaiser ::
V Excelu bi rad napisal skripto za en gumb, ki ga imam v workbooku, da bi ob kliku nanj iz odštel neko od ene celice odštel vrednost druge, rezultat pa bi bil v prvi celici.
Zaenkrat znam v workbook namestiti gumb in posneti makro ter pogledati skripto posnetega makra.
Zaenkrat znam v workbook namestiti gumb in posneti makro ter pogledati skripto posnetega makra.
"Very funny, Scotty. Now beam down my clothes!"
matic ::
Ne zastopim kaj bi rad... ampak zato ne rabis makra in programa!!??
Ce bi rad A3 celico odstel od A2 in shranil v A1 - ce to jaz prav zastopim, zapisi samo v celico A1: "=A3-A2" in to je to... ce bi pa rad da se ti to zapise v celico A1 sele ko pritisnes na gumb pa posnami makro kako zapises to v celico A1, ga shrani in nastavi da se sprozi ob tem gumbu, natu pobrisi vsebino celice A1 in to je to.
Samo dvomim da si to hotel... zato malce bolje pojasni zadevo pa bo..
Ce bi rad A3 celico odstel od A2 in shranil v A1 - ce to jaz prav zastopim, zapisi samo v celico A1: "=A3-A2" in to je to... ce bi pa rad da se ti to zapise v celico A1 sele ko pritisnes na gumb pa posnami makro kako zapises to v celico A1, ga shrani in nastavi da se sprozi ob tem gumbu, natu pobrisi vsebino celice A1 in to je to.
Samo dvomim da si to hotel... zato malce bolje pojasni zadevo pa bo..
-----------------------------------------
podpis: _____________
podpis: _____________
Kaiser ::
Rad bi, da se ob pritisku na gumb vrednost v neki celici zmanjša za določeno konstantno vrednost (ta vrednost pa je zapisana v neki drugi celici). Se pravi, če klikam na gumb se vrednost v celici zmanjšuje.
"Very funny, Scotty. Now beam down my clothes!"
losnah ::
Dim konstanta As Integer
Sub odstevanje()
'mesto konstante, v 1. vrstici in drugi koloni
Row = 1
Col = 2
'prebere vrednost konstante
konstanta = Cells(Row, Col)
'zmanjsa aktivno celico za konstanto
Cells(Row, Col) = ActiveCell.Value - konstanta
End Sub
Sub odstevanje()
'mesto konstante, v 1. vrstici in drugi koloni
Row = 1
Col = 2
'prebere vrednost konstante
konstanta = Cells(Row, Col)
'zmanjsa aktivno celico za konstanto
Cells(Row, Col) = ActiveCell.Value - konstanta
End Sub
losnah ::
Aja pa se to:
V meniju Tools->Customize, izberi Commands tab, pod Categories izber Macros.
Izberi Custom Button in ga nesi na toolbar.
Klikn na njega z desno tipko izberi Assign Macro. Izber makro, ki si ga napisu.
Poj pa zapri okno Customize.
V meniju Tools->Customize, izberi Commands tab, pod Categories izber Macros.
Izberi Custom Button in ga nesi na toolbar.
Klikn na njega z desno tipko izberi Assign Macro. Izber makro, ki si ga napisu.
Poj pa zapri okno Customize.
losnah ::
1 Napaka:
vrstico:
Cells(Row, Col) = ActiveCell.Value - konstanta
zamenjaj z
ActiveCell.Value = ActiveCell.Value - konstanta
vrstico:
Cells(Row, Col) = ActiveCell.Value - konstanta
zamenjaj z
ActiveCell.Value = ActiveCell.Value - konstanta
Vesoljc ::
da ne bom odpiral nove teme:
moram narest en makro v excelu, oziroma proceduro v vba.
prvi korak je tak, da moram odprt (ter kasneje tudi zaprt) eno xls datoteko v novem oknu. neki sem brsku na netu, ampak vse kar sem najdu je odpiranje fajlov prek "OpenFile" dialoga, kjer mora user sam izbrati file ter klikniti open. no, tega nocem... ker pac nimam pojma o VB sprasujem znalce kako prevesti fopen ter fclose
moram narest en makro v excelu, oziroma proceduro v vba.
prvi korak je tak, da moram odprt (ter kasneje tudi zaprt) eno xls datoteko v novem oknu. neki sem brsku na netu, ampak vse kar sem najdu je odpiranje fajlov prek "OpenFile" dialoga, kjer mora user sam izbrati file ter klikniti open. no, tega nocem... ker pac nimam pojma o VB sprasujem znalce kako prevesti fopen ter fclose
Abnormal behavior of abnormal brain makes me normal...
Mercier ::
Oboje je čisto specifično excelu.
Odpiranje:
Workbooks.Open FileName:="X:\Pot\ExcelovaPeglednica.xls"
Zapiranje je pa rahlo bolj komplicirano:
Lahko zapreš vse odprte datoteke Workbooks.Close, določenega Workbooks("ExcelovaPeglednica.xls").Close ali pa preko ThisWorkbook ali ActiveWorkbook lastnosti (Application) npr. Application.ThisWorkbook.Close (oni application lahko spustiš). ActiveWorkbook tu pomeni trenutno aktivni, ThisWorkbook pa tistega kjer se nahaja makro (VBAProject). Če uporabljaš personal.xls ali add-on, thisworkbook navadno odpade.
Ko zapiraš, navadno excel zagnjavi s shranjevanjem. Temu se izogneš, da pred zapiranjem vpišeš Application.DisplayAlerts = False in po zapranju nazaj nastaviš na true (drugače se ohrani).
Odpiranje:
Workbooks.Open FileName:="X:\Pot\ExcelovaPeglednica.xls"
Zapiranje je pa rahlo bolj komplicirano:
Lahko zapreš vse odprte datoteke Workbooks.Close, določenega Workbooks("ExcelovaPeglednica.xls").Close ali pa preko ThisWorkbook ali ActiveWorkbook lastnosti (Application) npr. Application.ThisWorkbook.Close (oni application lahko spustiš). ActiveWorkbook tu pomeni trenutno aktivni, ThisWorkbook pa tistega kjer se nahaja makro (VBAProject). Če uporabljaš personal.xls ali add-on, thisworkbook navadno odpade.
Ko zapiraš, navadno excel zagnjavi s shranjevanjem. Temu se izogneš, da pred zapiranjem vpišeš Application.DisplayAlerts = False in po zapranju nazaj nastaviš na true (drugače se ohrani).
Zgodovina sprememb…
- spremenil: Mercier ()
Vesoljc ::
tnx!
se en Q:
kako pa naredis povsem nov prazen list ter mu das recimo svoje ime?
se en Q:
kako pa naredis povsem nov prazen list ter mu das recimo svoje ime?
Abnormal behavior of abnormal brain makes me normal...
Vesoljc ::
se en
kako preveris ce obstaja dolocen sheet?
kako preveris ce obstaja dolocen sheet?
Abnormal behavior of abnormal brain makes me normal...
Vesoljc ::
sem pogruntal
workbooks.add
workbooks("id").sheets.count
workbooks("id").sheets.name
workbooks.add
workbooks("id").sheets.count
workbooks("id").sheets.name
Abnormal behavior of abnormal brain makes me normal...
Mercier ::
Najkoristnejše povezave so zbrane tu: http://www.matjazev.net/prtenjam/index....
www.matjazev.net in na www.webblod.net je forum namenjen VBA. Tole dvoje je domače, za kaj drugega pa ne vem.
www.matjazev.net in na www.webblod.net je forum namenjen VBA. Tole dvoje je domače, za kaj drugega pa ne vem.
Vesoljc ::
zakaj za wraga mi tole javlja subscript out of range error?
Set wb = Workbooks.Add
Application.DisplayAlerts = False
wb.SaveAs FileName:="output.xls"
Application.DisplayAlerts = True
MsgBox "blak"
Windows("output.xls").Select
Set wb = Workbooks.Add
Application.DisplayAlerts = False
wb.SaveAs FileName:="output.xls"
Application.DisplayAlerts = True
MsgBox "blak"
Windows("output.xls").Select
Abnormal behavior of abnormal brain makes me normal...
Mercier ::
Objekta window ne moreš select-at. Je pa tisti output.xls itak trenutno aktivni zvezek, ko si ga dodal.
Set wb = Workbooks.Add
Application.DisplayAlerts = False
wb.SaveAs Filename:="output.xls"
Application.DisplayAlerts = True
MsgBox "blak"
Workbooks("output.xls").Activate
Subscript out of range pa mi ni jasen. Kje točno se ti pa ustavi izvajanje? Napoveduješ spremenljivke? (option explicit) V nasprotnem primeru lahko pride do čudnih napak...
Set wb = Workbooks.Add
Application.DisplayAlerts = False
wb.SaveAs Filename:="output.xls"
Application.DisplayAlerts = True
MsgBox "blak"
Workbooks("output.xls").Activate
Subscript out of range pa mi ni jasen. Kje točno se ti pa ustavi izvajanje? Napoveduješ spremenljivke? (option explicit) V nasprotnem primeru lahko pride do čudnih napak...
Vesoljc ::
ma ja, sej mi je nekako ratal, sem uporabil activate pa je zacelo delat...
napako mi je pa javljalo direkt po blak-u .
> je pa tisti output.xls itak trenutno aktivni zvezek, ko si ga dodal.
ja, sam vmes operiram se z enimi xls-i tko, da nisem ziher kater je aktiven in kater ne.
mam pa novo tezavco
imam en string zapis, ki je v biti hex vrednost (12 znakov). zdej morem izvest tole:
2000 A0B1 CCEE
1) po dva skupi vzet in jih obrnt
0200 0A1B CCEE
2) vzet en znak in njegov bitni zapis obrt (reverse)
0 - 0000 -> 0000
2 - 0010 -> 0100
A - 1010 -> 0101
0 - 0000 -> 0000
itd...
kako najlazje do tega?
napako mi je pa javljalo direkt po blak-u .
> je pa tisti output.xls itak trenutno aktivni zvezek, ko si ga dodal.
ja, sam vmes operiram se z enimi xls-i tko, da nisem ziher kater je aktiven in kater ne.
mam pa novo tezavco
imam en string zapis, ki je v biti hex vrednost (12 znakov). zdej morem izvest tole:
2000 A0B1 CCEE
1) po dva skupi vzet in jih obrnt
0200 0A1B CCEE
2) vzet en znak in njegov bitni zapis obrt (reverse)
0 - 0000 -> 0000
2 - 0010 -> 0100
A - 1010 -> 0101
0 - 0000 -> 0000
itd...
kako najlazje do tega?
Abnormal behavior of abnormal brain makes me normal...
Mercier ::
Ven vržeš presledke:
Najhitreje obrneš po dva znaka v nizu:
Za bitni zapis nevem kaj točno počneš, ampak v osnovi boš rabil select case stavek s šesnajstimi selecti, noter pa napisano, kaj naj bo kaj. Recimo funkcijo, ki sprejme string (hex) in vrne string (bin).
--------------
edit
Eh, en šlampast del kode...
MyStr = Replace(niz, " ", "")
Najhitreje obrneš po dva znaka v nizu:
For i = 1 To 12 Step 2 MyStrFUBAR = MyStrFUBAR & StrReverse(Mid$(MyStr, i, 2)) Next
Za bitni zapis nevem kaj točno počneš, ampak v osnovi boš rabil select case stavek s šesnajstimi selecti, noter pa napisano, kaj naj bo kaj. Recimo funkcijo, ki sprejme string (hex) in vrne string (bin).
--------------
edit
Eh, en šlampast del kode...
Zgodovina sprememb…
- spremenil: Mercier ()
Vesoljc ::
no zadeva deluje tko kot mora...
me pa zanima se ena stvar: zdej je postopek tak, da odprem xls filet, naredim data extract ter filet zaprem, nato vzamem drugega in tako naprej... ob vsem tem se seveda dogaja todno to :)
okna se odpirajo in zapirajo kot zmesana. se da file odprt tako, da ne bo skaku gor? al bo treba za to presaltat na VB?
me pa zanima se ena stvar: zdej je postopek tak, da odprem xls filet, naredim data extract ter filet zaprem, nato vzamem drugega in tako naprej... ob vsem tem se seveda dogaja todno to :)
okna se odpirajo in zapirajo kot zmesana. se da file odprt tako, da ne bo skaku gor? al bo treba za to presaltat na VB?
Abnormal behavior of abnormal brain makes me normal...
Mercier ::
Z Application.ScreenUpdating = False se znebiš bliskov. Ni treba vrednosti postavljat na true, ne spremeni nobene nastavitve excela.
Če rabiš excel, da ti kaj postori, ne rabiš ga pa gledat, bi mogoče skripta bila OK.
Set objExcel = CreateObject("Excel.Application")
'odpre excelov zvezek
objExcel.Workbooks.Open("X:\zvezek.xls")
'posuje excel z nevidnim prahom
objExcel.Visible = False
'nekaj napiše, da ne bo zgledalo,
'da smo bezveze odpirali
objExcel.Range("A1") = "WSH was here"
'naredi, da excel ne gnjavi pri shranjevanju
objExcel.DisplayAlerts = False
'shrani zvezek.xls kot zvezek1.xls
objExcel.Workbooks("zvezek.xls").SaveAs ("X:\zvezek1.xls")
'dovoli excelu nazaj gnjavit
objExcel.DisplayAlerts = True
'ugasne excel
objExcel.Quit
Set objExcel = Nothing
Če rabiš excel, da ti kaj postori, ne rabiš ga pa gledat, bi mogoče skripta bila OK.
Set objExcel = CreateObject("Excel.Application")
'odpre excelov zvezek
objExcel.Workbooks.Open("X:\zvezek.xls")
'posuje excel z nevidnim prahom
objExcel.Visible = False
'nekaj napiše, da ne bo zgledalo,
'da smo bezveze odpirali
objExcel.Range("A1") = "WSH was here"
'naredi, da excel ne gnjavi pri shranjevanju
objExcel.DisplayAlerts = False
'shrani zvezek.xls kot zvezek1.xls
objExcel.Workbooks("zvezek.xls").SaveAs ("X:\zvezek1.xls")
'dovoli excelu nazaj gnjavit
objExcel.DisplayAlerts = True
'ugasne excel
objExcel.Quit
Set objExcel = Nothing
Vesoljc ::
false screen updating deluje ok.
me pa zanima ena stvarca: ce bi hotu zadevo narest v "pure" VB z takim fancy gui-jem ter brez kakrsnih koli vidnih excelovih datotek, je koda zelo drugacna al bi se lahko zmuznu cez sz ctrl+c in ctrl+v ter kaksnim find/replace?
me pa zanima ena stvarca: ce bi hotu zadevo narest v "pure" VB z takim fancy gui-jem ter brez kakrsnih koli vidnih excelovih datotek, je koda zelo drugacna al bi se lahko zmuznu cez sz ctrl+c in ctrl+v ter kaksnim find/replace?
Abnormal behavior of abnormal brain makes me normal...
Mercier ::
Če bi delal z excelom, bi zgledalo cca. kot zgornji VBS. Skoraj isto kot v samem excelu, ampak spredaj vedno 'objExcel'. Po tem kopitu.
Vesoljc ::
v VB:
lExcel je Excel.app, selectam en sheet, nato pa hocem se en select:
lExcel.Selection.SpecialCells(xlCellTypeLastCell).Select
error:
Ni mogoce dobiti lastnosti: SpecialCells razreda: Range
lExcel je Excel.app, selectam en sheet, nato pa hocem se en select:
lExcel.Selection.SpecialCells(xlCellTypeLastCell).Select
error:
Ni mogoce dobiti lastnosti: SpecialCells razreda: Range
Abnormal behavior of abnormal brain makes me normal...
Vesoljc ::
If lExcel.Workbooks(lFileList(iFile)).Sheets(iGeneral).Cells(iRow, jLAA) <> Empty Then
tole tud noce, je empty problem (kot variant)?
Abnormal behavior of abnormal brain makes me normal...
Mercier ::
v VB:
lExcel je Excel.app, selectam en sheet, nato pa hocem se en select:
lExcel.Selection.SpecialCells(xlCellTypeLastCell).Select
error:
Ni mogoce dobiti lastnosti: SpecialCells razreda: Range
Problem je, da pri pozni gradnji ne moreš uporabljat poimenovanih konstant excela.
xlCellTypeLastCell = 11
torej:
lExcel.Selection.SpecialCells(11).Select
If lExcel.Workbooks(lFileList(iFile)).Sheets(iGeneral).Cells(iRow, jLAA) < > Empty Then
tole tud noce, je empty problem (kot variant)?
Hmm... Meni dela (VBS). Mogoče, če dodaš na konec še Value? (ali Value2, še bolje)
lExcel je Excel.app, selectam en sheet, nato pa hocem se en select:
lExcel.Selection.SpecialCells(xlCellTypeLastCell).Select
error:
Ni mogoce dobiti lastnosti: SpecialCells razreda: Range
Problem je, da pri pozni gradnji ne moreš uporabljat poimenovanih konstant excela.
xlCellTypeLastCell = 11
torej:
lExcel.Selection.SpecialCells(11).Select
If lExcel.Workbooks(lFileList(iFile)).Sheets(iGeneral).Cells(iRow, jLAA) < > Empty Then
tole tud noce, je empty problem (kot variant)?
Hmm... Meni dela (VBS). Mogoče, če dodaš na konec še Value? (ali Value2, še bolje)
Vesoljc ::
sem spravil skupaj
vcasih je dobro pri projektu dodati se kako referenco
ampak ni mi jasno zakaj je zadeva tako pocasna! kodo sem rahlo preuredil (beri optimiziral!), poskusil sem uporabljati cim manj late bindinga, faktor razlike hitrosti pa je vsaj 10x (tko na uc). warum?
vcasih je dobro pri projektu dodati se kako referenco
ampak ni mi jasno zakaj je zadeva tako pocasna! kodo sem rahlo preuredil (beri optimiziral!), poskusil sem uporabljati cim manj late bindinga, faktor razlike hitrosti pa je vsaj 10x (tko na uc). warum?
Abnormal behavior of abnormal brain makes me normal...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Calc/excel delo s tabeloOddelek: Programiranje | 1441 (1208) | salabajs |
» | excel+visual basicOddelek: Pomoč in nasveti | 1537 (1424) | švrk |
» | VISUAL BASIC - Makro v wordu - prenos podatkov iz tabel v excelOddelek: Programiranje | 2866 (2728) | FlashM |
» | [Excel]Vrednost celice = ime dokumentaOddelek: Programska oprema | 4708 (4130) | veteran |
» | [Visual studio .NET] Rabim pomočOddelek: Programiranje | 1581 (1423) | darkolord |