- Samsung Galaxy A54 - türelemjáték
- iPhone topik
- Xiaomi 14 - párátlanul jó lehetne
- A lapkakészlet és az akku különbözteti meg a Motorola Edge 60 és Edge 60 Pro-t
- Mobil flották
- One mobilszolgáltatások
- Három modellel indul a Tecno Spark 40 széria
- Google Pixel topik
- Magisk
- Korrekt belépőt hozott az Infinix
-
Mobilarena
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
-
Kobe
veterán
Kozben megoldottam, a trust center settingsben kell mokolni hozza
Viszont a makro egy masik reszevel bajban vagyok kicsit. Kb ezt csibalja a tool, addin:
Van egy gomb az Addin fulon
A gomb megnyomasa elindit egy formot
A formrol bealliyos utan (adatok kivalasztasa) el lehet inditani egy riportot
A riport egy sharepointrol letoltes excelbeA problemam csak annyi hogy a riport elkeszulte utan maximum az excrl rublikaiba lehet kattintani, menube es egyeb gombokra nem. Szerintem a form rosszul adja vissza a controllt a leyoltes vegeztevel.
Imyenkor alt tabbal vagy manualisan at kell valtani egy masik kepernyore es vissza excelbe, akkor mar lehet a menuben is kattintaniA riportletoltos makro legvegere beraktam egy Unload Form1 statementet de ugy tunik nem eleg
Probaltam. Azt is hogy a form-ot modelessbe toltom be (Userform_Layou ot mokoltam) de ugy sem jo
Esetleg tipl hogy mikent lehetne ezt az atkattintgatast megoldani?
-
Kobe
veterán
Nah, kiprobaltam reszletesebben a kodot
Frankon felhoz egy uj menublokkot, at is formaztam a benne tslslhato 2 gombot hogy azt csinalja amire nekem szuksegem lenne
Es itt jon a problem: az evyik gomb egy urlapot indit el, amkt vegre is hajt popecul, viszont az urlap elinditasaval egyidoben eltunik ez a kulon blokk a menubol, ami nem tul szerencses
Probaltam hogy az urlap betoltesekor meghivstkozom elso lepesben a Workbook_Open subot de hibauzenetet dob
-
Kobe
veterán
sziasztok
van egy xlam Excel Addinom, ami korábban frankón működött, azonban Office365 váltás miatt a custom ribbonba töltés funkció nem megy valamiért
Ribbonra új fül betöltése:
Sub LoadCustRibbon()
'this is to paste custom buttons on the Excel ribbon when opening the file
Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
'in case new buttons need to be added or action modified, please update it below
ribbonXML = "<mso:customUI xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + " <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + " <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + " <mso:tab id='reportTab' label='Cím1'' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:group id='reportGroup' label='Cím1' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:button id='runReport1' label='Riport' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor1' onAction='Callback5'/>" & vbNewLine
ribbonXML = ribbonXML + " <mso:button id='runReport4' label='Save workbook' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor4' onAction='Callback4'/>" & vbNewLine
ribbonXML = ribbonXML + " </mso:group>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + " </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"
ribbonXML = Replace(ribbonXML, """", "")
Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Subezzel pedig bezáráskor leürítem:
Sub ClearCustRibbon()
'this is to remove the custom embedded ribbon elements from the Excel ribbon when closing the file
Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribbonXML = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"
Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Subarra gondoltam az Office365 talán máshol tárolja az Excel.OfficeUI filet, de nem változott.
Esetleg a séma elérése változott ? http://schemas.microsoft.com/office/2009/07/customui' -
Kobe
veterán
válasz
Fferi50 #37525 üzenetére
megoldottam egyszerűbben, kiirattam a listbox értékeit egy ideiglenes táblába és onnan beolvasom/leürítem az ideiglenes táblát
Viszont imádom amikor az ember összerak egy komplett eszközt és a legutolsó mozzanatnál az egész elkezd ActiveX object control hibákat dobni, a relative komplex formom addig flottul működő gombjaitól egész egyszerűen meghal ay Excel, kifagy....
-
Kobe
veterán
válasz
Fferi50 #37523 üzenetére
Mert egy user neve a ket oszlop barmelyikeben elofordulhat (az oszlopok kulonbozo szerepkorokre utalnak, es ahol a ketto vmelyikeben talalat can, az a sor marad
Igazabol nem a 2 feltetel figyelese okoz gondot (mind a ket oszlopnal ugyanannak a listboxnak az ertekeit kellene nezni) hanem a range listboxra cserelese -
Kobe
veterán
sziasztok
van egy vezérlő űrlapom, amin a felhasználó kiválaszthatja, hogy milyen user nevekre és miylen státuszú tételekre szeretne egy riportot futtatni. Van pl 15 user, és 10 státusz, ő maga összeválogathatja, hogy mire akarja futtatni
Ezt úgy oldottam emg, hogy vannak LsitBox ok a formon, az egyikben megjelenik az összes választható, és a user átmozgatja a kiválasztott tételeket egy üres ListBox ba
Ezután futtatja a riportot. A nyers riportból pedig kitörlődik midnen olyan felhasználó és státusz sora ami nincs benne a választásban.
Eddig úgy oldottam ezt meg hogy egy háttér-worksheeten tároltam ezeket az értékeket, és onnan olvastam ki mi nem kell, és ami nem felelt meg, annak a sorát törölte:
Dim WF As WorsheetFunction
Set WF = Application.WorksheetFunction
'LR = Cells(Rows.Count, 2).End(xlUp).Row
For i = LR To 2 Step -1
If WF.CountIf(ThisWorkbook.Worksheets("Usernames").Range("A2:A20"), Range("B" & i)) + WF.CountIf(ThisWorkbook.Worksheets("Usernames").Range("A2:A20"), Range("C" & i)) = 0 Then
Rows(i).EntireRow.Delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = Trueezt szeretném átírni úgy, hogy ne a worksheet Range-re kelljen hivatkozni, hanem a Username nevű Form ListBox2-es listboxában található értékekre:
If WF.CountIf(ThisWorkbook.Worksheets("Usernames").Range("A2:A20"), Range("B" & i)) + WF.CountIf(ThisWorkbook.Worksheets("Usernames").Range("A2:A20"), Range("C" & i)) = 0 Then
Rows(i).EntireRow.Delete Shift:=xlUptudna valaki segíteni ezzel?
-
Kobe
veterán
üdv
a kérdésem: van egy .xlam addinom, ami egy adott adatforrásból letölt egy csomó adatot, ömlesztve. Ezekből az adatokból formázok egy riportot, két lépésben, először felhasználók, majd utána státusz alapján kiűszűröm a nem relevánsakat, utána amradék csinosítgatás
Viszont a felhasználók változhatnak, illetve a státusz is amit látni szeretnék, így szeretném valamiylen módon dinamikussá tenni a választásokat, hogy a további lépéseket kire végezze el.
Gondolotam rá. Pl a makróba berakok egy sort, ami egy adott lépésnél, letöltés után feldobna egy űrlapot, ahol szerepelne az összes felhasználó neve illetve a státuszok, és ott lehetne választani hogy mi maradjon benne, és a további formázás lépéseket az ott megadott választás alapján végezné
(korábban a userek és státuszok karbantartása egy rejtett excel munkalapon történt de lehet egyszerűbb lenne akkor mrá űrlapon keresztül vezérelni a userek hozzáadását eltávolítását is pl)Erre valakinek van valami útmutatója, xlam ba hogy lehetne ilyet lekódolni ? vagy ahsonló referenciát tudna mutatni ?
-
Kobe
veterán
válasz
Cilindrik #37381 üzenetére
Adat - Szovegbol oszlopok
Ott a fuggoleges specko karaktert beadod separatornak es szetszedi (de space alapjan is szetcsapja, csak minden szot kulon oszlooba). Ha az egyszinueket egy oszlopba akarod rakni akkor szetszedes utan raeresstesz egy CONCATENATE fuggvenyt a fekete szoveges oszlopokra, meg egyet a pirosakra
-
Kobe
veterán
válasz
Delila_1 #37372 üzenetére
kipróbáltam, köszi.
Sajna ennél a sornál elhasal:
If WF.CountIf(Range("J1:J6"), Range("B" & i)) + WF.CountIf(Range("J1:J6"), Range("C" & i)) = 0 Then
Ez egy xlam file, amiben van egy rejtett workbook (ThisWorkbook), illetve egy rejtett Worksheet (Usernames).
Azt csináltam, hogy a userneveket erre a rejtett worksheet A oszlopába írtam, A2:A7 mezőkbe listáztam, majd a makróval a hivatkozást átírtam:If WF.CountIf(Worksheets("Usernames").Range("A2:A7"), Range("B" & i)) + WF.CountIf(Worksheets("Usernames").Range("A2:A7"), Range("C" & i)) = 0 Then
így viszont nem tudja lekezelni. Lehet mert rejtett? (szeretném xlam formátumban tartani a dolgot)
-
Kobe
veterán
válasz
Delila_1 #37370 üzenetére
Koszi.
A vege eleg szep kis lista lesz....ha minden userre 2db bejegyzest kell nyilvantartani
Ha letarolom a user listat egy worksheetben, akkor van arra mod hogy a "Gipsz Jakab" helyere meghivatkozzam azt? (egyszerubb egy listat karbantartani mint egy hardcodeolt reszt a programban)
-
Kobe
veterán
sziasztok
van egy Excel táblám, amiben a B és C oszlopokban nevek vannak (kb 100-200 különböző név). Azt szeretném, ha egy makró kitörölné azokat a sorokat (az egész sort) ahol a B és C oszlopok bármelyikében nem egyezik meg az általam kívánt nevekkel (magyarul szeretném csak a nekem érdekes 4-5 névre emgtartani a sorokat).
A nevek a 2 oszlopban lehetnek eltérőek, akár B ben vagy C ben szerepelhet az általam ekresett érték, és ha egyikben sem találta meg, akkor töröljön csak sort,, ha a kettő közül bármelyikben szerepel, maradhat.Idáig jutottam, de nem működik, tuti elírtam valamit. Mi lenne helyesen ?
Dim LR As Long
Application.ScreenUpdating = False
LR = Cells(Rows.Count, 1).End(xlUp).Row
For i = LR To 2 Step -1
If Range("B" & i:"C" &i) <> "Gipsz Jakab" Or "Rezső Dezső" Then
Range("B" & i).EntireRow.Delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = True -
Kobe
veterán
válasz
Delila_1 #37065 üzenetére
Koszi, kiprobalom
Arra esetleg van tipp, hogy ezeket a szurendo torlendo ertekeket hogy lehetne valami kulon, szrrkesztheto formban letarolni? Azt konnyebb lenne karbantartani, mint mindog a kodot atirni, ha pl a userekben vagy a kiszurni kivant statuszok ban valtozas van
Pl elindul a sub egybribbonrol vezerelt gombbal, es a sub elejen rogton bejonne egybform - pl bepipalja melyik statuszokat szurje ki es melyik userre toltse le
-
Kobe
veterán
hi
segítség kellene egy tábla adattisztításának autoamtizálásához. van egy makróm ami egy sharepointos felületről letölt táblába (Table1 objectként, már "filterezve") egy listát.
Ebben a táblában 2 db feltétel szerint szeretnék egész sorokat törölni:
1. lépés: a J oszlopban 10 lehetséges érték lehet : aktív, törölt, stb stb. Töröljön ki minden olyan sort a táblából, ahol a J oszlopban Lezárt, Befejezett, Törölt, Várakozik érték van
2. lépés: a fennmaradó adathalmazon a B oszlopban található felhasználónév alapján végezzen még egy törlést: minden olyan sort töröljön ki, ahol a username =/= A, B, C, D, vagy E értékekkel
erre valami ötlet ?
Próbáltam már ahsonlóval, de a Tábla maitt elhasal:With ActiveSheet
.AutoFilterMode = False
With Range("d1", Range("d" & Rows.Count).End(xlUp))
.AutoFilter 1, "*Record Only*"
On Error Resume Next
.Offset(1).SpecialCells(12).EntireRow.Delete
End With
.AutoFilterMode = False
End WithAz egész makró egy xlam-ba van rejtve, egy custom ribbonnal gombokkal vezérelve. Ha esetleg valakinek ötlete van arra, hogy a user neveket, illetve a kitörölendő értékeket hogyan lehetne egy a ribbonról előhívható táblában paraméterezni (pl cehckboxal jelölni mit töröljön ki), az plusz pont
-
Kobe
veterán
válasz
Fferi50 #36555 üzenetére
megoldottam közben, most már fut rendesen
Viszont olyan problémába ütköztem, hogy az egész makrót egy xlam add-inba mentettem VBA projektként. A makró csinál egy custom ribbot tabot ahova bevágja a parancsgombokat, és autoamtikusan ez indulna el, ha az addint elindítom
Azt hogy betöltse a custom ribbont, a ThisWorkbook on belül hviatkoztam meg
Private Sub Workbook_Open()
Call LoadCustRibbon
End SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)
Call ClearCustRibbon
End Subviszont az xlam-ban induláskor ugye nincs workbook, emiatt nem tölti be.Hogyan, vagy hol kellene másképp emghivatkozni, hogy mégis a ribbonra kerüljenek ?
-
Kobe
veterán
válasz
Fferi50 #36546 üzenetére
Az exit for - t kiveszem
Van egy kulon sor, a letoltes parancs utolso sora, ami el is nevezi rogton a friss munkalapot valami_a_46 ra
Csak a kovetkezo torles pont a frissen letoltott tabot torli minden mast nem, nekem pedig forditva kene - csak a friss, uj worksheet maradjon meg, minden mas kuka
-
Kobe
veterán
szaisztok
VBA kóddal lenne egy kis gondom.
Van egy sharepoint eltöltős makróm, és azt szeretném, ha az Excel fileban - tartalomtól, worksheetek számától stb függetlenül, a legvégén mindig cska az a 2 worksheet (2 riport) maradna, amit én töltök leEz egy heti riport, a worksheetek elnevezése a makró által a ehtek számával egyenlő
Weeknaming = Format(Date, "ww")
a letöltés előtt megvizsgálom, hogy a fileban van e már ilyen elnevezésű worksheet, ha igen, kitörlöm és az új letöltés újra létrheozza friss adatokkal:
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Valami_A_" & Weeknaming Then
worksheetexists = True
Application.DisplayAlerts = False
'Worksheets.Add
Worksheets("Valami_A_Week_" & Weeknaming).Delete
Exit For
End If
Next ijön a letöltés, ez utolsó lépésként létrehoz egy új worksheetet és a végén elnevezi a fenti logika szerint:
ActiveSheet.Name = "Valami_A_" & Weeknaming
+ a program legvégén még ráeresztek egy biztonsági ellenőrzést, végignézi az összes worksheetet a neve alapján és ahol a név nem a megadott dátumfomátum szerint megy, azt törölje ki:
For i = 1 To Worksheets.Count
If Worksheets(i).Name <> "Valami_A_" & Format(Date, "ww") Then
worksheetexists = True
Application.DisplayAlerts = False
Worksheets(i).Delete
Exit For
End If
Next iViszont a legutolsó része nem működik, valamiért ilyen Sheet1, Sheet10, stb nevű worksheeteket simán benne hagy. Illetve pont fordítva működik, csak azt törli ki ahol a WS neve Valami_A_Week 46 volt pl, a többit nem
Mit írtam el hozzá ?
-
Kobe
veterán
válasz
Delila_1 #28846 üzenetére
szia
koszi szepen, majdnem tokeletes
ezzel ugye annyi darab uj sheetet hoz letre, ahany sor van. De ha en azt szeretnem, hogy uj, teljesen ures sheetek helyett egy mar meglevo sheetet (nevezzuk Template nek) masoljon le annyiszor, ahany darab van, es azokra illessze be az adatokat, mit kellene hozza atirni? -
Kobe
veterán
válasz
Fferi50 #28843 üzenetére
Hello
A celcella minden sheeten ugyanaz. Az igazi fejtores az, hogy elore nem tudom megmondani hany sor lesz a tablaban, ebbol kifolyolag hany sheetet kell letrehozni,es hanyszor kell majd masolni - a szamozott sheetekkel ezert nem erdemes vegigzongorazni, ill nem is lehet.
Valahogy a sorok szama alapjan szeretnem dinamizalni,hogymindig annyiszor masoljon ahany sor van.Eddig for each el ill do untillal probaltam sikertelen. Biztos megoldhato csak az en skillem keves meg
-
Kobe
veterán
sziasztok
ujfent egy kis vba-s help kene. Egy reszet mar megoldottam.
Van egy workbookom, amiben a Sheet1 en vannak az alapadatok egy tablazat formajaban. Pl 10 oszlop, headerrel ellatva, valtozo szamu sorral.
Van egy alap templatem is a fileban. A makro ezt az alap templatet lekopizza ahanyszor, ahany sor Sheet1 en van.
Tehat van pl 12 sorom Sheet 1en, es van hozza 12db masik sheetem.
Szeretnem a makrot boviteni, hogy az alap tablambol a masodik sor tartalmat a masodik sheet megadott cellaiba tudnam masolni, a harmadik sort a harmadik sheetre, es igy tovabb ahany darab sor van.
Mivel valtozo szamu sorom lesz, ezert mindenkepp dinamizalva szeretnem (most 12, holnap lehet 15), illetve a annyi kulonbseg van az alapadat sheet es a target sheet kozott, hogy elobbiben sorokban vannak az adatok, utobbin pedig kulonbozo helyekre menne - igy szeretnem lehetoleg en megadni hogy pl az A oszlop tartalmat milyen cellaba iranyitsa at a sheeteken.
Pl Sheet1 / A2 -> Sheet2 / B3
Sheet1 / A3 -> Sheet3 / B3
Sheet1 / A4 -> Sheet4 / B3ilyen problemaval talalkozott mar valaki ? probaltam neten valami sample makrot keresni, de ilyen jellegut sehol nem talaltam sajna
-
Kobe
veterán
válasz
szatocs1981 #28830 üzenetére
Elfelejtettem bekopizni, benne van az a sor is....de ettol a type mismatch fennall.
Delila: mukodik, koszi....kicsit kezdek mar belegajdulni, kiszurhattam volna a hulyeseget
-
Kobe
veterán
sziasztok
ujfent 2 vba-s kerdes
az egyik: van egy oszlopom, amiben 2 fajta ertek van (Szoveg1, Szoveg2). A mellette levo oszlopba szeretnek egy if fuggvennyel beirni egy erteket, ha pl D2 = Szoveg1 akkor E2=1, ha D2=Szoveg2, akkor E2=2
megcsinaltam VBA-val, de valamiert Type mismatch hibara fut
last = Cells.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
For i = 2 To last
If Range("D2:D" & last) = "EDE" Then Range("E2:E" & last) = "2" Else Range("E2:E" & last) = "1"
Next iitt mi lehet a problem? Type mismatch valoszinu valami formatum nemegyezosegbol johet, ezert egy masik paranccsal probaltam elotte a D oszlop tartalmat szovegge formazni
Range("D2:D" & j).NumberFormat = "@"
de igy sem mukodott. Tipp, hogy mi lehet meg ?
illetve a nagyobb lelegzetvetelu dolog. Amennyiben megvan a kesz, formazott tablazatom, egy masik worksheeten van egy urlapom
Azt szeretnem, ha a makro a tablazat midnen soraval feltoltene az urlapot, es elmentene egy kulon tabra.Szoval ha van 10 db sorom a tablazatban, akkor 10 tabon kulon letrehozna 1-1 urlapot neki, es a tablaban adott sorban tarolt adatokkal kitoltene.
Pl 1es sor, elso urlap feltoltve, 2es sor masodik tab urlapja, stb
erre valakinek otlete ?
-
Kobe
veterán
-
Kobe
veterán
sziasztok
van egy tablazatom, amiben az adatok kb igy neznek ki, az elso oszlopban ugyanilyen sorrendben szerepelnek
Buda
E1
E2
E3
E4
...
E128
Pest
E1
E2
E3
...
E48
Erd
E1
E2
E3
...
E12Azt szeretnem megcsinalni, hogy a B oszlopot toltse fel a Buda, Pest ill Erd szavakkal, nyilvan azoknal a teteleknel ahol Buda alatt szerepelt, ott Buda, utana valtson at Pestre es amig az erdi tetelek listaja nem jon Pestet, utana erdet irjon ki
ezt milyen formulaval tudnam megtenni ?
Legjobb lenne vmi VBA-s nyelvezetben megragadni igazabol
koszi
-
Kobe
veterán
sziasztok
VBA-val kapcsoaltban kellene kis help
Egy makroval szeretnek megnyitni egy filet - ez egy SAP-bol letoltott sima local file, text tab delimited ("Text with columns" formatum, ha ez tobbet mond).
Olyan modon szeretnem megnyitni, hogy a user tallozza ki magat a nyersfilet a sajatgeperol (tehat nem en adom meg az eleresi utvonalat), azonban egy kicsit bajban vagyok a formatumokkal.A tallozas resze megy is, de a kod nem kepes a text tab delimited filet megnyitni, hiaba jatszottam a formatumokkal / filetipusokka, minding type mismatch hibara fut az If feltetelnel:Sub FormatRawDownload()
Dim strFileToOpen As String
MsgBox "Please select the downloaded raw report to open"
strFileToOpen = Application.GetOpenFilename _
(Title:="Please select the downloaded raw report to open", _
FileFilter:="Excel Files *.xls* (*.xls*),")
'FileFilter:="Text Files *.txt* (*.txt*),")
If strFileToOpen = False Then
MsgBox "No file selected.", vbExclamation, "Sorry!"
Exit Sub
Else
Workbooks.Open Filename:=strFileToOpen
End If
End Submit kellene hegeszteni rajta ?
-
Kobe
veterán
Hello
Egy kicsit valtoztak az igenyek sajna :S Tehat adott az alabbihoz hasonlo tabla, van egy flotta azonosito, illetve a flottan belul vannak rendszamok.
- 1 flottan belul legalabb 1 rendszam van
- 1 flottan belul maximum 2 rendszam van, egyik kisebb, masik nagyobb erteku, am a szamozas vege nem feltetlenul numerikusan koveti egymast (tehat a 01 utan nem feltetlen 02 jon, hanem 04 pl)
- a legnagyobb ill legkisebb rendszamra vonatkozo adatokat eddig kulon sorokban taroltuk le
- a sorok szama valtozo, heti jelentesrol leven szoEzt szeretnem egy kicsit makroval megtrukkozni, ugy hogy
- az egy flottakhoz tartozo adatokat egy sorban mutassa, kulon sorok helyett. Igazabol a legkisebb rendszamu sorbol nekem csak a rendszam es csak az egyik datum oszlop kellene:
- abba a sorba, ahol az adott flottan belul a legnagyobb a rendszam, egy uj oszlopba masolja be a legkisebb rendszam erteket, illetve amelle egy masik oszlopba a datumot
- majd pedig torolje ki azt a sort, amiben a legkisebb rendszam volt letarolva
- ez a rutin fusson vegig a valtozo szamu sor osszes soranEzt meg lehet valahogy oldani makroval ?
Flotta Rendszam Datum 1 Datum 2 Datum 3 Calculated
123456 12345601 1/1/2014 1/28/2014 1/29/2014
123456 12345604 1/1/2014 1/18/2014 1/31/2014
123457 12345701 1/1/2014 1/28/2014 1/29/2014
123458 12345802 1/1/2014 1/18/2014 1/31/2014
123459 12345901 1/5/2014 1/7/2014 1/19/2014
123459 12345902 1/1/2014 1/28/2014 1/29/2014 -
Kobe
veterán
hello
egy kis segitseg kellene, valami intelligens lookup figgvenyre lenne szuksegem, amit makroba is eleg konnyu implementalni.
Adott egy lista, sok szaz sorral, par alapveto oszloppal.
Flotta Rendszam Datum 1 Datum 2 Datum 3 Calculated
123456 12345601 1/1/2014 1/28/2014 1/29/2014
123456 12345604 1/1/2014 1/18/2014 1/31/2014
123456 12345603 1/5/2014 1/7/2014 1/19/2014
123457 12345701 1/1/2014 1/28/2014 1/29/2014
123458 12345802 1/1/2014 1/18/2014 1/31/2014
123459 12345901 1/5/2014 1/7/2014 1/19/2014
123459 12345902 1/1/2014 1/28/2014 1/29/2014
123459 12345904 1/1/2014 1/18/2014 1/31/2014Egy olyan fuggvenyre lenne szuksegem, amivel az excel kepes eldonteni, hogy az 1 flottahoz tartozo kocsik kozul melyiknek a legmagasabb a rendszama. Erre azert lenne szuksegem, mert a legmagasabb rendszammal rendelkezo kocsiknal pl a calculated mezobe a Datum 3 - Datum 2 kulonbsege kell keruljon, az annal kisebb rendszamunal meg Datum 3 - Datum 1 lenne a keplet.
Vagyis pl azon sorok kozott, ahol a Flotta = 123456, nezze meg, melyik az a sor ahol a rendszam oszlopban a elgmagasabb ertek van
Ezt az osszehasonlitast csak es kizarolag az egy flottahoz tartozo sorok kozotti adatokra kellene elvegezni, kicsit bonyolitja, hogy vannak olyan flottak is amiben csak 1 kocsi van, ergo a rendszam oszlopban elvo 1etlen ertek egyben a legnagyobb is.
azt gondolom, hogy a calculated mezobe hogy milyen kivonast vegezzen, egy sima IF fuggvennyel beirhato, kerdes csak a feltetelt hogyan lehet igy megadni, hogy az az osszehasonlitas legyen.
-
Kobe
veterán
sajna nem szazas az atirat, az egesz makro ezzel a megoldassal Type mismatch errora fut
-
Kobe
veterán
A B oszlopban egy kalkulált dátum van mm/dd/yyyy formátumban, illetve van ahol egy szöveg, amit bizonyos sorokra a dátum helyett ír be a makró (XYZ) más feltételek alapján. Az lenne a lényeg, hogy törölje azokat a sorokat, ahol valami XYZ től eltérő szöveges érték, vagy a (mai nap + X) dátumon túli dátum van benne.
Mivel egy elég komplex makróról van szó, gyanítom akkor elég sok helyen át kell írni ezeket. Van egy menü, egy űrlap, ahol a user beadja az X értékét, úgy emlékszem ott is annak a rublikának az értéke
Format(Now + Menu.TextBoxDaysAfter.Value, "mm/dd/yyyy")
ként van definiálva, akkor ott is át kéne írni date diffre ?
-
Kobe
veterán
sziasztok
kellene egy kis segitseg, egy makro debuggolasaban. Van egy egesz komplex makro, ami 4 kulonbozo dokumentumot megformaz, csinall belole egy filet, elmenti amolyan backup copykent ezt a nyersvaltozatot, majd tovabb porogve a makro ezen az aggregalt nyersfileon vegez formazast.
A formazas egyik lepese az, hogy a felesleges sorokat kitorli. Felesleges sorok azok, ahol a datum a user altal az urlapon meghatarozott idointervallumon kivul esik.
Pl a user azt mondja, hogy a kovetkezo X napra esedekes teteleket szeretne latni. Ilyenkor a makro egyik funkcioja megvizsgalja, a tablaban levo datum kisebb-e mint (mai nap + X), es ha a feltetel teljesul, torli azt a sort / rekordot a tablabol.
Sajnos valamilyen problema miatt a makro jelenleg keptelen kezelni az evvaltast, ha pl olyan teteleket kellene filterelni, ahol a datum mar jovo ev januar 1 re vagy az utan esik, akkor rengeteg potencialis tetelt kitorol.
Ha ezt a reszletet a makronak mai nap (dec 18) + 13 napra futtatom, jot mutat, ha mai nap + 14 re, akkor rosszat, kevesebb rekord marad az eredmeny listan mint kellene:
If Menu.CheckBoxDateRangeFilter.Value = True Then
lastrow = Cells.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Range("B2").Select
Do Until ActiveCell.Row > lastrow
If Range("B" & ActiveCell.Row).Value <> "" And Range("B" & ActiveCell.Row).Value <> "XYZ" And Format(Range("B" & ActiveCell.Row).Value, "mm/dd/yyyy") > Format(Now + Menu.TextBoxDaysAfter.Value, "mm/dd/yyyy") Then
Rows(ActiveCell.Row).Delete
lastrow = lastrow - 1
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End IfHa ezt a reszet kihaygom a futtatasbol, a tobbi formazos resz tokeletesen elfut. A menuben / urlapon gyakorlatilag ugyanez a formatum lett definialva a cellanak, tehat nem 2 kulonbozo formatum akad ossze.
Otlet, mi okozhatja ezt ? -
Kobe
veterán
ugy tunik nagyon peches formam van az excellel.....amint megoldom az egyik problemat, jon vele a masik...
Most a valtozatossag kedveert Runtime error 1004.
A koncepcio: van 2 db, strukturajaban es mukodeseben teljesen azonos adatbazisom, csak amsfajta adatok vannak benne nyilvantartva. Mindegyikben ugyanazok a makrok vannak, ugyanugy mukodnek. Hetente kapok 1 excel filet amiben olyan adatok vannak, amiket a 2 adatbazisbol ki tudok halaszni. Az elkepzelt folyamat az lenne, hogy egyik user megnyitja a sajat access adatbazisat, lefuttatja a makrot, ami automatikusan kiszedi es bemasolja az excel fileba az o teteleire vonatkozo adatokat.
Majd user2 fogja a masik adatbazisat, ugyanugy futtat belole egy makrot, ami ugyanabba a fileba a masik tetelekhez bemasolja ugyanazokat az adatokat.
Vagyis 1 fileon szeretnek egymas utan 2 ugyanolyan makrot futtatni ( a subok neve termeszetesen mas, igy nem akadnak ossze). A makro maga beszur egy uj modult az excel fileba, beilleszti a Sub szoveget es lefuttatja.
A problema az, hogy nem tudom egymas utan lefuttatni mind a ket makrot, a masodik (tokmindegy melyik adatbazisbol futtatom elsonek), a masodik mindig Runtime error 1004 hibara fut ennel a sornal:
Set xlmodule = xlbook.VBProject.VBComponents.Add(1) 'vbext_ct_StdModule
vagyis az uj, masodik modult nem tudja hozzaadni az excel filehoz. Ami fura, hogy neha meg szokott mukodni, csak nem tudtam rajonni a semara. Szerintetek mi okozhatja ezt altalanossagban ? miert nem tud uj modult berakni egy mar leteze fileba, amikor egy ugyanolyan makro mar meg tudta csinalni ?
-
Kobe
veterán
válasz
Delila_1 #17970 üzenetére
köszi, ez így működik is
viszont a macskakaparás jelekkel megint gondban vagyok
a fenti képletet egy stringben definiáltam:
Code = Code & bla bla bla
Code = Code & "ActiveCell.FormulaR1C1= ""=RC[1]&"""-"""&RIGHT("""000"""&RC[2],3)""" & vbNewLinesajna valahol félrecsúsztak a macskakaparás jelek, és a VBA Expected end of statement üzenetet dob, de nekem minden idézőjel páros "rendben lezártnak" tűnik.
Any guess, hol typoztam el ?
-
Kobe
veterán
sziasztok
remélhetőleg a legutolsó kérdésemmel fordulok hozzátok a jelenlegi makró kapcsán
egy kis formázásbeli problémám lenne. Van 2 fileom, mindkettőben van egy oszlop, amiben 1-999-ig van egy azonosítószám. A két fileban sajna eltérő a formátum, és a vlookup nem igazán tudja kezelni. az egyikben a 13-as pl simán 13 nak van írva, a másikban 013-nak (nem, nem csak a formátuma ilyen, a cellába írt érték maga is 013 ként jelenik meg).
Gondoltam ahol simán 13nak írja, beállítok egy custom formátumot, 000 formában, szépen viszsa is írja a 013 at, de ugye ez csak egy "vizuális" formázás, a cellába írt érték ugyanúgy 13 marad. Nincs valami tippetek hogy tudnám a cellába írt értéket is egy formázással megváltoztatni ?
azért lenne szükségem rá, mert egy komplex azonosítót akarok kreálni, amivel vlookupozok. összefűzöm pl a Városnév-irányítószám kombinációt, és arra keresek. De ugye a különböző formátumok miatt az egyik fileban ez az azonosító így néz ki: Kistarcsa-023 , míg a másikban Kistarcsa-23 , és a vlookup nem talál egyezőséget
-
Kobe
veterán
válasz
Delila_1 #17884 üzenetére
Igen de sok vba ban megirt vlookupnal elojon ez a hiba, eleg sok eset van neten errol. Gyakorlatilag az excel valamiert ugy erzekeli h a megadott munkafuzet nincs megnyitva ezert mar ertekadasnal nem tud hivatkozni ra, viszont ez hulyeseg, ott virit mellette a masik munkafuzet
-
Kobe
veterán
válasz
Delila_1 #17879 üzenetére
Gyak ugyanazt csinaltam, mint amit te is mutattal a kodban, kicsit aktualizaltam a fileneveket de a valtozokhoz nem nyultam. Igazabol utananeztem neten es nagyon gyakran elojon ez a hiba vba s vlookupnal, csak epp mindig mas indokkal...igy eleg nehez sajna megoldast googlizni ra
-
Kobe
veterán
válasz
Delila_1 #17867 üzenetére
köszi
igazából pont fordítva megy, de az nem gáz, csak meg kell cserélni hogy melyik excel filet adod meg a WS változóban.
Egész pontosan úgy megy, hogy van a temporary.xls nevű file (ez egy adatbázis letöltés, access hozza létre és először ezt nyitja meg), és van a test.xls. A temporary.xls-ből szeretnék adatokat másolni a test.xls-be, de a többi úgy megy, ahogy leírtad - a test.xls INT nevű lapján az AB oszlopban található azonosítót keresem a temporary.xls ben, és a test.xls/INT lap T oszlopára írom vissza az értéket.
Viszont a makró nem tudom miért, de ennél a sornál elakad (ez az amit már átírtam, hogy a másik filera hivatkozzon):
Set WS = Workbooks("temporary.xls").Worksheets("Report")
gondoltam hogy nem találja a filet, ezért próbáltam a teljes hivatkozást berakni a filehoz így:
Set WS = Workbooks("C:/Users/Desktop/database test/test.xls").Worksheets("Report")
de sajnos ez esetben sem működött. Az excel azt írja hogy Run-time error 9: Subscript out of range
-
Kobe
veterán
válasz
Delila_1 #17863 üzenetére
valszeg valamit elrontottam a ctrl c ctrl v nél
Cells(sor, "X") & "-" & Round(Cells(sor, "W"), 0)
erre van emgadva az érték, de így nem működik. Igazából az érdekelne, hogy a VLOOKUP os részt hogyan kellene átírni ahhoz, hogy ugyanúgy működjön, mint a korábbi concatenates subod, hogy csak azokra a sorokra leressen rá, ahol az eredeti concatenates sub is
-
Kobe
veterán
válasz
Delila_1 #17724 üzenetére
helló
arra esetleg van valamilyen tipped, hogy a későbbiekben hogy lehetne dinamikusan azokra a cellákra hivatkozni pl VLOOKUP függvényben, amiket ez a sub amit mutattál kitöltött ?
Kicsit részletesebben: van ugye egy változó sorú adattábla ahol az egyik oszlopban Hazai vagy Külföldi van írva. Ez a sub kitölt egy oszlopot a Hazai sorokra. Ezt a "Hazai" sorokra visszakapott értéket én egy azonosítónak szánom, és egy vlookup függvénnyel egy másik fileból az ehhez tartozó plusz információkat szeretném bemásolni vele.
Az egyetlen gondom az, mint ami az eredeti subnál is volt: csak azokba a sorokba szeretnék beíratni valamit ahol az X oszlopban "hazai" volt, tehát valahogy dinamikusan szeretnék hivatkozni a VLOOKUP függvényben az Y oszlop kitöltött soraira.
Próbáltam úgy, hogy definiálok egy változót, tovább folytatva a te Subodat. Alul a konkrét kód, a hivatkozások és oszlopok kicsit mások lehetnek benne, mert ez már a végleges változat ami fut.
ez gyakorlatilag ugyanaz, mint amit te írtál, és klasszul működik: ehhez akarom majd hozzáépíteni a Vlookupot
Dim lnglastrow as Long
Dim lnglastrow2 as Long
lnglastrow2=Range("L"&Rows.Coun).End(xlUp).Row
For lnglastrow=2 to lnglastrow2
If Cells(lnglastrow,"R")="Hazai" then Cells(lnglastrow,"AB")=Cells(lnglastrow,"O")&"-"&Round(Cells(lnglastrow,"L"),0)
Nexta Vlookupot próbáltam így hhozzáépíteni:
Dim IDNUMBER as Long
IDNUMBER= Cells(lnglastrow,"AB")=Cells(lnglastrow,"O")&"-"&Round(Cells(lnglastrow,"L"),0)
For lnglastrow=2 to lnglastrow2
If Cells(lnglastrow,"R")="Hazai" then Cells(lnglastrow,"T")= "=VLOOKUP(IDNUMBER,'C:/test/[test.xls]INT'!$A$1:$P$65536,5,FALSE)"
Nexta Vlookup rendben le is fut, azonban az eredménycellákba csak ?#NAME hibaüziket ír vissza, mert rosszul hivatkoztam az IDNUMBER változóra. Ha az IDNUMBER-t manuálisan kicserélem pl AB1-re, akkor már a jó értéket írja vissza az eredménycellába.
Tudnátok segíteni mit kellene updatelnem ?
-
Kobe
veterán
válasz
Fire/SOUL/CD #17857 üzenetére
A belinkelt kod egy valos kod resze. Annyi a csavar a dologban hogy azt a codeot egy access adatbazis hozza letre az excel fileban. Mivel a kod ilyenfajta excel automatizmuson keresztul "szuletik", az excel fileban alapjaraton a Module1 VBA kodlapjara kerul beillesztesre, ahonnan perpillanat meg nem tud sikeresen lefutni mert az excel fileban tobb munkalap van, es a kodban nincs munkalap hivatkozas,igy az excel nem tudja eldonteni pontosan melyik munkalapon kene futtatni.
nem szeretnem az egesz kodot atirni, mert baromi sok sor es eleg macera minden hivatkozas ele meg egy munkalap hivatkozast is betenni. Szeretnem valahogy a Private sub utan determnalni, hogy a kod tovabbi resze csak es kizarolag az INT munkalap tartalmara fusson le. Az eredeti if feltetel igy kicsit pontatlan volt: nem azt szeretnem, hogy akkor fusson le ha van INT nevu munkalap a fileban, hanem azt, hogy a kod maga az INT nevu munkalapon fusson le
-
Kobe
veterán
válasz
Fire/SOUL/CD #17855 üzenetére
igen valami hasonlóra gondoltam, de ez nem definiálja, hogy a kód maradék része azon a munkalapon fusson le. Vagy igen ?
-
Kobe
veterán
na sziasztok
végre hosszas szenvedés után sikerült egy olyan keretet írni accessben az excel makrónak, ami képes egy modulet rendesen beszúrni, abba a kódot illeszteniés futtatni, valamint a végén a memóriát is kitakarítja utána.
Az egyetlen problémám az, hogy ezt a kódot ugye Module- ra illeszti be, viszont nekem a makrót mindig egy adott worksheeten kell futtatni - no problem, megfelelő hivatkozással a Sheet-re megoldható a moduleról is, de mivel a végleges makró maga elég hosszú lesz, nem szeretnék minden hivatkozást pl Activeworkbook.Worksheet("Sheet1").Range....bla bla bla formátumra átírni - nem túl elegáns, meg sajnos nem is működne, mert:
a munkalap neve mindig INT a fileban amin a makrót futtatni szeretném, viszont a visualbasices neve változhat: mivel a file manuálisan van összerakva, így a user lehet az adatokat a Sheet1-re, máskor a Sheet2-re rakja, viszont a Sheetet magát mindig INT-re nevezi át. Ezt a problémát orvosolandó, gondoltam már a Sub legelején definiálni kéne valahogy, hogy a további része csak az INT munkalapra fusson le
Pl egy if függvénnyel, if munkalap neve = INT, lefut a makró, else nem fut le
valaki tudna segíteni, hogy lehet ezt a feltételt pontosan megírni VBA ban ?
az alábbi kód elejére kellene beilleszteni
Private Sub MyMacro()
Dim lngLastRow
lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
Columns("X:X").Select
Selection.Insert Shift:=xlToRight
Range("X1").Select
ActiveCell.FormulaR1C1 = "common_id"
Range("X2").Select
.
.
.
.
End Sub -
Kobe
veterán
hat ez valami kibaxott nagy access issue lesz, vagy nem tudom
Kiprobaltam mindent amit leirtal, vegigbogarasztam a teljes CPearson fele VBA programming szekciot, gyakorlatilag mindenhol ugyanezt a emgoldast hasznaljak, amit te is mutattal, nalam ez is errorra fut. Minden valtozo definialva van rendesen, ennel a linenal viszont errorra fut :
Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)
mondvan a vbext_ct_StdModule nincs definialva mint valtozo, ami tok erdekes mivel ugye ez standard VBA komponens es kulon definialas nelkul is mennie kene...
-
Kobe
veterán
hello mester
köszi a tippeket mint mindig
igen, próbálkoztam azzal, hogy átírom így, ahogy te is javasoltad:
LineNum = .CreateEventProc("Open", "Workbook")
de ilyenkor valamiért összeakadt a kód többi sorával - általában elakadt ennél a sornál, és accessben egy "Event handler is invalid" hibaüzenetet kaptam.
Igazából az lenne a cél, hogy az adott makró csak 1 fusson le, és többször ne, gondolom akkor ez az If amit írtál, azt csinálja hogy csak akkor futtatja, ha A1 üres, ha bármilyen érték van benne, akkor már nem fut le. Ez tök jó lenne, mert A1 általában mindig ki van töltve, csak amint átakarnám írni Open eventprocedurre a dolgot, onnantól kezdve borul a bili
pedig van egy hasonló makró ami létrehoz és emgformáz egy táblázatot excelben, az ugyanezzel a kóddal perfektül működik. Nem tudom, hogy az xls tartalmának lehet e közze hozzá, ez a file amit használni akarok annyiban komplikáltabb hogy általában 3 munkalap van rajta:
Sheet1 (INT)
Sheet2 (excl INT)
Sheet3 (All)én igazából ezt a makrót mindig csak az INT nevű munkalapon szeretném futtatni, gondolom akkor ezt valahogy a Code = Code & .... részben definiálni kellene
-
Kobe
veterán
na, 1 kicsit hegesztettem a kódon 1-2 apróságot, így ebben a formában már sikerült elérnem hogy az Excel VBA-jába a Sheet 1 -re Private Sub / End Sub közé teszi be a Code3 tartalmát.
Az egyetlen gondom az, hogy a sub nem fut le automatikusan, pedig jó lenne ha azt beinsertálás után automatikusan futtatná is.
Van tippetek mit kellene hozzáadni, változtatni hogy az is menjen ?
Function OpenformatSWP()
Dim objexcel As Object
Dim objworkbook As Object
Dim CodeMod As Object
Dim LineNum As Long
Dim Code3 As String
Dim destination2 As String
destination2 = "C:\Access programmer\test.xls"
Set objexcel = CreateObject("Excel.Application")
objexcel.Visible = True
objexcel.DisplayAlerts = False
Set objworkbook = objexcel.Workbooks.Open(destination2)
'Set CodeMod = objworkbook.VBProject.VBComponents("Sheet1").CodeModule
Set CodeMod = objworkbook.VBProject.VBComponents("Ark1").CodeModule
Code3 = ""
Code3 = Code3 & " Dim lngLastRow" & vbNewLine
Code3 = Code3 & " lngLastRow = Cells(Rows.Count, ""A"").End(xlUp).Row" & vbNewLine
Code3 = Code3 & " Columns(""X:X"").Select" & vbNewLine
Code3 = Code3 & " Selection.Insert Shift:=xlToRight" & vbNewLine & vbNewLine
Code3 = Code3 & " Range(""X1"").Select" & vbNewLine
Code3 = Code3 & " ActiveCell.FormulaR1C1 = ""common_id""" & vbNewLine & vbNewLine
Code3 = Code3 & " Range(""X2"").Select" & vbNewLine
With CodeMod
LineNum = .CreateEventProc("Change", "Worksheet")
' .VBE.MainWindow.Visible = False
LineNum = LineNum + 1
.InsertLines LineNum, Code3
End With
objworkbook.Save
objworkbook.Close
'reopen Excel to run autostart
objexcel.Workbooks.Open (destination2)
End Function -
Kobe
veterán
A code3 nevu beillesztett kod tartalmatol fuggetlenul mindig ugyanazzal a hibaval fut le, es Sub / End sub okat mindig kulon rakja be, eloszor a kod majd utana a sub/ end sub, es accessben elakad a korabban irt sornal
amit baromira nem ertek hogy van egy ugyanilyen makrom, az egy excelbe importalt adatlistan hajt vegre muveletet ott tokeletesen mukodik, itt meg hogy egy elore letrehozott filbe akarom, nem megy
-
Kobe
veterán
mivel ugyanaddig a sorig jut el a makró, ezért ugyanúgy néz ki:
ezt rakja be visual basicbe:
Dim lngLastRow
lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
Columns("X:X").Select
Selection.Insert Shift:=xlToRight
Range("X1").Select
ActiveCell.FormulaR1C1 = "common_id"
Range("X2").SelectEzt meg hozzácsapja alulra:
Private Sub Worksheet_Change(ByVal Target As Range)
End SubAz access meg runtime error 40063 at dob
-
-
Kobe
veterán
helló
köszi a tippet, így működik
Viszont az egyik makróm továbbra sem akar tökéletesen funkcionálni:
Function OpenformatSWP()
Dim objexcel As Object
Dim objworkbook As Object
Dim CodeMod As Object
Dim LineNum2 As Long
Dim Code3 As String
Const DQUOTE = """" ' one " character
Dim destination2 As String
destination2 = "C:\Users\test\swp\test.xls"
Set objexcel = CreateObject("Excel.Application")
objexcel.Visible = True
objexcel.DisplayAlerts = False
Set objworkbook = objexcel.Workbooks.Open(destination2)
Set CodeMod = objworkbook.VBProject.VBComponents("Sheet1").CodeModule
Code3 = ""
Code3 = Code3 & " Dim lngLastRow" & vbNewLine
Code3 = Code3 & " lngLastRow = Cells(Rows.Count, ""A"").End(xlUp).Row" & vbNewLine
Code3 = Code3 & " Columns(""X:X"").Select" & vbNewLine
Code3 = Code3 & " Selection.Insert Shift:=xlToRight" & vbNewLine & vbNewLine
Code3 = Code3 & " Range(""X1"").Select" & vbNewLine
Code3 = Code3 & " ActiveCell.FormulaR1C1 = ""common_id""" & vbNewLine & vbNewLine
Code3 = Code3 & " Range(""X2"").Select" & vbNewLine
With CodeMod
LineNum2 = .CreateEventProc("Change", "Worksheet")
LineNum2 = .VBE.MainWindow.Visible = False
LineNum2 = LineNum2 + 1
.InsertLines LineNum2, Code3
End With
objworkbook.Save
objworkbook.close
'reopen Excel to run autostart
objexcel.Workbooks.Open (destination2)
End Functionezt a functiont futtatom accessből, és az volna a cél, hogy a test.xls file első munkalapjára beszúrjon és futtasson egy kódot.
Perpillanat accessben Runtime error 40063 as hibával leáll a makró ennél a sornál:
LineNum2 = .CreateEventProc("Change", "Worksheet")
Az excel fileban is elég érdekes az eredmény, a Code3 ként definiált kódot egyszerűen nem a Sub / End Sub közé szúrja be, hanem elé. Sorról sorra így néz ki az Excelben megjelenő kód:
Dim lngLastRow
lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
Columns("X:X").Select
Selection.Insert Shift:=xlToRight
Range("X1").Select
ActiveCell.FormulaR1C1 = "common_id"
Range("X2").Select
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub -
Kobe
veterán
hello
van egy ilyen kodom, de sajnos az idezojelekkel gondba vagyok, a kod maga sztem jo csak az idezojelekkel csusztam el
Code2 = ""
Code2 = Code2 & " Dim lngLastRow" & vbNewLine
Code2 = Code2 & " lngLastRow = Cells(Rows.Count, ""A"").End(xlUp).Row" & vbNewLine
Code2 = Code2 & " Columns(""A:A"").Select" & vbNewLine
Code2 = Code2 & " Selection.Insert Shift:=xlToRight" & vbNewLine & vbNewLine
Code2 = Code2 & " Range(""A1"").Select" & vbNewLine
Code2 = Code2 & " ActiveCell.FormulaR1C1 = ""common_id""" & vbNewLine & vbNewLine
Code2 = Code2 & " Range(""A2"").Select" & vbNewLine
Code2 = Code2 & " ActiveCell.FormulaR1C1= ""=CONCATENATE(RC[2],""" - """,ROUND(RC[9],0))""" & vbNewLinea legutolso sornal elakad a makro, azert van igy Code2 valtozokent definialva mert a makrot access bol futtatom es onnan szurom be az excel fileba. A legutolso sorig rendbe lefut, letrehozza az uj oszlopot, elnevezi stb, viszont a concatenates fuggvenyt nem tudja kezelni, vmi gaz van az idezojelekkel.
valaki at tudna nezni ?
-
Kobe
veterán
válasz
Delila_1 #17718 üzenetére
ez egy rendesen kitöltött táblázat, mindig ugyanaz a fejléc van az első sorban benne, a makró célja pedig hogy egyik excel fileból (ami adatbázisból ered), a másikba másoljak egy egy sorhoz fűzött kommenteket, adatokat
A-AB oszlopokig vannak megcímezve a fejléc cellái, a file "eredeti" állapotban csak A-X oszlopokban tartalmazza az adatokat folyamatosan, plusz ugye X-AB ig ures cellákat, ezekbe kellene majd makróval hozzáilleszteni az adatokat VLOOKUPPAL
A-X oszlopokban minden folyamatosan van kitöltve, egyedül a sorok száma változik, de minden oszlop ki van töltve.
A makró úgy indul, hogy Y oszlop elé beszúr egy új oszlopot, és ott CONCATENATE tel létrehozza az azonosítót, ami alapján másik fileból behúzza az adatokat Z-AB oszlopokba.
az Y2 es cella tehát így nézne ki: =CONCATENATE(X2,"-",ROUND(W2,0)) de ezt csak azokra a cellákra kellene beillesztenie, ahol X2="Hazai"
Mint írtam az IF nem igazán jó megoldás itt, illetve dinamizálni kellene valahogy, hogy mindig X2-Xn számú sort nézzen át
-
Kobe
veterán
válasz
Delila_1 #17716 üzenetére
Koszi de nekem vba ban kellene es nem sima fuggvennyel megoldva, anyway az if csak 1 cellara vizsgalja a tartalmat, nekem megy valtozo sor szamu dinamikus listam van, mint irtam. Es az a baj, hogy nincs else statementem, mert nem kell, en azt szeretnem hogy a "kulfoldi" sorok cellait teljes mertekben hagyja beken, ne csinaljon vele semmit (azokat egy masik makro toltene fel)
a makronak automatikusan vegig kellene mennie az osszes soron es magatol beirni minden cellaba ahol hazai van
-
Kobe
veterán
Hali
Egy kis tanacs kellene, van egy tablazat, ahol az X oszlopban 2 fele ertek van megadva (hazai vagy kulfoldi)
az Y oszloban pedig egy fuggveny lenne , concatenattel irnek vissza egy erteketAzt szeretnem megoldani, hogy az Y oszlopban csak azokra a tetelekre szamitson concatenattel az excel barmit is, ahol X oszlopban "hazai" van. Erre tudna valaki egy VBA mintakodot mutatni ? Annyi csavar vaan benne hogy a sorok szama mindig valtozik a tablazatban tehat azt is bele kene kalkulalni hogy a hazai teteleket mindig A1-tol n ig keresse
-
Kobe
veterán
köszi, megnézem ezt is
közben felvetnék még egy kis makró tervezést, amolyan elméleti síkon ki hogy csinálná. Tehát az alapszitu:
Adott 2 excel tábla, ami nagyon hasonló adatokat tartalmaz, az oszlopok olyan 60%-ban megegyeznek. Mind a két fileban a tételeket kommentálni kell, az egyikben már alapból benne vannak ezek. Az egyik tételhez tartozó kommenteket szeretném átmásolni a másik fileba, hogy ne manuálisan kelljen, időt spórolva. Ezt a következő lépésekben gondoltam megvalósítani a makróval, csak érdekelne szerintetek mennyire életképes:
1. adatbázisból kiexportálni a tételeket - gyak létrehozni a Workbook1-et, egy megadott hálózati mappában, adott néven - ez csak egy ideiglenes file lenne, amit a folyamat végén jó lenne törölni.
2. Workbook1-ben létrehozni egy egyedi azonosítót, amire VLOOKUP-pal lehet majd hivatkozni a másik fileból.
3. Megnyitni Workbook2-t valamely hálózati mappából
4. létrehozni Workbook2-ben benne ugyanazt az azonosítót
5. A megadott cellákba VLOOKUP-pal Workbook1-ből Workbook2-be másolni az adatokat
6. Mivel az ideiglenes filet törölni kellene, ezért a vlookup által adott adatokat értékként beilleszteni ugyanazokba a cellákba (mivel ha törlődik workbook1, megszakadna a link a fileok között, és csak #N/A maradna a cellákban
7. Workbook2 mentése, Workbook1 törléseSzerintetek ez összesűríthető 1 makróba ? a legpöpecebb lenne ha az egy access-es gombnyomásra lefutna
Szerintem megvalósítható, az egyetlen probléma az, hogy Workbook2-ben nem minden tételre kellene bemásolni az adatokat. Workbook2 ben van egy oszlop, amiben van egy azonosító - "Hazai" vagy "külföldi", ez a két féle érték van a cellában. A makrónak ebben az esetben csak a "hazai" tételekre kellene kitölteni a dolgokat (a "külföldi" tételekre futna egy ugyanilyen makró egy másik adatbázisból és azt az töltené ki), gondolom ez egy sima If-fel menne, pl.
IF A1="hazai" then
makró szövege
Else
Exit sub -
Kobe
veterán
válasz
m.zmrzlina #17689 üzenetére
megnézem majd, igazából úgy épül fel amga a történet, hogy van egy hosszabb makró, annak az elején az accesses változók, lekérdezések, útvonalak vannak definiálva, hova mentse a filet, stb, majd van egy része ami azt definiálja hogy ha lementette a filet, abba milyen kódot "szúrjon be". Gondolom csak a beszúrt kódot kell hasonlóképp megbűvölni
-
Kobe
veterán
Sziasztok
olyan problemam lenne, hogy van egy access adatbazisom, ami gombnyomasra egy adott lekerdezes eredmenyeit excelbe importalja, es futtat rajta egy makrot - beszurja a kodot, ami csinal belole egy pivot tablat, semmi extra.
Az a gond, hogy a file minden megnyitaskor ujra probalja futtatni a makrot, ujra megkrealni a pivot tablat es ujranevezni az aktiv tabot, ami mar ugye letezik, ezert hibara fut, ami nem tul esztetikus egy ilyen automatizalt folyamatnal.
Nem lehetne valahogy beallitani, hogy a makro csak 1x fusson le, ujbol megnyitas utan ne akarjon ujra lefutni ?
Ha igen, mit kellene beszurni a kodba ?
-
Kobe
veterán
helló
még egy syntax erroros problémám lenne
Van egy makróm amit egy másik, accesses makróból szeretnék futtatni. Ehhez az kell, hogy a makrót sorrol sorra be tudjam másolni az Excel Visual Vasic ablakába. 98% ban megy, de sajnos 2 helyen syntax errorra fut a "" jelek miatt
Az eredeti, exceles makró egy részlete - ha ilyen formában futtatom excelből, tökéletesen fut, tehát nekem szóról szóra ezt kellene visszakapnom a beillesztés után
Range("P2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-11]=""YES"",RC[-8]-RC[-10],RC[-9]-RC[-10])"
Selection.AutoFill destination:=Range("P2:P" & lngLastRow)Range("P2").Select2 módszert ismerek amivel be lehet illeszteni Excel VBA ba:
.InsertLines
vagy változóként definiálva
.InsertLines LineNum, "Range("P2").Select"
LineNum = LineNum + 1
.InsertLines LineNum, "ActiveCell.FormulaR1C1 = _"
LineNum = LineNum + 1
.InsertLines LineNum, ""=IF(RC[-11]="""YES""",RC[-8]-RC[-10],RC[-9]-RC[-10])""
LineNum = LineNum + 1vagy
Code = "Range("P2").Select" &vbNewLine
Code = Code & "ActiveCell.FormulaR1C1 = _" &vbNewLine
Code = Code & ""=IF(RC[-11]="""YES""",RC[-8]-RC[-10],RC[-9]-RC[-10])"" & vbNewLineA gondom az, hogy az Excelben a makró csak akkor fut le, ha az If feltételben megadott értéket 2 db idézőjellel írja vissza a modulba a program, pl ""YES"", mivel szöveges érték.
Akármelyik metódust választom a fentiek közül, mindig "levágja" 1 "" ra, és "YES" t csinált belőle és elakad a makró annál a sornál.
Próbáltam módosítani, de ha átírom accessben pl """YES""" re, akkor a sor többi részébe is be kell szúrnom plusz "" jeleket, mert nem fut le - Syntax Error - Expected End of Statement hibaüzit dob az accesses makró. Ha hozzáigazítom a többit, hogy jó legyen, akkor meg oda is felesleges "" jeleket rak be, ahova nem kéne, és így excelben akad el.
Van valami ötletetek, hogyan kellene a "=IF(RC[-11]=""YES"",RC[-8]-RC[-10],RC[-9]-RC[-10])" sort átrni, hogy a fent említett 2 megoldással is működőképes amradjon ?
-
Kobe
veterán
sziasztok
volna egy excel makrós kérdésem. Van egy listám, ami mindig ugyanabból az oszlopokból áll, ám a sorok száma mindig változik. Egy olyan makrót akarok összehegeszteni, ami a lefuttatáskor beszúr 2 oszlopot a meglévők mellé, az oszlopokban pedig egy függvény által visszaadott értéket ír be, majd az egész táblából (az eredeti + 2 hozzáadott oszlop) csinál egy pivot táblát.
Mivel a sorok száma ugye dinamikusan változik (a kapott adatok egy adatbázis letöltésből származnak), ezért legelőször abba a problémába ütköztem, hogy a rögzített makró csak meghatározott számú sorba rakta bele a kalkulált értékeket, tehát meghatározott egy ranget pl Range(A1:A40) és később végig erre hivatkozott, de mikor pl 60 soros volt a lista, akkor is csak az első 40 sorba rakta be az adatokat, és a pivot táblában is csak azokat szerepeltette, vette figyelembe.
Ezt kiküszöbölendő, a makrü legelején definiáltam egy változót:
Dim LR As Long
LR = Range("A" & Rows.Count).End(xlUp).RowEzekután a kódban kicseréltem azokat a részeket, ahol a konkrét rangere hivatkozott, a változóra, pl Activesheet.Range("A1:A" & LR").Select lett az Activesheet.Range("A1:A40").Select helyett
Így már rendesen feltölti az összes, változó számú sorba a kiegészítő adatokat, viszont a pivot táblánál még mindig csak az első 40 sorral kalkulál. Próbáltam ugyanígy updatelni a pivot tábla forrására vonatkozó részt, de akkor emg hibára futott a makró sajna
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Munka1!R1C118C3", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Munka4!R3C1", TableName:="Kimutatás1", DefaultVersion _
:=xlPivotTableVersion14
Sheets("Munka4").Selecta kiemelet részt próbáltam így updatelni: "Munka1!R1C1
& LR C C18" updatelni.....az oszlopok száma mindig 18, a sorok számába kéne bebűvölni a korábban meghatározott változót. gyanítom csak valami szintaktikai hiba
any idea hogy kellene ezt beleírnom a pivot os részbe ? -
Kobe
veterán
Hello
Makro segitseg kellene. Szeretnek egyadatfilet letrehozni amiben egy urlap rogziti a bevitt adatokat. A gond az hogy kb 7-8 kulonbozo adatot kellene felvinni egy recordhoz, 6 ot az elso felvitelkor amikor rogzited 2-3 masikat csak kesobb lehetne hozzaadni
3 urlapot szeretnek letrehozni, azelson van pl 3 gomb bezaras, uj rekord felvitele, meglevo rekord frissitese. Az egyik felhozza a sima kitoltos urlapot, a masik meg egy kereso urlapot. Az jelent gondot hogyan tudnek egy olyan urlapot letrehozni amiben a korabban bevitt rekordok kozott tudok keresni egyszeruen es hozzaadni, esetleg updatelni a hianyzo, meglevo adatokat.
-
Kobe
veterán
egy olyan szummázási képlet kellene nekem amivel egy adott oszlopban levő számokat abszolút érték szerint tudom összeadni
pl az oszlop elemei
150
-150
200
-230akkor ne -30 at adjon eredménynek, hanem 730at
-
Kobe
veterán
válasz
Delila_1 #8122 üzenetére
köszi, kipróbálom majd
ezekszerint ha fogom a 3 pivot táblát és egymás alá illesztem mondjuk egy új sheetben, akkor végig fut az egészen?"A makró feltételezi, hogy a kérdéses oszlop minden cellájában van valamilyen adat, ott is, ahol nincs megjegyzés."
ezt nem egészen értem, mármint értem, hogy mit jelent, de magyarra lefordítva akkor bármilyen olyan sort kitöröl a táblázatból, ahol adott oszlop adott sorában semmilyen adat nincs ? ezt akrja jelenteni ?
illetve befolyásolja a makró működését, hogy a commentek nem kézzel beírt kommentek, hanem előre kiválasztható listából legördülő menüvel lehet választani közülük? -
Kobe
veterán
még 1 kérdés.
Van egy pivot tábla (kb 2-3000 soros) és ehhez a pivothoz jobb oldalra van hozzácsapva 2 oszlop - mindkettő kommentelésre szolgál, de nem a pivot része, csak a pivotnak megfelelő sorba mellév an írva egy megjegyzés
Szeretnék csinálni egy kivonatot summary sheetet a pivot táblázatból, ami ugyanolyan struktúrában mutatja ugyanazokat az adatokat, de csak azokat amiknél van valami a komment fieldben
Erre azért volna szükségem mert 3 tartalmilag és felépítésében azonos pivotból kellene összrakni 1 db kivonatot, és mauálisan kitörölgetni a nem kommentált mezőket (cca 10ezer sorból kb) elég húzós
-
Kobe
veterán
Sziasztok
adott egy allando kinezetu, formatumu riport, egy eleg bonyolult Pivottal.
Ezt a riportot havonta kell frissiteni. A gyorsabb munka erdekeben arra gondoltam egyszeruen kicserelem az elozo havi listat, adattablat az uj adattablaval. Ezek formatumra, oszlopok sorrendjere, darabjara, nevere stb tokeletesen megegyeznek.A problemam az, hogy ha szimplan kicserelem es ranyomok a pivoton a refresh datara, akkor ugyan az uj adatokkal, de a regi mennyisegben frissiti a tablat. Pl juliusban 2500 item volt a tablazatban, augusztusban 3400, akkor ha berakom a regi tabla helyere az augustusi 3400at, a 3400bol csak az elso 2500at veszi figyelembe
Lehet ezt utolagosan modositani valahogy, hogy mind a 3400at figyelembe vegye a Pivot frissitesenel?
Azert lenne ra szukseg mert tenyleg egy komplex pivot, amit havonta ujra felepetine es megformazni nem kis feladat -
Kobe
veterán
-
Kobe
veterán
sziasztok
szeretnék készíteni egy pivot táblát, azonban csak excel 2007 áll rendelkezésemre, amiben a 2003 hoz képest teljesen megbolygatták az általam jobban ismert funkciókat, de nem is biztos hogy az a legalkalmasabb funkció arra amit szeretnék, mert elég dinamikus.
Egy olyan táblát szeretnék létrehozni, ami ezeket tartalmazza
-egy bizonyos napon érvényes összeg, pl jan 1. Nevezzük nyitónak
-egy bizonyos napon - pl dec 31 - ennek az összegnek a kamattal növelt mennyisége. Nevezzük zárónak.2 fajta csökkentő tétel is van
-egy befizetés, ami magát a kamat (nyitó és záró között fix kamatlábbal számolt rész) összegét csökkenti.
-egy plusz befizetés, ami magát az eredeti nyitó összeget csökkentiilletve ezeknek a befizetéseknek a dátuma
Azt szeretném elérni, hogy egy táblába elég legyen csak alkalomadtán bevinnem a befizetést és annak dátumát (persze a megfelelő oszlopba, mert nem egy időben történnek, s nem mindig azonos összegekről van szó) és az excel automatikusan frissítse a nyitó összeget, a zárót, illetve a kamatot magát, attól függően milyen típusú befizetés történik. Vagyis azt is szeretném látni hogy a záró dátumon mekkora a periódus között eltelt kamat összege, hogyan változik a befieztések kapcsán, illetve ugyanezt a nyitó tőkével is, reprezentálva az egyes befizetések dátumát és összegét is.
Mivel kamatos kamatról lévén szó, egy következő periódusban ez a záró tőkésítésre kerül, és ugyanazoknak a műveleteknek kellene alapjául szolgálni, mint amit a msotani nyitó összeggel szeretnék csinálnitudnátok ebben segiteni ?
-
Kobe
veterán
no még egy
író mű címe kiadó fordító meg.idő megj.hely oldalszám
Rejtő Jenő Az elveszett cirkáló Magvető 1979 Budapest 186
Madách Imre Az ember tragédiája Franklin 1861 Budapest 228
Szepes Mária A Vörös Oroszlán Móra 1946 Budapest 580
A.A. Milne Micimackó Móra Karithy Frigyes 1991 Dabas 266
Arthur C.Clarke 2001 Űrodisszeia Szukits Göncz Árpád 1994 Szeged 185
Stanislaw Lem Solaris Kriterion Murányi Beatrix 1977 Bukarest 216
Clifford D. Simak A város Móra Kuczka Péter 1991 Debrecen 220
Mario Puzo A keresztapa Magvető Vándodr Vera 1987 Debrecen 480van egy táblázat, fentebb látható. Bocs h kicsit széthúzta
a lényeg látható azért remélem
ezek közül kéne lekérdezéseket csináln:külön lapra a táblázatban gyüjtse ki a magvető kiadó könyveit a12től kezdődően
a 90 es években kiadott könyveket kellene kigyüjteni, ill azok átlagos oldalszámát kiszámolni (ez a második része nem gáz) csak ezt is külön lapra
nem magyar műveket kigyüjteni (ahol nicns fordító)
sávdiagram amagyar kötetek oldalszámairól
kösz a helpet
-
Kobe
veterán
kösz, már emgodlottam egy feltételes elágazásokkal tüzdelt függvénnyel
nagyjából hasonlót kellet tmint mit írtál cska beszúrtam egy ÉS feltételt. Igazából szar volt mert cska egy táblázat volt megadva hogy
100 rossz
300 elégséges
400 közepes stb, ezt ugy értelmeztem hogy intervallumokra vonatkozik pl 300 alatt rossz, 300-400 közt elégséges stb
most már működik így -
Kobe
veterán
cs
van egy gondom
vagy egy oszlopnyi adatom, amit "be kéne sorolni"....megvan mindegyikhez adva egy számérték
rendre 789
456
123
741
852
499
951
ezek mellé kllene társítani egy megjegyzést, aminek a feltétele
Rossz, ha az érték 100 vagy az alatti
elégséges ha 300 és 100 közé esik
közepes ha 300 és 400 közé esik
jó ha 400 és 500
és kiváló ha 600 as vagy afeletti értéke van
fontos volna, köszi
Új hozzászólás Aktív témák
Hirdetés
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- 27%-OS ÁFÁS SZÁMLA I Jogtiszta Microsoft digitális és fizikai termékek I DIGITALKEYZ.COM
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- Samsung Galaxy Watch Ultra
- AKCIÓ! ASUS PRIME Z390-P i5 8600K 16GB DDR4 512GB SSD RX 6600 8GB GDDR6 DEEPCOOL Matrexx55 630W
- BESZÁMÍTÁS! MSI B450M R7 2700X 32GB DDR4 512GB SSD RTX 3050 8GB Rampage SHIVA Thermaltake 500W
- BESZÁMÍTÁS! Gigabyte B760M i5 14600KF 64GB DDR4 512GB SSD RTX 3080 10GB Corsair 4000D Airflow 1000W
- AKCIÓ! ASUS PRO WS W790E-SAGE SE alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged