- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- One mobilszolgáltatások
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- VoLTE/VoWiFi
- Mobil flották
- Xiaomi 15 - kicsi telefon nagy energiával
- Google Pixel 8a - kis telefon kis késéssel
- Samsung Galaxy S25 - végre van kicsi!
- Milyen okostelefont vegyek?
- Samsung Galaxy A54 - türelemjáték
-
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
-
Mutt
senior tag
Szia,
Ha Excel 2016-osod vagy frissebbed van, akkor a Power Query-vel lehet automatizálni.
A másik megoldás, hogy mivel az első 14 lapon mindig 65 ezer sor van fixen, akár képlettel is megoldható.
Lenne egy input.xls és egy template.xlsx nevű fájlom. Az input amit a program kiad. A template-ben pedig egy sima hivatkozás lenne egy lapon az input első lapjára, majd a 65 ezredik sor után a második lapra és így tovább. Az utolsó lap esetén pedig mivel nem lesz minden sor vmi ilyen hivatkozás lenne:
=HA([input.xls]Sheet15!A1<>"";[input.xls]Sheet15!A1;"")Ezek után csak az input fájlt kell cserélgetned és a template-ben kapott eredményt elmenteni értékek beillesztése után.
Mindkét megoldás hátránya, hogy formátumokat nem másol.
Ha kell formátum, akkor VBA.üdv
-
Fferi50
Topikgazda
Szia!
Úgy gondolom, a script szóközzel választja el a paramétereket egymástól, ezért kerül minden szó új sorba.
A szöveghatároló idézőjeleket is hozzá kell adnod amikor a paramétereket megadod, úgy mint az utVbs-nél.
Kb. így:parancs = """" & utVbs & """ " & minta & " " & tipus & "" """ & angol & """ """ & cseh & """ """ & nemet & """ """ & magyar & """
Üdv. -
Mutt
senior tag
Szia,
Nincs CS01 hozzáférésem, így nem tudtam tesztelni de ezt próbáld meg:
Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(, "Excel.Application")
Set objSheet = objExcel.Workbooks("dj feltolt").Sheets("Munka1")
For i = 2 To objSheet.UsedRange.Rows.Count
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'Column1
'CS01 fõképernyõn anyagszám / plant / BOM usage megadása
session.findById("wnd[0]/usr/ctxtRC29N-MATNR").Text = COL1
'session.findById("wnd[0]/usr/ctxtRC29N-WERKS").text = "0610"
session.findById("wnd[0]/usr/ctxtRC29N-STLAN").Text = "1"
session.findById("wnd[0]/usr/txtRC29N-WTEXT").SetFocus
session.findById("wnd[0]/usr/txtRC29N-WTEXT").caretPosition = 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
'component screen amiről csak akkor kell elmenni, ha másik anyagot kell felépíteni
j = -1
Do
j = j + 1
COL2 = Trim(CStr(objSheet.Cells(i + j, 2).Value)) 'Column2
COL3 = Trim(CStr(objSheet.Cells(i + j, 3).Value)) 'Column3
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-POSTP[1," & CStr(j) & "]").Text = "L"
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2," & CStr(j) & "]").Text = COL2
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").Text = COL3
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").SetFocus
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").caretPosition = 5
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
Loop Until COL1 <> Trim(CStr(objSheet.Cells(i + j + 1, 1).Value))
'mentés
session.findById("wnd[0]/tbar[0]/btn[11]").press
'léptetni kell az i értékét
i = i + j
Next i
MsgBox "Keszen vagyunk"Neked egy fájlban vannak a létrehozandó anyagtörzsek (az aktuális mindig a COL1 változóban van), így addig nem kell kilépned CS01-ből amíg új anyaghoz nem érsz.
A fenti megoldásban van egy Do - Loop ciklus ami addig adogatja a komponenseket a listához amíg a COL1 értéke meg nem változik.A másik fontos dolog, hogy a rácson hivatkozni SAP-ban sor és oszlop azonosítóval lehet.
pl. .. CMAT/ctxtRC29P-IDNRK[2,0] mindig a második mezőt az első soron jelenti, vagyis a komponenst.
A sor változót kell léptetni, hogy a komponensek egymás alá kerüljenek és ne mindig az első sor legyen felülírva. Ezért van mindegyik sorban a j belső változó meghívva.Ami fontos, hogy a script el fog hasalni ha olyan sorra hivatkozol ami a nem látható képernyő része. A képernyőmentéseden látszik 19 sor, de ha kisebbre teszed a GUI-t akkor lehet hogy csak 5 sort fogsz látni. Ezt kivédeni úgy lehet, hogy mielőtt írnál megnézed hogy létezik-e az adott sor. Tippre vhogy így:
On Error Resume Next
If session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-POSNR[0," & CStr(j) & "]").Text <> Right("000" & j, 4) Then
MsgBox "hiba"
End If
On Error GoTo 0Megkértem a jogosultságot a CS01-hez így ha majd megkapom akkor tudom tesztelni, hogy az elmélet párosul-e a valósággal.
üdv
-
Fferi50
Topikgazda
Szia!
Bocs, hogy értetlenkedek, ez azért van mert nem ismerem az SAP-t (ez persze nem lehet mentség) és így csak "butákat" tudok kérdezni. De régebbi ismereteim szerint az ilyen rendszerekben szokott lenni olyan lehetőség, hogy adatfeltöltés fájlból és ez általában része az alapnak. Meg persze lehet API specifikáció is hozzá.
Amit a leírás alapján te szeretnél, az úgy gondolom, nem fűzhető össze egy tranzakcióvá, mivel több soros lenne az eredmény. Lehet belső ciklust csinálni, ahol figyeled a Material értékét és amíg egyezik, nem kell ismét bekérni.
Talán érdemes lenne kinyomozni a cég SAP kapcsolattartóját és vele beszélni erről.
Én biztosan a textfájlos inputot favorizálnám. Mivel ismered a cél formátumát, talán mégis lehet valami kaput találni, amit ki lehet nyitni a tömeges adatbevitelre.
Üdv. -
Fferi50
Topikgazda
-
Fferi50
Topikgazda
Szia!
ASet objSheet = objExcel.ActiveWorkbook.ActiveSheet
sor helyettSet objSheet = objExcel.Workbooks.Open("fájl neve elérési úttal").Sheets("munkalap neve")
ha nincs megnyitva a fájl, ha meg van nyitva, akkorSet objSheet = objExcel.Workbooks("fájlneve").Sheets("munkalap neve")
Természetesen a nevek lehetnek szöveg típusú változók is.
Üdv. -
Fferi50
Topikgazda
Szia!
Ha még nincs megoldásod, ezt a makrót másold be egy modul lapra.Sub keresi()
Dim kodok As Range, adatok As Range, adat As Range, kod As Range, adatcim As String
Sheets("Munka1").Range("B:B").Clear
Set kodok = Sheets("Munka2").Range("A1").CurrentRegion
Set adatok = Sheets("Munka1").Range("A1").CurrentRegion
Set adat = adatok.Cells(1)
For Each kod In kodok.Cells
Set adat = adatok.Find(what:=kod, after:=adat, LookIn:=xlValues, lookat:=xlPart)
If Not adat Is Nothing Then
adatcim = adat.Address
Do
adat.Offset(0, 1).Value = 1
Set adat = adatok.Find(what:=kod, after:=adat, LookIn:=xlValues, lookat:=xlPart)
Loop While adat.Address <> adatcim
Else
Set adat = adatok.Cells(1)
End If
DoEvents
Next
Application.ScreenUpdating = True
MsgBox "Készen vagyunk!"
End Sub
A munkalapok neveit igazítsd a sajátodéhoz. A makró minden olyan érték mellé beír egy db 1-est, amelyik a kódok listájában előforduló értékkel kezdődik. Ne lepődj meg, ha kicsit sokáig fut.
Üdv. -
Pakliman
tag
Szia!
Egy kis makrózással megoldható...
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = Range("A1").Address Then
'Duplaklikk az A1 cellán
Cancel = True 'Megakadályozzuk, hogy szerkesztő módba lépjen a cellában.
Dim sha As Worksheet: Set sha = Worksheets("Munka1") 'ActiveSheet
Dim shk As Worksheet: Set shk = Worksheets("Munka2")
Dim usa As Long: usa = sha.Cells(sha.Rows.Count, "A").End(xlUp).Row 'A Munka1 utolsó sora
Dim usk As Long: usk = shk.Cells(shk.Rows.Count, "A").End(xlUp).Row 'A Munka2 utolsó sora
Dim sora As Long
Dim sork As Long
'Nem kell folyton újraszámolni, sem villogtatni a képet...
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'Kiürítjük a B oszlopot...
sha.Range("B2:B" & usa).ClearContents
For sora = 2 To usa
For sork = 2 To usk
If sha.Cells(sora, 1) Like shk.Cells(sork, 1) & "*" Then
'Ha a Munka1 aktuális cellája "hasonlít" a Munka2 aktuális cellájára, akkor...
sha.Cells(sora, 2) = 1 '...a Munka2 2. oszlopába berakunk egy 1-est
Exit For 'Mivel van találat, a több elemet már nem vizsgáljuk, továbblépünk...
End If
Next sork
Next sora
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End If
End Sub -
Fferi50
Topikgazda
Szia!
"Minden olyan szám kell aminek a kezdete megegyezik a Listában lévőkkel."
Bocs, de meddig számoljuk a kezdetet? Hány karakterig? Milyen határoló karakter van? V vagy S vagy - vagy micsoda más?
Mert a listádban van 6-7-8-9 karakteres keresendő tétel....
És hat karakterig elég sok egyezőség is.
Legalább a keresendő listád lenne egyértelmű....
A képletet minden érvényes elválasztó/határoló karakterre meg kellene csinálni.
Üdv. -
Fferi50
Topikgazda
-
Fferi50
Topikgazda
Kiegészítés:
Ha feltételes formázást szeretnél (mert akkor nem kell segédoszlop), az alábbi képletet használhatod. Jelöld ki az A2 cellát, majd:
Kezdőlap - Feltételes formázás - Új szabály - A formázandó cellák kijelölése képlettel -- Érték formázása ha ez a képlet igaz:=HAHIBA(HOL.VAN(HAHIBA(BAL($A2;SZÖVEG.TALÁL("-";$A2)-1);$A2);Lista;0);"N")<>"N"
Kiválasztod a megfelelő formázást. OK.
Ezután a szabályok kezelése menüpontban beállítod az érvényesség tartományát az A oszlopodnak megfelelően.
Szűrésnél így az A oszlopra használhatod a színszűrőt.Üdv.
-
-
Delila_1
veterán
A kettes lapon lévő tartománynak nevet adsz. Legyen ez pl. Lista.
Az egyes lapon a tartománynak feltételes formázást adsz, a képlet=HOL.VAN(A2;Lista;0)
Vagy képletet írsz az egyes lapon a B oszlopba.
=HA(HOL.VAN(A2;Lista;0);1)
A fellelhető értékek mellé 1-et ír, a többihez #HIÁNYZIK szöveget. Biztosan lehetne szépíteni, de most szaladok. -
Delila_1
veterán
Ha jól értem, a Munka1 lap D oszlopában lévő cikkszámokat (vagy miket) kell színezni, ha a Munka2 lap C oszlopában (Lista tartomány) szerepel a bal oldaluk, változó hosszban.
A Munka1!D:D és a Munka2!C:C formátuma legyen szöveg. A Munka1 D oszlopában a feltételes formázás képlete
=HAHIBA(HOL.VAN(BAL(D1;SZÖVEG.KERES("-";D1)-1);Lista;0);HOL.VAN(D1;Lista;0))
-
Telda
addikt
Reggelt!
Jelenleg ez van használatban.
=FKERES(ÉRTÉK(BAL($D1;8));Munka2!$A:$A;1;HAMIS)
Annyi hogy a kivétel lista a munka2-n van.
Illetve 6-7-8 karakteres cikkszámok vannak, mindre kellett csinálni egy új szabályt.
Ennek annyi a hibája, hogy betű is van a cikkszámban akkor nem működik. -
Delila_1
veterán
A lenti makró az A1 cellában lévő rajzszámhoz tartozó képhez készít hiperlinket a B1 cellába. A makróban kell megadni az elérési útvonalat, és a kép kiterjesztését.
Sub rajz()
Dim utvonal As String
utvonal = "F:\jpg\Fotó\" 'ide kell a saját útvonalad
ActiveSheet.Hyperlinks.Add Anchor:=Range("B1"), Address:= _
utvonal & Range("A1").Value & ".jpg", TextToDisplay:=Range("A1").Value
End SubAhhoz, hogy az összes rajzszámhoz beírhassuk a hiperlinket, meg kell adnod, melyik oszlopban vannak a rajzszámok, melyik oszlopba kéred a hiperlinket.
Az is fontos, hogy a rajzszámos oszlop hányadik sorában kezdődnek a számok, és hogy vannak-e olyan sorok, amikben nincs rajzszám. -
Fferi50
Topikgazda
Szia!
A válasz IGEN, meg lehet csinálni.
Bővebben: A rajzszámot tartalmazó cellát kijelölöd, jobb egérgomb, hivatkozás - kiválasztod a megfelelő fájlt, kitöltöd a szükséges mezőket, majd ok.
Ezt az egészet makrórögzítővel felveszed, majd "paraméterezed" és lefuttatod minden cellára nézve.
Ha a makrót rögzítetted és ide felteszed, segítünk a paraméterezésben.Üdv.
-
-
Mutt
senior tag
Hello,
...én csak a számot írom be, de mögé íródik hogy "perc" "mm" stb?A cella formátum beállító ablakban (gyorsbillentyű Ctrl+1) Egyéni formátumot kell megadnod.
Általánosságban ez a formátum műkődhet: Normál "perc"Ami fontos, hogy Excelben az idő valójában egy 1-nél kisebb szám (pl. 0,25 az 6 óra 0 percet jelent), 1-nél nagyobb szám napként viselkedik. A 36-ot dátumfüggvényekben napként fogja értelmezni ezért osztani kell 1440-el ha percként kell számolni vele, vagy 86400-as ha másodpercként.
üdv.
Új hozzászólás Aktív témák
Hirdetés
- Új, bontatlan World of Warcraft gyűjtői kiadások
- Antivírus szoftverek, VPN
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Eladó steam/ubisoft/EA/stb. kulcsok Bank/Revolut/Wise (EUR, USD, crypto OK)
- Intel Core 2 Quad Q9550 2.83GHz LGA775 Processzor
- Samsung Galaxy Xcover 5 64GB, Kártyafüggetlen, 1 Év Garanciával
- Oppo Reno7 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- Thinkpad X230 legenda: i7 CPU, IPS kijelző, 12 GB, dupla SSD, magyar villbill, webcam, fingerprint
- MacBook Air 15 M3 8 / 256GB dobozos 12 hónap garancia
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged