-
Fototrend
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Fferi50
Topikgazda
válasz
bteebi
#25180
üzenetére
Szia!
Egyrészt, ha eseménykezelést végzel, akkor ki kell kapcsolni az eseményeket:
Application.EnableEvents=False
majd a végén visszakapcsolod:
Application.EnableEvents=True
Ha nem így teszel, akkor jó esetben csak meghosszabodik a program futása, rossz esetben más cellákat is átír, nem csak azokat, amelyeket szeretnéd.Továbbá van két képlet benne, ami formailag ugyan helyes (nem kiabál érte a fordító), de teljesen blőd eredményt ad, rossz helyre került a záró zárójel:
If Sheets("proba").Cells(sor - 72, 5) < Sheets("proba").Range("S130") Or WorksheetFunction.IsNumber(Sheets("proba").Cells(sor - 72, 5)) = True
A Te kódodban a True után volt a zárójel, az előréb kell hozni az egyenlőség jel elé, ahogyan itt is látod.
Ugyanez van az oszlopos vizsgálatánál is, ott is az egyenlőség jel után kell a zárójel és nem a False után.
Üdv.
-
-
Fferi50
Topikgazda
Szia!
Hát persze hogy nem: =Kerekítés(Szum(E4:D4);-1)
(ha nem akarod, hogy ilyen szuper jelek jelenjenek meg, használd a programkód gombot)
A kerekítés második paramétere határozza meg, hogy hány számjegyre kerekítsen. A -1 azt jelenti, hogy tizesre kerekít a magyar szabályok szerint.
Üdv.
-
Fferi50
Topikgazda
válasz
Polllen
#25132
üzenetére
Szia!
Akkor lenne igazad, ha csak egy munkalapot tartalmazhatna, de ez nem így van. (Az activesheet az egy darab munkalap, az activeworkbook szintén egy darab munkafüzet -- kiválasztott (selected) viszont több is lehet.)
A selectedsheets egy gyűjtemény, magában foglalja az összes kiválasztott munkalapot.
Idézet a help-ből:
"Window.SelectedSheets Property
Returns a Sheets collection that represents all the selected sheets in the specified window. Read-only."
Ha a művelet eredményét nem szeretnénk viszontlátni, akkor nem kell a konkrét munkalapot megnevezni, szép sorban megmutatja az összes kijelöltet.
De ha szükség van a nyomtatás megtörténtének információjára, akkor már konkrét munkalapra kell hivatkozni - hiszen lehet, hogy egyik munkalapot kinyomtatod, másokat pedig nem, akkor most mi legyen a logikai változó eredménye??Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe
#25120
üzenetére
Szia!
Próbáld a következőt:
If activewindow.SelectedSheets("wsh_Ürlap").printpreview=true then
műveletek
endif
Ugyanis így adod meg a konkrét munkalapot.Ha több munkalap is ki van választva, akkor pedig
For each wsh in activewindow.selectedsheets
if wsh.printpreview=true then
műveletek
endif
next
Ezzel végigmész az összes munkalapon és megnézheted, hogy ki lett-e nyomtatva.Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe
#25126
üzenetére
Szia!
A konstansnak (állandónak) pont az a lényege, hogy egyszer definiálod "direkt" módon az értékét és az soha de soha nem változhat meg a programban. Ezért nem lehet semmilyen változó tartalomhoz kötni a meghatározását, mert akkor már a konstans jelleg nem áll fenn. A makróba be kell "égetni" az értéket, csak úgy tudod változtatni, ha átírod a makróban ezt az értéket.
Ha tehát cella értékből akarod kivenni a "konstans" értékét, akkor azt csak változóba teheted bele, de ez a változó természetesen lehet az egész programra érvényes Global, vagy Public is és elég a program indulásakor értéket adni neki, többet nem kell vele foglalkoznod.
Nézz rá helpben a változók deklarálására.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ezt a sort így :=HA(valami = 0;"nincs kitöltve";valami) a VBA és az excel szövegként értelmezi.
Ha így szeretnéd beírni, akkor a formulalocal tulajdonságot kell használnod - de ez nagyon "röghözköti" a programot.
VBA-ban az international - azaz angol - függvény megnevezéseket célszerű használni, tehát
amit.formula="=IF(valami = 0;"nincs kitöltve";valami)"Üdv.
-
Fferi50
Topikgazda
válasz
tgumis
#25084
üzenetére
Szia!
Persze, mert 1 hónapon túl van a különbség. Ha beírod még előre a hh "hónap" kifejezést is a formátumba, akkor mutatni fogja, hogy hány egész hónap van benne.
Egyébként pedig el kell kezdeni számolgatni, és akkor nem cellaformátummal, hanem számként használva a dátumot képlettel kell megadni.
pl. = int(A1-A2) & nap &( (A1-A2)-int(A1-A2))*24 & "óra"
A perceket és a másodperceket ugyanígy osztással kell továbbszámolni.Ne feledd az excelben a dátum is számformátum. Az egész rész jelenti a napot, a törtrész pedig az időt - 24 órából áll egy nap, tehát 12 óra az 0,5 napnak számít.
Remélem, tudod hasznosítani.
Üdv.
-
Fferi50
Topikgazda
válasz
Polllen
#25069
üzenetére
Szia!
Írd így:
"=VLOOKUP(RC[-9],'[" & valtozo & "]Shortage'!C1:C10,10,0)"A valtozo szöveges változó (string) tartalmazza a fájl nevét - ha teljes elérési útvonalat is kell megadni, akkor viszont:
"=VLOOKUP(RC[-9],'" & utvonal & "[" & valtozo & "]Shortage'!C1:C10,10,0)"Az utvonal tartalmazza az elérési utat, a végén backslash van.
Üdv.
-
Fferi50
Topikgazda
válasz
komyka
#25068
üzenetére
Szia!
Ha a listában nincs ismétlődő termékszám, akkor az fkeres beágyazva és kombinálva a hahiba függvénnyel műxik.
=hahiba(fkeres($A1;elsőtábla!$B:$B;1;0);hahiba(fkeres($A1;másodiktábla!$B:$B;1;0);hahiba(fkeres($A1;harmadiktábla!$B:$B;1;0);$B1)))
Ezt a képletet a C oszlopban, vagy ha az foglalt, akkor az adatok utáni oszlopba tedd. Esetleg átmenetileg beszúrhatsz egy oszlopot a B után.
A képlet eredményét pedig értékként beilleszted először vissza a C oszlopba, utána pedig a B oszlopra.Ha nincs hahiba függvényed, akkor a ha és a hibás függvények kellenek hozzá.
Üdv.
-
Fferi50
Topikgazda
válasz
nebulo0128
#25042
üzenetére
Szia!
Két külön excel futásakor csak értéket tudsz beilleszteni, a két külön excel példány független egymástól, nem tudja az egyik, mit csinál a másik.
A két munkafüzetet azonos excel alatt kell megnyitnod, akkor tudsz "normál módon" másolni bele. A nézet ablakváltással tudsz egyik excel munkafüzetből a másikba átmenni.Üdv.
-
Fferi50
Topikgazda
válasz
Mindless
#25040
üzenetére
Szia!
Próbáld ezt.
Sub hasonlito()
Dim sh1 As Worksheet, sh2 As Worksheet, cl As Range, vane
Set sh1 = Sheets("Munka1")
Set sh2 = Sheets("Munka2")
For Each cl In sh1.Range("O:O").Cells
If IsEmpty(cl) Then Exit For
vane = Application.Match(cl.Value, sh2.Columns("O"), 0)
If IsError(vane) Then
vane = sh2.Range("O30000").End(xlUp).Row: If Not IsEmpty(sh2.Cells(vane, "O")) Then vane = vane + 1
End If
sh1.Rows(cl.Row).Copy sh2.Rows(vane)
Next
MsgBox "Vége a programnak", vbInformation
End SubTermészetesen a Munka1 és Munka2 helyére a saját munkalapjaid nevét írd.
A makró a Munka1 munkalapról másolja át az adatokat a Munka2 munkalapra.
Ha van az O oszlopban olyan érték, akkor oda, ha nincs, akkor a Munka2 végére az egész sort.Remélem, ilyesmire gondoltál.
Üdv.
-
Fferi50
Topikgazda
válasz
Mindless
#24998
üzenetére
Szia!
Az előző sor formuláit így írhatod át értékre:
.offset(-1,0).entirerow.value=.offset(-1,0).entirerow.value
Ha egy meghatározott tartomány értékét szeretnéd felülírni, akkor pedig
range(.offset(-1,-4),.offset(-1,5).value=range(.offset(-1,-4),.offset(-1,5).value
Az előző sor 10 celláját írja felül az értékével.
Megjegyzem, hogy ez a módszer csak összefüggő tartományon működik.Üdv.
-
Fferi50
Topikgazda
válasz
MrCsiT
#24989
üzenetére
Szia!
Ezt a képletet próbáld meg légy szíves:
Pl. C1 cellába: =darabteli(B:B;"*"& A1 & "*")
Ez minden olyan cellát összeszámol a B oszlopban, ahol az A1 cellában levő szöveg bármely helyen előfordul.
Hátránya persze, hogy Anna esetében a Panna neveket is bele fogja számolni, így azok darabszámát ki kell vonni (ha van ilyen résznév az egészben eset).Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe
#24982
üzenetére
Szia!
Nagyjából úgy kell kezelned, mint az application.enableevents kapcsolót. Hiszen azt is ki-be kapcsolgatod.
A userformban definiálsz az első sorok előtt pl. egy changetextbox_name boolean változót.
A textbox_name_change eseményben pedig először azt nézed meg, hogy ez true. Ha igen, mehet tovább, ha nem, akkor kilép.
Amikor olyan utasítást adsz ki, amelyik megváltoztatja a textbox értékét, akkor eldöntöd, hogy fusson-e le a chage esemény és az utasítás előtt megváltoztatod a changetextbox_name értékét ennek megfelelően.
De ugyanez igaz akkor is, ha magában az eseménykezelésben változtatod a textbox értékét, mert az képes rekurzívan meghívni magát... Tehát a változtatás előtt change... false. Ezáltal nem fog tovább menni.
Az eljárás végén pedig chage...true és akkor a következő változtatásnál belemegy az eljárásba.Remélem érthető.
Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe
#24980
üzenetére
Szia!
Milyen excel verziód van?
Igen, sajnos a KeyAscii nem azonos a KeyCode - értékével - ezt valahol írtam is az előbb.Ez alapján viszont:
"
KeyPress EventOccurs when the user presses an ANSI key.
Syntax
Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)
The KeyPress event syntax has these parts:
Part Description
object Required. A valid object.
KeyANSI Required. An integer value that represents a standard numeric ANSI key code.Remarks
The KeyPress event occurs when the user presses a key that produces a typeable character (an ANSI key) on a running form while the form or a control on it has the focus. The event can occur either before or after the key is released. This event also occurs if you send an ANSI keystroke to a form or control using either the SendKeys action in a macro or the SendKeys Statement in Visual Basic.
A KeyPress event can occur when any of the following keys are pressed:
Any printable keyboard character.
CTRL combined with a character from the standard alphabet.
CTRL combined with any special character.
BACKSPACE.
ESC.A KeyPress event does not occur under the following conditions:
Pressing TAB.
Pressing ENTER.
Pressing an arrow key.
When a keystroke causes the focus to move from one control to another.Note
BACKSPACE is part of the ANSI character set, but DELETE is not. Deleting a character in a control using BACKSPACE causes a KeyPress event; deleting a character using DELETE doesn't.When a user holds down a key that produces an ANSI keycode, the KeyDown and KeyPress events alternate repeatedly. When the user releases the key, the KeyUp event occurs. The form or control with the focus receives all keystrokes. A form can have the focus only if it has no controls, or if all its visible controls are disabled.
The default action for the KeyPress event is to process the event code that corresponds to the key that was pressed. KeyANSI indicates the ANSI character that corresponds to the pressed key or key combination. The KeyPress event interprets the uppercase and lowercase of each character as separate key codes and, therefore, as two separate characters.
To respond to the physical state of the keyboard, or to handle keystrokes not recognized by the KeyPress event, such as function keys, navigation keys, and any combinations of these with keyboard modifiers (ALT, SHIFT, or CTRL), use the KeyDown and KeyUp event procedures.
"
Lehetséges, hogy mégis a KeyPress eseményhez kell menekülnöd, ezt tudja a backspace-t érzékelni.
A Backspace ansi kódja is 8.Próbáld ezt az eseményt úgy, ahogyan az előbb a másikra írtam.
Üdv.
Ps:A change esemény kezelésbe most nem mennék bele, mert nincs annyi időm jelenleg. De ígérem, ha egy kicsit szabadulok - visszatérek még rá.
-
Fferi50
Topikgazda
válasz
KaliJoe
#24978
üzenetére
Szia!
A userformon nem hatásos az application.enableevent=false.
Ott csak trükkösen lehet megkerülni az eseménylefutást. Egy form szintű változót kinevezel eseményvezérlőnek, ha ez true, akkor fusson le az esemény, ha false akkor ne fusson le. Minde eseménykezelésnél ennek a változónak a vizsgálatával kezded a projektet.DE: Javaslom még mindig, hogy Textbox_KeyDown eseményt nézd meg, itt a keycode megmondja, hogy melyik billentyűt nyomták le.
A backspace keycodja a vbKeyBack vba konstans,ami numerikusan 8.A billentyűk Keycode megfeleltetését a help Keycode Constants cimszava alatt találod.
Private Sub object_KeyDown( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
if KeyCode=vbKeyBack then
ide írod amit szeretnél csinálni ha BackSpace-t nyomtak.
endif
KeyCode=0
end subAz utolsó sor, a KeyCode=0 a lényeg, ezzel eliminálod a billentyű leütést! Minden olyan esetben kell, ha nem akarod, hogy a leütött billentyű hatása érvényesüljön!
(Pl. te beírod a textboxba a leütött betűt, vagy lecsökkented a hosszát, akkor már nem szabad, hogy a rendszer is megcsinálja ugyanazt!)
Ha meg kell, hogy csinálja a rendszer, akkor ezt a sort elhagyod.Hidd el, ez a legegyszerűbb megoldás a billentyűzet figyelésre. A change az macerás. Rengeteg hasznos info van a Help-ben. (A szokásostól eltérően.)
Üdv.
-
-
Fferi50
Topikgazda
Szia!
Ezt nevezik szívásnak....
Ha hálózaton dolgoztok, akkor megoldás lehet, hogy felteszed egy központi helyre a fájlt, ott megadod az excelnek a szükséges beállításokat. Ezek után pedig csak az itteni excelt elindítva lehessen használni.Mivel nem indulhat el a makró, így nem tudod kikényszeríteni sem a bezárást, sem a makró indulást.
Még egy olyan ötletem van, hogy egy adott cellába beírsz egy képletet, ami egy másik cella állapotát figyeli és attól függően feltételes formázással figyelmezteted a felhasználót, hogy ez így nem lesz jó.Pld.
A1 cella képlete =ha(A2<>1;"Nincsenek bekapcsolva a makrók, hibás adatokat fogsz elmenteni, kérlek, lépj ki mentés nélkül!";"Minden OK")
A1 cella feltételes formázása képlettel, =$A$2=0, kitöltés vörös
A2 cellába pedig a Workbook_Open eseményben legelső dolgod, hogy beleírod az 1-et, a Workbook_BeforeClose eseményben pedig átírod 0 értékre.Persze ez nyilván nem garantálja, hogy bárki is ennek megfelelően cselekszik. Arra egyelőre nincs tippem, hogyan nézhető meg, hogy valaki "makróhasználat nélkül" írta felül a fájlt.
Üdv.
-
Fferi50
Topikgazda
válasz
pirit28
#24897
üzenetére
Szia!
Bocs a hosszú hallgatás miatt! Remélem, még aktuális. Próbáld meg ezt:
Sub okesit()
Do
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = CurDir()
If .Show Then
okesito .SelectedItems(1), True
Else
If MsgBox("Nem választottál, befejezed?", vbYesNo, "Könyvtár választás") = vbYes Then Exit Sub
End If
End With
Loop
End Sub
Sub okesito(ByVal konyvtar As String, ByVal alkonyvtaris As Boolean)
Dim fs, fldr, subfldr, fld, fajl As String
Set fs = CreateObject("Scripting.FilesystemObject")
Set fldr = fs.GetFolder(konyvtar)
fajl = Dir(fldr & "\*.xls*")
Do While fajl <> ""
Workbooks.OpenText Filename:=fldr & "\" & fajl
ActiveWorkbook.SaveAs Filename:=Replace(ActiveWorkbook.FullName, ".xls", "ok.xls")
'MsgBox fajl
fajl = Dir()
Loop
If alkonyvtaris Then
Set subfldr = fldr.subfolders
For Each fld In subfldr
fajl = Dir(fld & "\*.xls*")
Do While fajl <> ""
Workbooks.OpenText Filename:=fld & "\" & fajl
ActiveWorkbook.SaveAs Filename:=Replace(ActiveWorkbook.FullName, ".xls", "ok.xls")
'MsgBox fajl
fajl = Dir()
Loop
Next
End If
End SubAz okesit makrót kell elindítani, ott ki tudod választani azt a könyvtárat, amelyben (és alkönyvtáraiban) végre szeretnéd hajtani a műveletet.
Ha a kiválasztott könyvtárban elvégzi a műveletet, akkor visszatér a választó ablak.
A makróból úgy léphetsz ki, hogy a mégse gombot választod, vagy esc-t nyomsz és a kérdésre igent válaszolsz.
Az előrehaladásra nem tettem bele információ kijelzést, a státuszsoron esetleg kiírathatod pl. a kikommentelt msgbox helyére, Application.StatusBar = fajl
akkor a végére pedig Application.StatusBar=FalseÜdv.
-
Fferi50
Topikgazda
Szia!
Az alábbi kis makrórészletet légy szíves betenni a dim sor után:
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = CurDir()
If .Show Then
ChDir (.SelectedItems(1))
Else
MsgBox "Nem választottál, kilépek a programból!", vbCritical :Exit Sub
End If
End WithÍgy amikor elindítod a programot, kiválaszthatod, hogy melyik könyvtár adatait rakja össze (ez talán jobb is, mintha kívülről navigálnál, mert ez biztosan oda visz, ahova szeretnéd).
Ha nem válaszottál könyvtárat, akkor nem megy tovább.Üdv.
-
Fferi50
Topikgazda
Szia!
Elnavigálsz abba a könyvtárba, ahol a fájljaid vannak.
Elindítod az excelt, ami egy új munkafüzettel indít.
Ide összemásolhatod a fájlokat.
Ezután Alt+F11 lenyomásával átmész a VBA project ablakba.
A menüből kiválasztod az insert, azon belül pedig a module pontot.
A megnyilt modullapra bemásolod az alábbi kódot:
Sub osszerako()
Dim hova As Worksheet, fajlneve As String, usor As Long, xx As Integer
Set hova = ActiveSheet
fajlneve = Dir("*.xls*")
Application.EnableEvents = False
Applicaton.ScreenUpdating=False
Do While fajlneve <> ""
xx = xx + 1
usor = hova.UsedRange.Rows.Count + 1: If usor = 2 Then usor = 1
Workbooks.Open Filename:=fajlneve, ReadOnly:=True
ActiveSheet.UsedRange.Copy Destination:=hova.Cells(usor, 1)
ActiveWorkbook.Close False
fajlneve = Dir()
If xx Mod 10 = 0 Then Application.StatusBar = "Másolva: " & xx & "db fájl!"
Loop
Application.EnableEvents = True
Application.ScreenUpdating=True
Application.StatusBar = False
MsgBox "A másolásnak vége, kérem, mentse el a fájlt!", vbInformation, "Fájlok összemásolása"
End SubVisszamész az excel munkalapra (Alt+F11 ismét).
Ezután menü - nézet- makrók megjelenítése. Megjelenik a listában az osszerako. Inditás.
Alul a státusz soron fogod látni a begyűjtött fájlok számát, tizesével nőve.Ha végzett, kapsz egy üzenetet.
Ezután mentés másként művelettel nevezd el a fájlodat, a mentés után bezárhatod.Remélem, sikerülni fog.
Üdv.
-
Fferi50
Topikgazda
Szia!
Próbáld ki a következőt:
Sub osszerako()
Dim hova As Worksheet, fajlneve As String, usor As Long, xx As Integer
Set hova = ActiveSheet
fajlneve = Dir("*.xls*")
Application.EnableEvents = False
Do While fajlneve <> ""
xx = xx + 1
usor = hova.UsedRange.Rows.Count + 1: If usor = 2 Then usor = 1
Workbooks.Open Filename:=fajlneve, ReadOnly:=True
ActiveSheet.UsedRange.Copy Destination:=hova.Cells(usor, 1)
ActiveWorkbook.Close False
fajlneve = Dir()
If xx Mod 10 = 0 Then Application.StatusBar = "Másolva: " & xx & "db fájl!"
Loop
Application.EnableEvents = True
Application.StatusBar = False
MsgBox "A másolásnak vége, kérem, mentse el a fájlt!", vbInformation, "Fájlok összemásolása"
End SubRemélem segít.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ez a gomb szerintem csak közös használatú munkafüzeteknél aktív.
Nem egészen világos még mindig: Adott 300+ fájl egy-egy munkalappal különböző számú sorokkal.
Az adott fájlból a munkalapon levő sorokat a "Főfájl" egyetlen munkalapjának az utolsó sorai után kell bemásolni?Mindenesetre jó lenne, ha az összes fájl egy könyvtárban lenne. Akkor lehet egy viszonylag egyszerű makrót írni az összemásolásukra.
Most más dolgom van, de ha visszajövök, segítek, de írd meg lsz. jól értettem-e a feladatot.
Üdv.
-
Fferi50
Topikgazda
Szia!
Egyrészt, nem tudom, hogy a Munkafüzetek összehasonlítása és egyesítése menüpont azt csinálja-e amit szeretnél. Másrészt ki lehet tenni ezt is a menüszalagra, a testreszabásnál ki kell választanod, hogy minden parancsot szeretnél látni és akkor egyéni csoportba "át tudod tolni" a menüszalagra is.
Továbbá, mit értesz azon, hogy egyesíteni kellene egyetlen darab fájlba?
Azt, hogy az összes munkafüzetben levő összes munkalapot bele kellene másolni egy db munkafüzetbe,
vagy azt, hogy a munkalapokon levő adatokat valamilyen algoritmus szerint egy db munkafüzetbe össze kellene fésülni (pl. a Munka1 munkalapon levő cellák értéke a legutolsó előfordulás szerint legyen)?Azért nem gondolod Te sem komolyan, hogy különböző verziókban leledző többszáz munkafüzet majd csettintésre átalakul egy munkafüzetté? Meg kell azért bizony dolgozni. Szépen sorban meg kell nyitogatni őket, majd elvégezni rajtuk/velük a szükséges műveletet (átrakni az "örökös" munkafüzetbe) és utána visszazárni.
Ezt egy nem túl nagy makró megcsinálja, ha tudod, hogy mit szeretnél.Üdv.
-
Fferi50
Topikgazda
válasz
pirit28
#24888
üzenetére
Szia!
Úgy gondolom, az elakadás amiatt van, mert direktben xls kiterjesztésre van kondicionálva:
myfile = Dir(folderName & "\*.xls")
Ha más kiterjesztés is van, akkor így kellene:
myfile = Dir(folderName & "\*.xls*")A mentésnél pedig ezt a sort kellene kiváltanod:
ActiveWorkbook.SaveAs Filename:=folderName & "\" & Replace(myfile, ".xls", "ok.xls")
úgy gondolom erre:
ActiveWorkbook.SaveAs Filename:= Replace(ActiveWorkbook.FullName, ".xls", "ok.xls")
Itt már nem probléma, ha a kiterjesztés pl. xlsx, mert csak az xls cserélődik ki.
A FullName már tartalmazza a teljes elérési utat is, ezért nem kell a folderName hozzá.Üdv.
-
Fferi50
Topikgazda
válasz
gaborlajos
#24886
üzenetére
Szívesen!

-
Fferi50
Topikgazda
válasz
hengelhof
#24879
üzenetére
Szia!
A Microsoftnak volt egy dec. 9-i office frissítése az ActiveX sebezhetőség megjavítása érdekében. Az "vágta haza" az aktivex használó programokat. De nagyon gyorsan feltették a megoldást.
Viszont amikor erről beszélgettünk a fórumon, akkor ez még nem volt nyilvánvaló.Üdv.
-
Fferi50
Topikgazda
Szia!
Azért mégis próbáld meg a beillesztéses verziót a következőképpen:
kitoltendo.Select
ActiveSheet.Paste link:=True
Ennek így működnie kell.Az én verzióm ilyen esetekre akkor működik, ha a forrás cellák és a cél cellák címei megegyeznek a két munkalapon (azaz pl A1:H1 mindkét lapon).
Ha ez nem így van, akkor a következőt javaslom:kitoltendo.cells(1,1).formula="=" & dstbook.WorkSheets(1).range("KELL").cells(1,1)address(external:=true,rowabsolute:=false,columnabsolute:=false)
kitoltendo.formula=kitoltendo.cells(1,1).formulaEz azért jobb szerintem, mint a copy mert nem használja a vágólapot.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ebben az esetben próbáld az adott cella formula tulajdonságát beállítani, azaz a képletet beírni a cellába, valahogy így:
srcbook.kitoltendo.formula="=" & dstbook.Worksheets(1).Range("KELL").Address(external:=true)
Az address tulajdonság external kapcsolója arra utasítja az excelt, hogy az adott cella teljes elérési útvonalát is tartalmazó címét adja meg - a hivatkozáshoz neked pont erre van szükséged.
Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe
#24872
üzenetére
Szia!
Néhány megjegyzés:
Az idézőjeleket kétféleképpen viheted be a szövegbe:
1. Megduplázod az idézőjelet - ahogyan Te is tetted, ez teljesen szabályos forma
2. A CHR függvénnyel CHR(34) hozzáfűzésével - ezt nem kell duplázni!A számváltozókat nem kell átalakítani a kifejezésekben:
&Trim(str(lng_AktuálisSor))
teljesen felesleges, egyszerűen beírhatod, hogy & lng_AktuálisSorTovábbá: VBA-ban a cella formula tulajdonság képlettel való megadásakor kizárólag angolfüggvénynevek használhatók. Tehát nem HA, hanem IF, nem VAGY hanem OR és így tovább.
Ha magyar függvényneveket szeretnél használni akkor a cella formulalocal tulajdonságát kell beállítanod.
A második példád egészen biztosan ezért ad hibát.
Viszont, ha magyar nyelvű képlettel írod be VBA-ból a kifejezéseket, akkor nem lesz hordozható az excel táblád, mert nem magyar környezetben, vagy a tiedtől eltérő beállításoknál nem tudja értelmezni majd a képletet.Ha lenne még kérdésed, írj bátran.
Üdv.
-
Fferi50
Topikgazda
válasz
gaborlajos
#24868
üzenetére
Szia!
A munkalapod kódlapjára a következőt írd be légy szíves:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("$D$1:$E$50")) Is Nothing Then Exit Sub
Application.EnableEvents = False
vanmar = Application.Match(Target.Value, Range("$H$1:$H$" & Range("H4000").End(xlUp).Row), 0)
If IsError(vanmar) Then
If IsEmpty(Range("H1")) Then
Range("H1").Value = Target.Value
Else
Range("H4000").End(xlUp).Offset(1, 0).Value = Target.Value
End If
End If
Application.EnableEvents = True
End SubA kódlaphoz úgy jutsz, hogy a munkalap fülön jobb egérgombbal kattintasz. Ott kiválasztod a kód megjelenítését. Ezután a lap második felében megjelenik egy lenyiló, general felirattal. Azt átváltod worksheet feliratra. Megjelenik egy Worksheet_SelectionChange sub. Ezzel ne törődj, alá másold be a fentieket.
Amikor a D1:E50 cellák valamelyikébe beírsz egy nevet vagy bármit, a cella elhagyásakor a H oszlopban megvizsgálja, hogy van-e már olyan beírás. Ha nincs, akkor utolsónak beírja. De betű szerint egyeznie kell a beírásnak!
Természetesen a tartományokat a magad képére formálhatod (ha 4000-nél több dolgozó lehet, akkor a 4000-es számot vedd nagyobbra).Remélem valami ilyesmire gondoltál.
Üdv.
-
Fferi50
Topikgazda
válasz
gaborlajos
#24858
üzenetére
Szia!
Eddig teljesen világos és egy makróval meg is oldható, hogy ha valaki uj nevet ír be, az átkerüljön a nevek oszlopába.
De! Mi garantálja, hogy mindig ugyanazt a nevet írja be és nem "bénázik"?
Én inkább csinálnék egy érvényesítő listát a nevek oszlopába és onnan választatnám ki a nevet. Így biztosan nem lenne félreütés. Persze ehhez tudnod kellene a dolgozók nevét előre. Mi a véleményed?Üdv.
-
Fferi50
Topikgazda
válasz
gaborlajos
#24856
üzenetére
Szia!
Te egészen biztosan tudod, hogy mit szeretnél. Amit leírtál, abból viszont nem derül ki - legalábbis számomra:
Az ide másolja át részen látom a dolgozók neveit kigyűjtve. Ezen kívül mit kellene még mellé gyűjteni? Gondolom a teljesített órák számát, amit talán a mind összesen óra oszlop tartalmaz?
Miért van két név oszlop?Gondolat: A dolgozó neve oszlopra csinálsz egy irányított szűrést, egyedi értékekre, az ide másolja át oszlopba.
Ezután a dolgozók melletti cellákban egy szumha függvénnyel összegzed a hozzá tartozó órák számát.Legalábbis, ha ezt szeretnéd.
Légy szíves igazold vissza, jól gondolom-e a "feladatot".
Még valami: Excel verziód száma és nyelve?
Üdv.
-
Fferi50
Topikgazda
válasz
gaborlajos
#24853
üzenetére
Szia!
Két dolog:
1. Az automatizmus magától nem megy, meg kell neki mondani, hogy mit csináljon - pl. eseményvezérelten, vagy gombnyomással vagy stb.
2. Amit írtam, azt nem csak egy oszlopra lehet alkalmazni, hanem tartományokra is - és makróból meg lehet hívni lásd első pont.Tehát, ha felteszel egy mintát és leírod, hogy mikor mit csináljon, akkor könnyebben tudunk segíteni.
Üdv.
-
Fferi50
Topikgazda
válasz
gaborlajos
#24846
üzenetére
Szia!
Ha 2010-es (esetleg 2007?) vagy annál újabb exceled van, akkor adatok -> ismétlődések eltávolítása.
Ha korábbi, akkor adatok -> irányított/speciális szűrő. Másolás más helyre, csak az egyedi adatok. Ekkor viszont az adatok első cellája fejléc kell legyen.Üdv.
-
Fferi50
Topikgazda
válasz
tgumis
#24827
üzenetére
Szia!
Az utolsó üres sort megkapod a következőképpen:
az A oszlopban
usor=cells(rows.count,1).end(xlup).row+1ha más oszlopban szeretnéd, akkor az oszlopszámot átírod.
Transzponálni nem kell erőlködnöd. Simán átveszed az értékeket:
pl.
Munka2.cells(usor,1).value=Munka1.cells(1,4).value
Munka2.cells(usor,2).value=Munka1.cells(2,4).value
Munka2.cells(usor,3).value=Munka1.cells(3,4).value
Sőt:
For xx= 1 to 3
Munka2.Cells(usor,xx).value=Munka2.cells(xx,4).value
NextEz a kód a Munka1. D1:D3 cellájának értékét átteszi a Munka2 utolsó sorának első -második és harmadik cellájába. Az oszlopszámokat szükség szerint állítsd át.
Üdv.
-
Fferi50
Topikgazda
válasz
tgumis
#24824
üzenetére
Szia!
Én a munkalap Selection_Change eseménykezelőjébe tenném be a következőket:
Megnézném, hogy a kérdéses terület van-e kiválasztva (ezt az intersect függvénnyel tudod megtenni)
Ha igen, rákérdeznék, hogy másoljam-e át (msgbox eredménye yes vagy no).
Ha másolni kell, akkor megkeresem a második munkalapon az utolsó sort és a cellák értékét egyesével átadom első cella az első oszlopba, második cella a második oszlopba . és így tovább.Üdv.
-
-
Fferi50
Topikgazda
válasz
Thrawnad
#24778
üzenetére
Szia!
Ennél azért szerintem egyszerűbb a left és az instr függvény használata:
File_Ki=left(workbooks(file_ez).fullname,instr(workbooks(file_ez).fullname,".")) & "TXT"
(Persze csak akkor, ha nincs a nevében több pont...)
Esetleg így:
File_Ki=workbooks(file_ez).fullname
File_Ki=left(File_Ki,instr(File_Ki,".")) & "TXT"Üdv.
-
Fferi50
Topikgazda
válasz
Thrawnad
#24769
üzenetére
Szia!
Workbooks(1).FullName megadja a teljes nevét, elérési utvonallal együtt.
Workbooks(1).Name megadja a rövid nevet.
Ha csak az elérési útvonalra vagy kíváncsi akkor:utvonal=replace(workbooks(1).fullname,workbooks(1).name,"")
Természetesen a workbooks(1) helyére kerülhet akár activeworkbook, vagy névvel megadott munkafüzet a szám helyett.
Üdv.
-
Fferi50
Topikgazda
Szia!
Használd a HA függvényt, pl. a C21 cellába írhatod a következő képletet
=ha(fkeres(E3;B9:D13;3;hamis)=5;kerek.le(E5/fkeres(E3 ; B9 : D13 ; 3;hamis);0);"-")A többinél is értelemszerűen így, csak az egyenlőségjel helyett a >= jelet kell használnod és folyamatosan növelni kell a határt.
A C18 cellában >=2 a határ, C19-ben >=3, C20-ban >=4Üdv.
-
Fferi50
Topikgazda
válasz
KaliJoe
#24739
üzenetére
Szia!
Természetesen az excel súgónak tökéletesen igaza van és ugyanaz van benne amit én is írtam. Ha megnézed a range_lookup paraméterhez tartozó leírást, annak háromféle értéke lehet: Igaz, Hamis, vagy nem adod meg. A paraméter alapértelmezett értéke az Igaz (vagyis tartományban keres közelítő értéket), ami egyezik azzal, hogy nem adtál meg értéket.
Ha viszont Hamis értéket adsz neki - azaz pontos értéket keresel - akkor nem kell sorbarendezni az adatokat! Ez következik a megfogalmazásból:
"Fontos: Ha a tartományban_keres értékeIGAZ vagy hiányzik, a tábla első oszlopában lévő értékeknek növekvő sorrendben kell elhelyezkedniük, különben az FKERES hibás eredményt adhat."
Vagyis, ha az értéke HAMIS, akkor nem kell sorbarendezni.Üdv.
Bocs a megszólítás miatt, de itt általában ez a "barátságos tegeződés" járja.
-
Fferi50
Topikgazda
válasz
tgumis
#24735
üzenetére
Szia!
Nézd meg légy szíves a csatolt fájlt, abban ismétlődő adatok általad kiválasztott értékét lehet visszakapni a képlettel.
ismétlődő adatok kereséseNyilván nem lehet egy az egyben alkalmazni nálad, de az elveit ha megérted, tovább tudsz lépni.
Még valami, ha PONTOS egyezést keresel, akkor NEM KELL SORBARENDEZETT adat sem az FKERES sem a HOL.VAN függvénnyhez
Üdv.
-
Fferi50
Topikgazda
válasz
attilaandor
#24665
üzenetére
Szia!
Először is csinálnék egy oszlopot, amiben kiszámolnám az áfa értéket (e oszlop x f oszlop).
Ezután egy szumha függvénnyel összeadnám a kiszámolt oszlop azon celláinak értékét, ahol az f oszlopban 27 % van.Üdv.
-
Fferi50
Topikgazda
válasz
#75376384
#24633
üzenetére
Szia!
Én a következőt tettem:
A J1 cellába beírtam a Kivételek száma cimkét
A J2 cellába beírtam a következő képletet:
=DARABHATÖBB($C$2:$C$4000;C2;$A$2:$A$4000;A2)
Majd ezt végighúztam az egész J oszlopon.
A kapott eredmény alapján csináltam egy sorbarendezést, ahol az első szint a Kivételek száma és a nagyobbtól a kisebbik felé rendez, a második szint a név, ahol A-Z a sorrend.Ezután kedved szerint kiválaszthatod, ha akarod, hogy ki vette ki a legrégebben valamelyik filmet.
Üdv.
-
Fferi50
Topikgazda
válasz
#75376384
#24631
üzenetére
Szia!
Tegyél fel egy 40-50 soros mintát valahova és megnézzük, mit lehet tenni.
A sorbarendezésnél nem kell 4000 sort "átnyálazni", az oszlopokon kell végigmenni és eldönteni, milyen legyen a szintek sorrendje.
A kimutatás szerintem teljesen korrekt módon megoldja a problémádat, csak megfelelően kell összeválogatni a sorokat és az oszlopokat.
A névsor szerint nekem egyértelműen a ABC sorrendet jelenti (iskolában a napló is névsorban volt írva, kik voltak elől és kik a végén?). Amit Te forszírozol, az az időrend szerinti sor - azaz ki vette ki legkorábban.
Nem egyértelmű így, hogy mit szeretnél látni.
Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24619
üzenetére
Szia!
Ez a Microsoft legutóbbi (dec. 9) Office biztonsági frissítésének "eredménye". Meg kell keresned a TEMP könyvtárak alatt az MSforms.exd állományokat és ki kell törölni onnan.
Ezután már menni fog.
itt a leírásaÜdv.
-
Fferi50
Topikgazda
válasz
DrojDtroll
#24606
üzenetére
Szia!
Elvileg igen, működnie kellene szerintem - persze elég macerás sok cellának külön nevet adni.
Nézd meg légy szíves ezt a fájlt:Példa
Itt a Munka1 A oszlop első pár cellája a Munka2 A oszlop azonos cellájának értékétől függően színeződik. A feltétel az, hogy 10 -nek kell lenni a Munka2 - ben az adott cellában (természetesen ez tetszőlegesen változtatható).
Remélem nálad is működik.
Üdv.
-
Fferi50
Topikgazda
válasz
DrojDtroll
#24604
üzenetére
Szia!
Próbáld meg a névadással (24592 sz. hozzászólás). Bár elvileg abban a verzióban már kellene mennie (hacsak vissza nem fejlesztették a 2010-es eszközöket).
Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24596
üzenetére
Szia!
Akkor leírom egyben:
Application.Enableevents=false
If Target.Column = 15 And IsNumeric(Target) Then
Target.NumberFormat = "h:mm;@"
Else
if target.value<>"N/A" then
application.undo
msgbox "Helytelen adat"
'Target.NumberFormat = "General"
endif
End If
Application.Enableevents=TrueArra figyelj, hogy az "N/A" szöveg nem azonos az N/A hibával! Ide most szöveget kell írni. Ha a hibát szeretnéd, akkor azt másképpen kell.
Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24593
üzenetére
Szia!
Még valami: Ha már egyszer úgyis meg kell nézni, hogy jót írt-e be, azt be lehetne építeni a fenti makróba és akkor az egész validálást ki lehet iktatni:
Én beszúrnám még ezt a sort az else után az előző makrómban:
if target.value<>"N/A" then
utána jön az Undo, az üzenet és ne felejtsd el az ezt záró end if -et.Üdv.
-
Fferi50
Topikgazda
válasz
slashing
#24593
üzenetére
Szia!
Ugyan nem egészen látom a logikáját annak, hogy miért formátumhoz kötöd a validálást, de az ellenőrzéshez az alábbiakat ajánlom:
If Target.Column = 15 And IsNumeric(Target) Then
Target.NumberFormat = "h:mm;@"
Else
application.undo
msgbox "Helytelen adat"
'Target.NumberFormat = "General"
End IfLehet, hogy a kikommentelt sor is kell, nézd meg lsz.
Üdv.
-
Fferi50
Topikgazda
válasz
Delila_1
#24590
üzenetére
Szia!
Áthidalható a probléma úgy is, ha azt a cellát, amelyikre hivatkozni akarsz, ellátod névvel.
Így már lehet használni a feltételes formázásban is:Munka1 munkalap A1 celláját elnevezed pl. elso -nek.
Munka2 munkalap A1 cellájának feltételes formázása: a képlet =elso=akarmiTermészetesen az akármi helyére a feltétel helyettesítendő be.
Üdv.
-
Fferi50
Topikgazda
válasz
DrojDtroll
#24588
üzenetére
Szia!
munkalap2 A1 cella Feltételes formázás, a cellák kijelölése képlettel, a képlet legyen ez:
=munkalap1!$A$1=1
a kitöltésnél jelöld be a piros szint.
A másik színnél ugyanígy.Üdv.
-
-
Fferi50
Topikgazda
Szia!
Nézd meg lsz. a cella formátumát. Az sem mindegy teljesen, hogy mit szeretnél összefűzni.
Továbbá az ÖSSZEFŰZ függvény helyett használd az & jelet. Tehát:A2 cellába: ="előre" & A1 & "végére"
Előre és végére helyett írod a saját szöveged idézőjelek között.
Egy adott cellában saját magára nem lehet képletben hivatkozni.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
bocsi6
#24573
üzenetére
Szia!
Fájlokat több helyre is lehet feltenni teljesen ingyenesen és biztonságosan. Én a Data.hu-ra szoktam feltenni, ott feltöltés után kapsz egy linket, amit be lehet ide másolni. (De más "adattárak" is így működnek.)
A régi környezetet már nem tudod szerintem visszaállítani, ezért javasoltam a "szomszéd, barát, ismerős, munkahely, stb.) másik gépet ill. a feltöltést.
Üdv.
-
Fferi50
Topikgazda
válasz
bocsi6
#24571
üzenetére
Szia!
Mint írtam is, én is csak próbálkozom...
Arra gondoltam, ha nem lehet benne activex-et egyáltalán feltenni, akkor hiányozhat ez a komponens. VBA nézetben- Tools menü - References. Ezt kellene megnézni másik gépen, ahol ment a fájl.
Nem tudom, tudsz-e régebbi környezetet "produkálni". Szerintem meg kellene nézni, hogy másik gépen, másik excellel működik-e az activex felrakása.
Esetleg - ha nincsenek benne titkos adatok, vagy azokat ki lehet gyomlálni - feltehetnéd a problémás fájlt valahova, hátha "megnézve" okosabb lehet valaki.Üdv.
-
Fferi50
Topikgazda
válasz
bocsi6
#24560
üzenetére
Szia!
No ez az a jelenség, amire szerintem pillanatnyilag nincs normális megoldás.
Próbáld a következőt:
Az excelt nyisd meg egy üres munkafüzettel.
Menj át a VBA nézetbe (Alt+F11 vagy Nézet - makrók - visual basic)
Az immediate ablakba írd be:
application.enableevents=false
Ezután nyisd meg a kérdéses munkafüzetet. Ha előjönnek az activex vezérlők, akkor kapcsold vissza az eseménykezelést: application.enableevents=true
De semmi garancia nincs arra, hogy a következő megnyitáskor nem fog összedőlni az egész excel....Másrészt érdemes lenne megnézni, milyen "references" az amit elér az excel. Azt is a VBA nézetben láthatod. Lehet, hogy kellene egy activex komponesekre hivatkozó MS dll. De erre sem vennék mérget.
Én már több hónapja küzdök ezzel a problémával és nem találtam rá olyan megoldásra, ami garantáltan kiküszöböli.
Nagy eséllyel valamilyen memória kezelési hiba - vagy programozói "hanyagság" - okozza. Ez utóbbit azért tettem idézőjelbe, mert egyébként nem következetes az összeomlás. Van, hogy ugyanaz a program napokig megy hiba nélkül, aztán teljesen váralanul jön a baj, nem indul el, hanem kiakasztja az excelt.Még valami, amit a szerkesztőlécen látsz beágyazként az sajnos már nem activex vezérlő, hanem munkalap vezérlő - valamelyik sorstárs irta, hogy "átalakul az activex vezérlő munkalap vezérlővé".
Üdv.
-
Fferi50
Topikgazda
válasz
m.zmrzlina
#24556
üzenetére
Szia!
Talán két dolgot lehet tenni.
1. Ha megnyitod az adott fájlt (munkafüzetet), akkor a workbook.path tulajdonság csak az elérési útvonalat adja meg.
2.Érdemes megnézni szerintem a filesystemobject objektumot.Üdv.
-
Fferi50
Topikgazda
válasz
MC Pite
#24535
üzenetére
Szia!
Akkor van ilyen hibaüzenet, ha az adott tartományban nem talál üres cellát. Ne feledd, attól, hogy nem látsz a cellában semmit, még lehet benne "információ" (pl. olyan képlet, aminek az eredménye üres string,stb.).
Ezt hibakezeléssel lehet makróban "kivédeni".
Pl.
on error resume next
set rngures=valami.columns("B").specialcells(xlcelltypeblanks)
if error="Nincs ilyen cella" then msgbox "Nincs üres cella"
on error goto 0Üdv.
-
Fferi50
Topikgazda
válasz
MC Pite
#24531
üzenetére
Szia!
Szerintem fordítva kellene csinálnod.
Szűrés - csak az üres sorok kiválasztva - a sorokat kijelölöd (az egészet együtt) - sorok törlése - szűrő kikapcsolása.
Ez nyilván akkor jó, ha más oszlopokban nincs adat.Vagy makró:
sub sortorlo
activesheet.usedrange.columns("A").specialcells(xlcelltypeblanks).delete shift:=xlshiftup
end sub
A makró viszont csak az üres cellákat törli.Üdv.
-
Fferi50
Topikgazda
válasz
Soulfly842
#24529
üzenetére
Szia!
Talán ha konkrétabban leírnád a problémát, vagy tennél fel egy mintát valahova, hamarabb kerülne segítség is (pl. milyen munkafüzetbe milyen táblát szeretnél felvinni,stb.) .
Mert ez így nagyon általános.Üdv.
-
Fferi50
Topikgazda
válasz
szix96
#24501
üzenetére
Szia!
Íme egy lehetőség:
Sub fileosszegzo()
Dim mf As Workbook, lap As Worksheet, fnev, usor As Long
Set mf = ActiveWorkbook
Set lap = ActiveSheet
Do While MsgBox("Akar adatokat beolvasni ?", vbYesNo) = vbYes
usor = lap.Range("A" & Rows.Count).End(xlUp).Row + 1
fnev = Application.GetOpenFilename()
If fnev <> False Then
Workbooks.Open Filename:=fnev ' megnyitás
Range("A8:E56").Copy Destination:=lap.Range("A" & usor)
'lap.Range("A56").PasteSpecial 'Beillesztés
ActiveWindow.Close False 'Bezárja
Range("A2").Select 'Rááll és vége
End If
Loop
MsgBox "Beolvasás vége!", vbInformation
End SubNéhány megjegyzés hozzá:
- az mf ebben az esetben teljesen felesleges, hiszen nem is használjuk a makróban
- a megnyitás után mindig a megnyitott munkafüzet lesz aktív - ezt lehet kihasználni a másolásnál amit lehet közvetlenül a célterületre "küldeni".
- a makró mindig az A oszlop első üres sorától másolja be a következő fájl adatait
- honnan tudod, hogy a megnyitott fájlban éppen az a munkalap az aktív, amire neked szükséged van? Ha csak egy munkalap van benne, akkor ok, de egyébként baj lehet, hiszen más esetleg (vagy akár Te is) elmozdíthatta az aktív munkalapot.
- természetesen a másoladó területet (ami most Range("A8.... nál kezdődik) szintén meg lehet adni úgy, hogy megkeressük a forrás fájlban - csak a szempontokat kell hozzá ismerni.
- a bezárásnál a False paraméter azt jelenti, hogy nem kell az esetleges változtatásokat menteni a forrásban
- a bezárás után ismét az eredeti fájlod lesz az aktív munkafüzet.A do while ciklus addig megy, amíg a kérdésre igent válaszolsz. Ha nem választasz fájlt, akkor nincs mit bemásolni, utána a kérdésre válaszolj nemmel, ha ténylegesen be akarod fejezni a beolvasást, vagy válassz fájlt és akkor folytatódik a beolvasás. (De ha igent válaszolsz és utána nem választasz fájlt, akkor a ciklus továbbra is "pörög" - ez szándékosan van így, hiszen el is téveszthetted a file választást.)
Üdv.
-
Fferi50
Topikgazda
válasz
m.zmrzlina
#24490
üzenetére
Szia!
Akkor már miért nem így:
Range("A1:G1").Copy destination:=Worksheets("Munka2").Range("A" & Rows.Count).End(xlUp).Row + 1)
Nem kell hozzá utána semmi.
Üdv
-
Fferi50
Topikgazda
válasz
m.zmrzlina
#24485
üzenetére
Bocs, közben megláttam a privát üzit.
-
Fferi50
Topikgazda
válasz
m.zmrzlina
#24482
üzenetére
Szia!
Csak még egy kérdés: Akkor is belassul, ha a másik munkafüzet üres, vagy csak akkor, ha adatok vannak abban is?
Esetleg egy "közzétehető" mintát meg lehetne nézni (nyilván az érzékeny adatok nélkül)? Mert akkor talán tudunk válaszolni.
Meg lehet még próbálkozni az eseménykezelés letiltásával - az is tud problémát okozni, ha minden egyes cella változásánál "elszalad" az eseménykezelésbe, még akkor is, ha egyébként ott nem kell neki semmit csinálni.
Elébe egy Application.Enableevents=false, utána egy Application.Enableevents=true.
Nem tudom, a képernyőfrissítést ki szoktad-e kapcsolni. (Application.ScreenUpdating)Üdv.
Új hozzászólás Aktív témák
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem.
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Játékkulcsok ! : PC Steam, EA App, Ubisoft, Windows és egyéb játékok
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Fallout 4 Pip-Boy Edition eladó
- HIBÁTLAN iPhone 14 Pro Max 256GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen, MS4513
- Xiaomi Mi 11 T Pro 8/256GB / 12 hó jótállás
- HIBÁTLAN iPhone 12 Pro Max 128GB Pacific Blue-1 ÉV GARANCIA - Kártyafüggetlen, MS4517, 100% Akksi
- Samsung Galaxy S24 FE 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- 360 áthajthatós! Dell Latitude 5330 2 in 1 i7-1265U 10magos! 16GB 1000GB 13.3" FHD 1 év garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
).
