Keresés

Részletes keresés

Törölt nick Creative Commons License 2011.08.11 0 0 15811

Esetleg ezt is megpróbálhatod. Úgy mértem, durván 5x gyorsabb, mint a ciklusos megoldás.

Kb. 55000 sornál 51 sec volt a futási idő. (Lehet, hogy a kézi szűrés-másolás ennél is gyorsabb :))

 

Sub töröl()
    Dim Rng As Range, WS As Worksheet
    Application.Calculation = xlCalculationManual
    Set WS = Sheets("Country Orders Data")
    Set Rng = WS.Range("B2", WS.Range("B" & Rows.Count).End(xlUp))
    WS.Range("B:B").Insert
    With Rng.Offset(, -1)
        .FormulaR1C1 = "=IF(RC[1]<>""Denmark"",1,"""")"
        .Copy
        .PasteSpecial xlPasteValues
        .SpecialCells(xlCellTypeConstants, xlNumbers).EntireRow.Delete
    End With
    WS.Range("B:B").Delete
    Application.Calculation = xlCalculationAutomatic
End Sub

Előzmény: wawabagus (15809)
SQLkerdes Creative Commons License 2011.08.11 0 0 15810

A Calculate-et feltétlenül próbáld meg.

Előzmény: wawabagus (15809)
wawabagus Creative Commons License 2011.08.11 0 0 15809

Szia,

Screenupdate-et lekapcsoltam

Calculate-et viszont nem

 

Közben megpróbáltam, hogy szüréssel nyerem ki ami kell nem ezzel a ciklussal és így sokkal gyorsabb.

 

Köszi!

Utánanézek ennek a calculate dolognak

Köszönöm a sgeítséget!!

 

Előzmény: SQLkerdes (15808)
SQLkerdes Creative Commons License 2011.08.11 0 0 15808

Screenupdating lekapcsolás,

Calculate lekapcsolás

 

35000 sornál akár rengeteget is számíthat.

Előzmény: wawabagus (15807)
wawabagus Creative Commons License 2011.08.11 0 0 15807

Sziasztok!

Lenne még egy kérdésem.

 

Van nekem ez a kódom:

 

    Sheets("Country Orders Data").Activate
    Last = Cells(Rows.Count, "B").End(xlUp).Row
    For i = Last To 2 Step -1
        If (Cells(i, "B").Value) <> "Denmark" Then
            Cells(i, "A").EntireRow.Delete
        End If
    Next i

 

Mivel azonban a sheet, amin töröl kb 35ezer sor van, ez eléggé kikészíti a programot.

Mi lehetne a gyorsabb megoldás? Rászűrés Denmarkra és kicopizás?

 

Köszi a tiippeket!!

 

 

wawabagus Creative Commons License 2011.08.11 0 0 15806

Sziasztok!

Tudnátok nekem tanácsot adni?

 

Vadi új gépet kaptam a munkahelyemen és új programokat is:

 

Windows XP - ->> Windows7

Excel 2003 -->> Excel2007, de a Excel 2003-es még rajta van

 

Vannak régi excel fájlaim, minenféle makróval....meg új fájlok amikben most komponálik makrót stb...

 

TETÜ LASSÚ AZ EXCELEM!!!

 

Megnyitni egy fájlt 3 perc

Elmenteni 2perc

Gagyi makrót futtatni 4 perc

 

A gépem vadi új!

 

Lehet emögött olyan ok, amin esetleg változtatni tudok? Létezik, hogy az excel 2007-en ennyire lassan nyíljanak a régi fájlok?

 

Köszi előre is a tippeket/ötleteket mit lehetne tenni...

Köszi!!!

magyarpityu Creative Commons License 2011.08.11 0 0 15805

Szia Jimmy!

 

Köszönöm a választ, megint tanultam tőled! :))

 

Ezt a 4 elemű tömböt én is nézegettem, de nem tudtam kiokoskodni, milyen adatokat is tárol. Végül megtaláltam a megoldást:

 

Sub szamol()
  Dim Param1 As Integer, Param2 As String
  Dim MenuCommand As CommandBarControl
  Set MenuCommand = CommandBars.ActionControl
  If Not TypeName(MenuCommand) = "CommandBarButton" Then Exit Sub
  Param1 = MenuCommand.Tag
  Param2 = MenuCommand.DescriptionText
  ...

 

A menü több szintes, minden szinten CommandBarControl objektumok szerepelnek. Azokat a menüpontokat, amelyek valamilyen feladatot hajtanak végre, vagyis amelyek meghívják a szamol() makrót, azokat msoControlButton típussal hoztam létre:

 

AlMenu(k).OnAction = "szamol"

AlMenu(k).DescriptionText = "..." 'Param2

AlMenu(k).Tag = "..." 'Param1

 

Azok a menüpontok, amelyekből almenü nyílik, azok msoControlPopup típusúak, és nincs .OnAction tulajdonságuk (pontosabban, ezt a tulajdonságát nem irányítottam a szamol() makróra).

 

Mikor a menüből meghívódik a 'szamol' makró, akkor a CommandBars.ActionControl tartalmazza azt a referenciát, amire szükségem van. Felvettem a 'szamol' makróban egy CommandBarControl típusú objektumot, ennek adtam át a CommandBars.ActionControl referenciát, és innentől kiolvashattam a korábban minden menüpontra egyedileg jellemző .DescriptionText és .Tag tulajdonságokat. Így már át tudok adni paramétereket a meghívott makrónak. Sőt, akár három paraméter is átadható, mert a .Parameter tulajdonság is használható.

Még egyszer köszönöm a segítséget!

Előzmény: Törölt nick (15804)
Törölt nick Creative Commons License 2011.08.11 0 0 15804

Hát én úgy nézem, hogy a variant egy négyelemű tömb, amelynek elemei a hívó menuitem pozícióját mutatják.

 

Sub teszt()
    Dim v As Variant
    v = Application.Caller
End Sub

 

Ha a fenti makrót saját menügombbal indítod, akkor a v(1 To 4) vektor elemei a következők lesznek:

 

v(2) : hányadik menü a felső menüsorban

v(1) : az adott menün belül hányadik menüpont

v(3) : ??? (nem tudom mi ez)

v(4) : kísérleteim szerint, ha legalább 3. szinten van az aktivált menüpont, akkor v(4) értéke 1, egyéb esetben nulla. (Vagyis, ha az aktivált menüpont a főmenü->almenü->menüpont útvonalon érhető el, mint pl. az Eszközök->Védele->Lapvédelem, vagy még ennél is lejjebb van a hierarchiában.)

 

Maximum 2 szintes menürendszer esetén működik az alábbi tesztprogram. A 3. szintre már nem tudtam kiterjeszteni, mert fogalmam sincs, miből derül ki az, hogy az aktív menüpont a hierarchia hányadik szntjén tartózkodik.

 

Sub szamol()
    Dim v As Variant
    With Application
        v = .Caller
        MsgBox .ActiveMenuBar.Menus(v(2)).Caption & " -> " & .ActiveMenuBar.Menus(v(2)).MenuItems(v(1)).Caption
    End With
End Sub

 

Lehet, hogy van egyszerűbb módja is, pl. direkt hivatkozás az aktív menüpontra valahol az Application objektum ezernyi tulajdonsága között. Nem tudom.

Előzmény: magyarpityu (15803)
magyarpityu Creative Commons License 2011.08.10 0 0 15803

Szia Jimmy!

 

Ezt a módszert hogyan lehetne alkamazni menürendszernél?

 

Létrehoztam egy több szintű menüt, minden menüpont CommandBarControl típusú.

 

Const maxMenuCommand As Integer = 40

Dim FoMenu As CommandBarControl

Dim AlMenu(maxMenuCommand) As CommandBarControl

 

Set FoMenu = CommandBars(1).Controls.Add(msoControlPopup)

 

Azokat az almenüpontokat, amelyeknek további almenüi vannak, így hoztam létre:

 

Set AlMenu(k) = FoMenu.Controls.Add(msoControlPopup)

 

Míg azokat a menüpontokat, amelyeknek már nincs almenüje, így:

 

Set AlMenu(k) = FoMenu.Controls.Add(msoControlButton)

 

Minden almenü .OnAction tulajdonságát ugyanarra a makróra állítottam:

 

AlMenu(k).OnAction = "szamol"

 

és a későbbi azonosítás kedvéért még néhány menüpontra jellemző adatot is beállítottam:

 

AlMenu(k).DescriptionText = "..."

AlMenu(k).Tag = "..."

 

Már csak az van hátra, hogy mikor meghívódik a 'szamol' makró, akkor valahogyan azonosítania kellene, hogy melyik menüpont indította el. Ha tudnám, melyik menüpontról lett meghívva, onnantól tudnám a 'szamol' makró paramétereit is, mert minden menüpont .DescriptionText és .Tag tulajdonságait kitöltöttem. Viszont az Application.Caller ebben az esetben egy Variant() típust ad vissza. Hogyan lesz ebből CommandBarControl objektumra való hivatkozás?

 

Előre is köszönöm a segítséget!

Előzmény: Törölt nick (15800)
magyarpityu Creative Commons License 2011.08.10 0 0 15802

Szia Jimmy!

 

Ez fantasztikus, köszönöm szépen! :)) Ezt az Application.Caller-t kerestem!!!

 

Még egyszer köszönöm a segítséget!

Előzmény: Törölt nick (15800)
Törölt nick Creative Commons License 2011.08.10 0 0 15801

kórvégrehajtás kódvégrehajtás

Előzmény: Törölt nick (15800)
Törölt nick Creative Commons License 2011.08.10 0 0 15800

Nem biztos, hogy jól értem a kérdést, de ha igen, akkor a következő megoldást javaslom.

Ne az OnAction értékbe adjad be a paramétert, hanem magát a makrót írd meg úgy, hogy különböző dolgokat csináljon attól függően, hogy melyik képről indult.

 

Tehát pl. minden kép OnAction értéke a meret nevű makró, ami pedig így épül fel:

Sub meret()
    If TypeName(Application.Caller) = "String" Then
        Select Case Application.Caller
        Case "Kép 1"
            MsgBox "A 'Kép 1' objektumra kattintottál."
        Case "Kép 2"
            MsgBox "A 'Kép 2' objektumra kattintottál."
        Case "Szövegdoboz 3"
            MsgBox "A 'Szövegdoboz 3' objektumra kattintottál."
        End Select
    End If
End Sub

Itt tehát az Application.Caller tartalmazza annak az objektumnak a nevét, amelyről a kórvégrehajtás indult.

 

 

Előzmény: magyarpityu (15799)
magyarpityu Creative Commons License 2011.08.10 0 0 15799

Az ID azonosítók mentés, kilépés, újra megnyitás után változnak (de természetesen továbbra is egyediek maradnak), úgyhogy másként kell azonosítani az eseményt kiváltó objektumot. Így aztán most már két kérdésben kérek tőletek segítséget!

 

1. Hogyan lehet (pl. Shape objektum) OnAction eseménykezelőjébe olyan makróhivatkozást megadni, ami paramétereket is át tud adni a meghívott makrónak?

 

2. Hogyan lehet azonosítani azt az elemet, ami kiváltott az OnAction hatására a makróhívást?

 

Illetve talán rosszul közelítek a kérdéshez. Hogyan oldható meg, hogy egy képre kattintva elinduljon egy makró, ami ezt a képet (csak ezt, a többit nem) módosítja?

Előzmény: magyarpityu (15798)
magyarpityu Creative Commons License 2011.08.10 0 0 15798

Sziasztok!

 

Egy dologban szeretném a segítségeteket kérni! Makróval képeket szúrok be egy munkalapra, és azt szeretném, hogy a képre kattintva elinduljon egy makró.

 

Addig rendben, hogy a kép 'Shape' típusú objektum, és az 'OnAction' tulajdonságát beállítom a meghívandó makró nevére, de hogyan adok át paramétert a makrónak? Paraméterek nélkül valóban meghívódik a makró a képre kattintva, de át szeretném adni paraméterként, hogy melyik képre kattintva hívódott meg a makró! Arra gondolok, hogy a meghívandó makró várna egy Long típusú értéket, ami az egérkattintás eseményt kiváltó Shape objektum ID azonosítója lenne. Így próbáltam:

 

Dim abra as Shape

Set abra = Munlalap.Shapes.AddPicture(FileNev, msoTrue, msoTrue, Xpos, Ypos, pWidth, pHeight)

abra.OnAction = "meret(" & abra.ID & ")"

 

Az 'abra' objektum 'OnAction' tulajdonsága valóban felveszi pl. a "meret(12)" stringet, de rákattintva az ábrára hibaüzenetet kapok: "A(z) meret(12) makró nem futtatható. Lehetséges, hogy a makró nem érhető el a munkafüzetben, vagy le van tiltva az összes makró." Viszont a 'meret' makrót Excelből elindítva rendben lefut. Kipróbáltam:

 

sub tesztel()

meret 12

end sub

 

így működik.

 

Mi lehet a hiba? Hogyan lehet ezt megoldani?

tt65 Creative Commons License 2011.08.10 0 0 15797

köszi, valóban  3x(18+1)=57, most már értem honnan a misztikus szám! :-)

Előzmény: Sztai (15794)
Törölt nick Creative Commons License 2011.08.10 0 0 15796

Az Outlook a csatolmányokat belementi az email-be.

Amikor a mellékletet megnyitos, bemásolódik egy temporary mappába, és a továbbiakban az összes mentés, automentés itt rögzül. Aztán amikor be akarod zárni az emailt, az Outlook megkérdezi, hogy mentse-e a változásokat. És ha azt mondod, hogy igen, akkor a temp mappából az email obektumba beágyazódik a csatolt fájl utolsó verziója, és az egész együtt elmentődik vagy az exchange szerverre, vagy a lokális pst fájlba. Mivel elvileg ez (tehát az email + a beágyazott csatolt fájl) a végtermék, és minden egyéb csak munkaverzió, az ideiglenes fájlokra nincs szükség, tehát fölösleges őket az asztalra, vagy egyéb frekventált helyre másolni/menteni. Legalábbis valami ilyesmi lehet az ideológia mögötte.

 

Mindenesetre akár tetszik, akár nem, ehhez kell alkalmazkodni, ha Outlookot használ az ember. Fontos fájlok esetében érdemes rászokni arra, hogy mindenekelőtt lemented a mellékletet egy biztos helyre, és csak utána kezdesz dolgozni vele.

Előzmény: Qtyi (15793)
Sztai Creative Commons License 2011.08.10 0 0 15795

Milyen oprendszered van, milyen outlookod és exceled?

Előzmény: Qtyi (15775)
Sztai Creative Commons License 2011.08.10 0 0 15794

az 57 abból adódik, hogy a példában 18 ország volt, tehát az első 18 pontot kap, a második 17 stb. Ezt úgy számolom ki, hogy 18+1-helyezési sorszám. Mivel 3 csoportban értékelte őket:

n+1-ssz1+n+1-ssz2+n+1-ssz3=3*(n+1)-ssz1-ssz2-ssz3

a ssz-ot pedig a MATCH/HOL.VAN adja meg

Természetesen 57 helyett jobb megszámolni az elemszámot fv-nyel (3*(count(a:a)+1))

Üdv

 

Előzmény: tt65 (15774)
Qtyi Creative Commons License 2011.08.10 0 0 15793

Jimmy, hályog kovács, tt65,

 

Köszönöm a segítségeteket!

Sajnos egyik módszerrel sem sikerült elővarázsolni a file-t.

Emlékeztem, hogy valami T-vel kezdődő krix-krax-nevű könyvtárba "mentettem", de azt nem találtam meg (pedig volt vagy 40 könyvtár mindenféle kezdőbetűvel, és mindet végignéztem).

Viszont megtaláltam egy korábbi file-t, amivel szintén így jártam anno, úgyhogy segítségetek nem volt hiábavaló :)

 

Mégegyszer köszönöm!

 

(Pusztán csak elgondolkodás végett, vajon mire jók ezek a krixkrax nevű, elérhetetlen könyvtárak? Miért nem menti az Outlook valami normális helyre a file-okat alapból?... )

 

Előzmény: Törölt nick (15776)
tt65 Creative Commons License 2011.08.10 0 0 15792

mail ment

Előzmény: Daniel Jonas (15791)
Daniel Jonas Creative Commons License 2011.08.10 0 0 15791

1 Ft = ~366 Euro (az én világomban Júniusi adatok)

             -18  Font

             60   Bura

             182 Dán Dáner

              80  Svéd Bróken

             476 Román Ún

stb.

Ha érdekel; van facebookod?

Mert ez nem ehhez a témához tartozik szerintem... :/

Előzmény: tt65 (15790)
tt65 Creative Commons License 2011.08.10 0 0 15790

egyik kevésnek tűnik, a másik sok, hogy kell értelmezni?

Előzmény: Daniel Jonas (15789)
Daniel Jonas Creative Commons License 2011.08.10 0 0 15789

0.30 Ft/lap (kb. 110 €)

Előzmény: tt65 (15787)
wawabagus Creative Commons License 2011.08.10 0 0 15788

Szia köszi,

Igen, valami olyasmi volt a parancs :-).

Ez lett a megoldás :-)

appexcel.ActiveWorkbook.SaveAs "D:ChannelKnowledge_MissingReports W" & wNum & ".xls"

 

Köszi!!!

 

Előzmény: Törölt nick (15756)
tt65 Creative Commons License 2011.08.10 0 0 15787

OFF minden elsimerésem, ez nagyon jó dolog, igazán érdekes. Az ujságot hol lehet olvasni, előfizethető? :-)

Előzmény: Daniel Jonas (15786)
Daniel Jonas Creative Commons License 2011.08.10 0 0 15786

Hmm... Vajon ezt a szép témát ki hozta létre? :D

 

Amúgy azért használom gyakran, mert (nem muszáj kritizálni...) megterveztem a saját világom, országom, gazdasággal, domborzattal, valutákkal, stb. (köröbelül 2.-ikos kormoban kezdtem) és eleinte kézzel csináltam a dolgokat, de a micorosoft office sokszor nagyban megkönnyíti a dolgomat. A Publisherrel a 2havonta megjelenő újságokat gyártom (hogy később emlékezzek, hogy mi volt az országomban pl. 2010 Februárban, stb. Az excellel gyakran készítek hasonló táblázatokat, pl. az excelben vezetem a napi tőzsde-index grafikonomat is. A térképeket többnyire megcsinálom kézzel, de ma már (szerintem) elengedhetetlen a gépi formátum is, amit először paintal csinálok, majd a Publisherrel az átmásolt térképre ráírogatom az adatokat, neveket... Ezért van szükségem főleg erre a két office alkalmazásra :)

De jól esett ezt így leírni! :D

Még akkoris ha nem ebbe a topikba való... :)

Előzmény: tt65 (15784)
tt65 Creative Commons License 2011.08.10 0 0 15785

szivesen!

ez különösen tetszett: "elég rég használom az excelt bonyolultabb dolgokra is ... 15 éves létemre..."  :-)

Előzmény: Daniel Jonas (15783)
tt65 Creative Commons License 2011.08.10 0 0 15784
Előzmény: Qtyi (15775)
Daniel Jonas Creative Commons License 2011.08.10 0 0 15783

ÉS SIKER!

 

Most hogy látom, hogy ez egy ilyen jól működő fórum, szerintem gyakrabban fogok ide fordulni segítségért! ;)

Más fórumokon jó ha hetente egyszer néznek egy témát, de itt gyorsan és segítőkészen megkaptam a választ a részkérdéseimre is! :)

 

Köszönöm mindenkinek! :D

Üdv legközelebb!

tt65 Creative Commons License 2011.08.10 0 0 15782

Válassz fekvő elrendezést a nyomtatásnál :-)

segéd oszlopokat el is lehet rejteni ...

Előzmény: Daniel Jonas (15778)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!