Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Hali mindenki!
Na gondoltam egy ket kerdessel felelesztem a topicot
Tehat adott egy adatbazis, ahol a Sheetek (bocsi angol excel es nem nagyon tudom magyarul pontosan hogy forditottak) adott honapokat jelolnek. MInden sheeten napokra bontva vannak az adatok, valahogy igy
Datum Ar Keszlet
A honap vegen van egy ar atlagertek illetve egy keszlet zaro (az utolso kitoltott ertek)
Azen felul van meg egy Osszefoglalo sheet, ahol a honapok atlagai illetve keszlet zaroerteke jelenik csak meg. Ket kerdes
1. Meg lehet e oldani, hogy a keszlet zaro cellaban a felette levo tartomany UTOLSO KITOLTOTT erteke szerepeljen? Tehat naponta valtozzon, ahogy irom be az uj adatokat
2. Az osszefoglalo tablazattal van egy olyan bajom, hogy ugye ott a honapok atlagarai jelennenek meg. Na most megcsinaltam, hogy ahogy megjelenik az ertek automatikuson megjelenjen az evi atlagar. De az a baj, hogy azokban a honapokban, ahol emg nem irtam be arakat (pl. iden juni) ott hibauzenetet kapok (#DIV!/0) merthogy 0/ val probalok osztani (0 ertek atlagat veszem). Ezzel lehetne valamit csinalni, mert az evi atlagba viszont ezeket a sorokat is beleveszi es nem mindegy, hogy a majsui atlagat hogy kapom meg (most ertek/12 es nem az aktualis ertek/5)
Na remelem ertheto voltam, es tudtok egiteni. Ha lehet minnel egyszerubb megoldast mondjatok, mert nem vagyok egy nagy excel szakerto, viszont akik hasznalni fogjak a tablat, azok semmennyire nem ertenek hozza. Tehat olyan megoldas kell ami viszonylag egyszeru, es miutan kesz a rendszer tobbet nem kell hozzanyulni, hanem automatikusan megy minden
Megegyszer koszi
Nem tudom ez megoldás-e neked, de szerintem legegyszerűbb, ha a cellaformátummal manipulálsz.
ráállsz a kívánt cellára, majd Format Cells, Number, kiválasztod a Custom-ot
és kézzel a következőket írod be(pontosan így írd be) :
[ó]:pp
-ennek hatására egy napnál nagyobb intervallum esetén is órában és percben íródik ki az eredmény: 28:32, vagy a másik megoldás:
n "nap, " ó:pp
- ez pedig napban és percben írja ki az eredményt: 1 nap, 4:32
Lehet, hogy kezdetleges megoldás, de talás segít:
a két dátum 1997.3.4 13:30 formátumú és legyenek az A1 és a B1 mezők; a különbség napjai CSONK(B1-A1) (magyar Excel :))) formátuma szám, plusz még a maradék órák száma (B1-A1-CSONK(B1-A1))*24, formátuma szám.
Pl. az egyik dátum 2001.5.6. 11:00, a másik 2001.6.16. 13:30. A különbség 41 nap és 2,5 óra.
Ha esetleg ha valaki tudna segíteni.....
Van két cella, ahová a hibabejelentés dátuma hónap nap óra perc, és a hibaelhárítás dátuma hónap nap óra perc kerülne. A két cellát kivonva egymásból a hibaelhárítás idejét szeretnáém megkapni. Azonban ez csak az óra perc külömbséget adja meg korrektül. a napokkal nem tud mit kezdeni. pl 1 nap külömbség január 1. x óra y perc ként jelenik meg. Mit lehet tenni?
Köszi!
A két kód között egys orba került, amit több sorba szántam. :-)))
A helyes:
Vagy egy másik megközelítés, amikor a modul már meg van írva, és azt akarod beimportálni, lecserélve egy régebbi modult. Pl. ha csinaltál egy Excel workbookot, amit már használnak és tele van adattal, de közben tovabbfejlesztetted a kódot és le akarod a régi VBA modult cserélni erre az újra, anélkül, hogy a workbook adataihoz hozzá kelljen nyúlni.
Próbald ki ezt (csak úgy ötletcsinálónak), de elöször a Tools>Macros>Security-nal jelöld be a : Trust access to Visual Basic Project-et, hogy program útjan tudjál VBA kódot írni.
Sub AddSheetAndButton()
Dim NewSheet As Worksheet
Dim NewButton As OLEObject
' Add the sheet
Set NewSheet = Sheets.Add
' Add a CommandButton
Set NewButton = NewSheet.OLEObjects.Add _
("Forms.CommandButton.1")
With NewButton
.Left = 4
.Top = 4
.Width = 100
.Height = 24
.Object.Caption = "Return to Sheet1"
End With
With ThisWorkbook.VBProject. _
VBComponents(NewSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With
End Sub
Vagy egy másik megközelítés, amikor a modul már meg van írva, és azt akarod beimportálni, lecserélve egy régebbi modult. Pl. ha csinaltál egy Excel workbookot, amit már használnak és tele van adattal, de közben tovabbfejlesztetted a kódot és le akarod a régi VBA modult cserélni erre az újra, anélkül, hogy a workbook adataihoz hozzá kelljen nyúlni.
Sub UpdateUserBook()
Filename = "UserBook.xls"
' Activate workboook
On Error Resume Next
Workbooks(Filename).Activate
If Err <> 0 Then
MsgBox Filename & " must be open!", vbCritical
Exit Sub
End If
Msg = "This macro will replace Module1 in UserBook.XLS "
Msg = Msg & "with an updated Module." & vbCrLf & vbCrLf
Msg = Msg & "Click OK to continue."
If MsgBox(Msg, vbInformation + vbOKCancel) = vbOK Then
Call ReplaceModule
Else
MsgBox "Module not replaced!", vbCritical
End If
End Sub
Sub ReplaceModule()
' Export Module1 from this workbook
Filename = ThisWorkbook.Path & "\tempmodxxx.bas"
ThisWorkbook.VBProject.VBComponents("Module1") _
.Export Filename
' Replace Module1 in UserBook
Set VBP = ActiveWorkbook.VBProject
On Error GoTo ErrHandle
With VBP.VBComponents
.Remove VBP.VBComponents("Module1")
.Import Filename
End With
' Delete the temorary module file
Kill Filename
MsgBox "The module has been replaced.", vbInformation
Exit Sub
ErrHandle:
' Did an error occur?
MsgBox "ERROR. The module may not have been replaced.", _
vbCritical
End Sub
Igen:
Nyisd meg az Excelt, kezdj egy makrót csinálni "ebbe a füzetbe" kijelöléssel, amit egy cellaléptetés után zárj be, majd nyisd meg szerkesztésre, töröld a másolót, és a
sub..
.
end sub
közé copy-zd be.
1. Az Outlookból tudsz exportálni Excel formátumba és módodsítás után vissza is tudod importálni a file-t.
2. Elöször importálod az Accesben és utána az Accessböl az Excelbe.
Hogy az excelben olyan címjegyzéket készíteni, amit elfogad az outlook, importálható az outlookba? Pontosabban mi az oszlop sorrend? Sajnos, erre sablon nincs az excelben.
Van egy programom, amelyik adatbázis leírásból (Excel) VBA kódot generál. Tud valaki arra lehetőséget, hogy ezt mindjár be is építse egy xls fájl moduljába?
A loggoláshoz kell kötni a munkafüzet és a munkalap védelmének feloldását. Pl: az
autoopen-ben kell Visible-re állítani a munkalapot, majd a munkafüzet felépítését védeni, autoclose-ben pedig VeryHidden-re állítani és a védelmet beállítani.
Mondjuk nálam az a szerencse, hogy nincsenek ilyen kis trükkös felhasználók, akiknek fő céljuk, hogy megkerüljék az általam megírt kis algoritmust :-) Én egyszerűen csak azt szeretném tudni, hogy kik matatnak épp a táblázatban, illetve ki-mit csinált vele megelőzően.
HIBA:
'Ide jön majd a hibakezelés, ha lesz türelmem
End Function
____________________________________
Az egyetlen probléma, ha a valakinek be van kapcsolva a Macro virus protection, akkor megnyitáskor rákérdez, hogy használni akarom-e a makrókat. Ha azt mondom, hogy nem, akkor nem loggol semmit. Ezért úgy csináltam meg, hogy eleve elhájdoltam a síteket pászvörddel, és megnyitáskor egy makro hívja elő őket. Namármost, ha kikapcsolja az elején a makrókat, akkor eleve rejtve maradnak az oldalak és nem tudja használni a file-t.
Mondjuk nem mondom, hogy tetszik a megoldás, de legalább működik.
Ha valakinek van más ötlete arra, hogy hogyan lehet megakadályozni, hogy ki lehessen kapcsolni a makrókat, ne titkolja előlem ! :)
Ahol a munkafüzet van, abban a könyvtárban fog létrehozni egy logfile-t, és loggolja a User-name-t, a computer-name-t és a megnyitás és bezárás idejét.
Public Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA"
_
(ByVal lpBuffer As String, nSize As Long) As Long
Public Declare Function GetComputerName Lib "kernel32" Alias
"GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Sub Auto_Open()
Dim FNum As Integer
Dim UL As Long
Dim UName As String
Dim CL As Long
Dim CName As String
FNum = FreeFile
Open ThisWorkbook.Path & "\log.txt" For Append As #FNum
UName = String$(255, 0)
UL = 255
CName = String$(255, 0)
CL = 255
GetUserName UName, UL
GetComputerName CName, CL
Print #FNum, ThisWorkbook.FullName & " OPENED at " & _
Format(Now, "dd-mmm-yyyy hh:mm:ss") & " by user: " & _
Left(UName, UL) & " from computer: " & Left(CName, CL)
Close #FNum
End Sub
Sub Auto_Close()
Dim FNum As Integer
Dim UL As Long
Dim UName As String
Dim CL As Long
Dim CName As String
FNum = FreeFile
Open ThisWorkbook.Path & "\log.txt" For Append As #FNum
UName = String$(255, 0)
UL = 255
CName = String$(255, 0)
CL = 255
GetUserName UName, UL
GetComputerName CName, CL
Print #FNum, ThisWorkbook.FullName & " CLOSED at " & _
Format(Now, "dd-mmm-yyyy hh:mm:ss") & " by user: " & _
Left(UName, UL) & " from computer: " & Left(CName, CL)
Close #FNum
End Sub
Ez a megoldás nem tölem származik, egy excel newsgroupból vettem. A szerzöje Chip Pearson. http://www.cpearson.com/
Ha elküldenél egy használható példát a (221)-ben leírt megoldásra a >>vbeci@freemail.hu<<-ra megköszönném!
Nekem is az a gond, hogy olyanok kotornak a file-ben, akiknek semmi keresni valója ott, csak bámészok, azután elfeledik bezárni...
Legalább azt tudnám, ki-mikor nyitotta meg, már nagy haszon lenne!
Előre is köszi!