Hirdetés
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- sziku69: Szólánc.
- potyautas: A Magyar Néphadsereg emlékére
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- btz: Internet fejlesztés országosan!
- Brogyi: CTEK akkumulátor töltő és másolatai
- bambano: Bambanő háza tája
- sziku69: Fűzzük össze a szavakat :)
- GoodSpeed: Márkaváltás sok-sok év után
-
LOGOUT
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
-
TheSaint
aktív tag
válasz
Fferi50
#52515
üzenetére
1. Oracle adatbázis ODBC-n keresztül, Office 2019 (32bit minden)
2. Voltak gondjaim az adatfrissítéssel, ezzel a megoldással sikerült biztosítsani, hogy frissüljenek az adatok és azokat küldje el.
3. Ebben már nem vagyok én sem biztos, de napközben dolgozom más táblázatokkal, akkor így gondoltam biztosítani, hogy a makró biztosan elinduljon
4. Mert amúgy nincs rá szükség, de hiba esetén akkor még rá tudok nézni gyorsan. Mint írtam, mellette dolgozok más táblázatokkal és azokat is tönkrevágja, lentebb a kép mi a végeredmény. Excel bezár és újranyit oldja csak meg. Windows feladatütemező nyitja meg, ha nem vagyok vagy hétvégén alvó állapotból felébreszti a gépet, elküldi amit kell és vissza alszik. Eseménykezelő nincs.
-
TheSaint
aktív tag
válasz
Fferi50
#52503
üzenetére
Ezek stimmelnek.
Így néz ki a teljes kód, egy adatbázislekérés van a táblázatban. Még sose futottam bele ilyen megmagyarázhatatlan hibába:Private Sub Workbook_Open()' Adatkapcsolatok frissítéseThisWorkbook.RefreshAll' Azonnal elindítjuk az időzítőt, amely a háttérben futStartTimerEnd SubSub StartTimer()' Időzítő beállítása 15 másodpercreApplication.OnTime Now + TimeValue("00:00:15"), "ThisWorkbook.ProcessAfterDelay"End SubSub ProcessAfterDelay()' Ellenőrizze, hogy a munkafüzet meg van-e nyitvaIf ThisWorkbook.Name = "e.xlsm" Then' Változók deklarálásaDim ws1 As Worksheet ' "Munka1" lapDim ws3 As Worksheet ' "Munka3" lapDim filterRange As RangeDim filterValues() As VariantDim filterValue As VariantDim bodyText As StringDim emailTable As ObjectDim CDO_Mail As ObjectDim CDO_Config As Object' CDO konfiguráció beállításaSet CDO_Mail = CreateObject("CDO.Message")Set CDO_Config = CreateObject("CDO.Configuration")CDO_Config.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2CDO_Config.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.."CDO_Config.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25CDO_Config.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1CDO_Config.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = ""CDO_Config.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""CDO_Config.Fields.UpdateSet CDO_Mail.Configuration = CDO_Config' Munkalapok beállításaSet ws1 = ThisWorkbook.Sheets("Munka1")Set ws3 = ThisWorkbook.Sheets("Munka3")ws1.AutoFilterMode = False' Szűrési tartomány beállítása a "Munka1" lapon (A-M oszlop)Set filterRange = ws1.Range("A3:M" & ws1.Cells(ws1.Rows.Count, "K").End(xlUp).Row)' Kiválasztott nevek definiálásafilterValues = Array("X", "Y")' E-mail címek táblázatának inicializálása a "Munka3" laponSet emailTable = CreateEmailTable(ws3)' Minden egyedi értékhez készítünk egy külön e-mailtFor Each filterValue In filterValues' Szűrés a K oszlop alapján a "Munka1" laponfilterRange.AutoFilter Field:=11, Criteria1:=filterValue' Csak folytatjuk, ha vannak szűrt sorokIf Application.WorksheetFunction.Subtotal(103, filterRange.Columns(1)) > 1 Then' E-mail tartalma összeállításabodyText = "" & filterValue & " m:" & vbCrLf & vbCrLfbodyText = bodyText & "" & vbCrLf & vbCrLf' HTML formátumban konvertált táblázat hozzáadása az üzenethezbodyText = bodyText & RangetoHTML(filterRange.SpecialCells(xlCellTypeVisible))' E-mail cím meghatározása a filterValue alapján a "Munka3" laponDim emailCim As StringemailCim = GetEmailFromTable(emailTable, filterValue)' Csak folytatjuk, ha sikerült e-mail címet meghatározniIf emailCim <> "" Then' E-mail küldése CDO objektummalWith CDO_Mail.Subject = "D".From = "@.hu".To = emailCim.cc = "@.hu".HTMLBody = bodyText ' HTML formátumú tartalom hozzáadása az üzenethez.SendEnd WithEnd IfEnd If' Szűrés törlésews1.AutoFilterMode = FalseNext filterValue' CDO objektumok bezárásaSet CDO_Mail = NothingSet CDO_Config = Nothing' Időzítő újraindítása 1 percreApplication.OnTime Now + TimeValue("00:01:00"), "ThisWorkbook.SaveAndCloseWorkbook"End IfEnd SubSub SaveAndCloseWorkbook()' Táblázat mentése és bezárásaThisWorkbook.SaveThisWorkbook.CloseEnd SubFunction RangetoHTML(rng As Range)' Függvény a táblázat HTML formátumban történő konvertálásáhozDim fso As ObjectDim ts As ObjectDim TempFile As StringDim TempWB As WorkbookTempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"' Táblázat exportálása HTML fájlbarng.CopySet TempWB = Workbooks.Add(1)With TempWB.Sheets(1).Cells(1).PasteSpecial Paste:=8.Cells(1).PasteSpecial xlPasteValues, , False, False.Cells(1).PasteSpecial xlPasteFormats, , False, False.Cells(1).SelectApplication.CutCopyMode = FalseOn Error Resume Next.DrawingObjects.Visible = True.DrawingObjects.DeleteOn Error GoTo 0End With' HTML fájlba mentésWith TempWB.PublishObjects.Add( _SourceType:=xlSourceRange, _Filename:=TempFile, _Sheet:=TempWB.Sheets(1).Name, _Source:=TempWB.Sheets(1).UsedRange.Address, _HtmlType:=xlHtmlStatic).Publish (True)End With' HTML tartalom olvasásaSet fso = CreateObject("Scripting.FileSystemObject")Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)RangetoHTML = ts.ReadAllts.CloseRangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _"align=left x:publishsource=")' Táblázat törlése és ideiglenes munkafüzet bezárásaTempWB.Close SaveChanges:=FalseKill TempFileSet ts = NothingSet fso = NothingSet TempWB = NothingEnd FunctionFunction CreateEmailTable(ws As Worksheet) As Object' E-mail címek táblázatának létrehozása és feltöltéseDim emailTable As ObjectSet emailTable = CreateObject("Scripting.Dictionary")Dim i As LongDim lastRow As LonglastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).RowFor i = 1 To lastRowDim nev As StringDim email As Stringnev = ws.Cells(i, 2).Valueemail = ws.Cells(i, 3).ValueemailTable(nev) = emailNext iSet CreateEmailTable = emailTableEnd FunctionFunction GetEmailFromTable(emailTable As Object, key As Variant) As String' E-mail cím lekérdezése a táblázatból a megadott kulcs alapjánOn Error Resume NextGetEmailFromTable = emailTable(key)On Error GoTo 0End Function -
TheSaint
aktív tag
Erre a porblémára lenne-e esetleg valakinek javaslat, kifogytam sajnos az ötletekből:
Egy táblázatot szűr le egy makró és a szűrt táblázatokat elküldi emailekben.
Minden szépen és flottul megy, de a szűrések után az excel megkergül, nem mükődnek gombok, görgetés szétesik, stb. Mi, hol lehet a gond?' Munkalapok beállításaSet ws1 = ThisWorkbook.Sheets("Munka1")Set ws3 = ThisWorkbook.Sheets("Munka3")ws1.AutoFilterMode = False' Szűrési tartomány beállítása a "Munka1" lapon (A-M oszlop)Set filterRange = ws1.Range("A3:M" & ws1.Cells(ws1.Rows.Count, "K").End(xlUp).Row)' Kiválasztott nevek definiálásafilterValues = Array("X", "Y")' E-mail címek táblázatának inicializálása a "Munka3" laponSet emailTable = CreateEmailTable(ws3)' Minden egyedi értékhez készítünk egy külön e-mailtFor Each filterValue In filterValues' Szűrés a K oszlop alapján a "Munka1" laponfilterRange.AutoFilter Field:=11, Criteria1:=filterValue' Csak folytatjuk, ha vannak szűrt sorokIf Application.WorksheetFunction.Subtotal(103, filterRange.Columns(1)) > 1 Then -
TheSaint
aktív tag
Remélem ez segít:
Válaszd ki az oszlopot, amely alapján szeretnéd szétbontani a táblázatot, és kattints rá jobb egérgombbal.
Válaszd ki a "Csoportosítás" opciót.
A "Csoportosítás" ablakban add meg a következőket:
Az "Új csoportosítás hozzáadása" gombra kattintva add hozzá az oszlopot, amely alapján szét szeretnéd bontani a táblázatot.
Az "Új oszlop neve" mezőben add meg az új oszlop nevét
Az "Összes sor" opciót válaszd ki a "Művelet" mezőben. Kattints a "OK" gombra.
Az eredményül kapott táblázatban kattints az "Elemek kibontása" gombra az oszlop mellett.
Az "Elemek kibontása" ablakban válaszd ki a "Új oszlopnevek" opciót, és add meg az új oszlop nevét. Kattints a "OK" gombra.
A táblázatban kattints a "Bezárás és betöltés" gombra a felső menüsorban.
Válaszd ki a "Táblázat" opciót, majd kattints a "Betöltés" gombra.
Az eredményül kapott táblázatban kattints a "Táblázatba" gombra az oszlop mellett.
Az "Táblázatba" ablakban válaszd ki az "Új munkalap" opciót, és add meg az új lap nevét, pl. "Bolt".
Kattints a "OK" gombra.
Ismételd meg a folyamatot minden egyes értékkel, hogy létrehozd az összes lapot.
A "Bezárás és betöltés" gombra kattintva mentheted az eredményt, amely az összes új lapot tartalmazza. -
TheSaint
aktív tag
válasz
Lasersailing
#50681
üzenetére
Két lépésben szerintem így jó lehet:
keresdatum_raw = Sheets("Serials").Cells(se_sm, 4).Value
keresdatum = Format(DateValue(Left(keresdatum_raw, InStr(1, keresdatum_raw, "_") - 1)), "dd/mm/yyyy") -
TheSaint
aktív tag
válasz
pero19910606
#50485
üzenetére
-
TheSaint
aktív tag
-
TheSaint
aktív tag
válasz
TillaT
#50365
üzenetére
"Arra még nem sikerült rájönnöm, hogy a kód hatása alatt miért nem engedi a sorok és/vagy oszlopok kijelölésével az egész sorok/oszlopok beszúrását/törlését; hogy miért csak a táblázaton belüli cellák kijelölésével enged beszúrni és törölni egész sorokat/oszlopokat"
Egy próba erejéig:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Rows.Count > 1 Or Target.Columns.Count > 1 ThenApplication.CutCopyMode = FalseApplication.OnKey "^+{INSERT}", "InsertEntireRowOrColumn"Application.OnKey "^+{DELETE}", "DeleteEntireRowOrColumn"ElseApplication.OnKey "^+{INSERT}"Application.OnKey "^+{DELETE}"End IfEnd SubSub InsertEntireRowOrColumn()If Selection.Rows.Count > 1 ThenSelection.EntireRow.InsertElseIf Selection.Columns.Count > 1 ThenSelection.EntireColumn.InsertEnd IfEnd SubSub DeleteEntireRowOrColumn()If Selection.Rows.Count > 1 ThenSelection.EntireRow.DeleteElseIf Selection.Columns.Count > 1 ThenSelection.EntireColumn.DeleteEnd IfEnd Sub -
TheSaint
aktív tag
válasz
TillaT
#50362
üzenetére
"Esetleg létezhet olyan metódus, amivel a háttérben, a felhasználó által érzékelhetetlen pillanatig aktívvá tehetnék egy másik munkalapot, majd egyből visszatérnék az adott munkalapra?"
Jó ötlet, erre van is megoldás elvileg:
Private Sub Worksheet_Change(ByVal Target As Range)Dim currentSheet As WorksheetSet currentSheet = ActiveSheetvbnetCopy codeThisWorkbook.Sheets(1).ActivateApplication.OnTime Now + TimeValue("00:00:01"), _"GoBackToCurrentSheet"Sub GoBackToCurrentSheet()currentSheet.ActivateCall ScrollAreaInterpretEnd SubEnd Sub -
TheSaint
aktív tag
-
TheSaint
aktív tag
válasz
kepton
#50350
üzenetére
Egy megoldás:
Először a D3 cellába a darabszám, majd a C3 cellába a cikkszám:Private Sub Worksheet_Change(ByVal Target As Range)If Target.Address = "$C$3" ThenDim cikkszam As Stringcikkszam = Target.ValueDim keresettSor As RangeSet keresettSor = Me.Range("A:A").Find(cikkszam, LookIn:=xlValues)If Not keresettSor Is Nothing ThenDim darabszam As Integerdarabszam = Me.Range("D3").ValueMe.Cells(keresettSor.row, 2).Value = Me.Cells(keresettSor.row, 2).Value + darabszamEnd IfEnd IfEnd Sub -
TheSaint
aktív tag
válasz
sniphoe
#50296
üzenetére
Az alábbi kód segítségével leszűrhetőek azok a 4 betűs szavak, amelyek első és második karaktere is mássalhangzó:
Sub FilterWords()Dim r As LongDim c As LongDim vowels As Stringvowels = "aeiou"c = 1 ' az oszlop számaFor r = 1 To ActiveSheet.UsedRange.Rows.CountIf InStr(vowels, LCase(Left(Cells(r, c).Value, 1))) = 0 And InStr(vowels, LCase(Mid(Cells(r, c).Value, 2, 1))) = 0 ThenCells(r, c).Interior.Color = vbGreenElseCells(r, c).Interior.Color = vbRedEnd IfNext rEnd Sub
Be kell állítani az oszlop számát (c), amelyet ellenőrizni szeretnél. Ha a szó első és második karaktere is mássalhangzó, akkor zöldre festi a cellát, egyébként pirosra.
Utána mehet sima színszűrő akár. -
TheSaint
aktív tag
Sziasztok!
Worksheet Change eseménnyel kapcsolatban kérnék segítséget, nem ismerem még sajnos.
A feladat egy oszlop (K) celláinak a változása esetén küldjön emailt az adott sor C oszlopában szereplő névhez tartozó email címre. Az emailcímet a munka1 lapon lévő L név oszlop mellett lévő M oszlopban található.
Az emilküldés része már le van kezelve, csak az eseményfigyeléssel nem bírok:Sub Visszajelzes()On Error Resume Next'Public Sub SendEMail(Dim MailFr As String, MailCC As String, MailTo As String, MailSubject As String, MailText As StringDim CDOMsg As ObjectDim CDOConf As ObjectDim CDOFields As ObjectThen MailFr = Munka1.Cells(i, "M")Next iMailTo = Munka1.Cells(2, "H")If IsEmpty(Munka1.Cells(3, "H")) = False Then MailCC = Munka1.Cells(3, "H")If IsEmpty(Munka1.Cells(4, "H")) = False Then MailCC = MailCC & "; " & Munka1.Cells(4, "H")MailCC = MailCC & "; " & MailFrMailSubject = "Visszajelzés érkezett"IfThenMailText = MailText & Chr(10) & _Munka2.Cells(i, "A") & " " & Munka2.Cells(i, "B") & " " & Munka2.Cells(i, "C") & " " & Munka2.Cells(i, "D") & " " & Munka2.Cells(i, "E") & " " & Munka2.Cells(i, "F") & " " & Munka2.Cells(i, "G") & " " & Munka2.Cells(i, "H") & " " & Munka2.Cells(i, "I") & Munka2.Cells(i, "J")Next iEnd If'On Error GoTo ERRORHANDLERSet CDOMsg = CreateObject("CDO.Message")Set CDOConf = CreateObject("CDO.Configuration")CDOConf.Load -1 ' CDO Source DefaultsSet CDOFields = CDOConf.FieldsWith CDOFields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.1.".Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60'Anonim.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0'Jelszóval:'.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1'.Item("http://schemas.microsoft.com/cdo/configuration/Sendusername") = ""'.Item("http://schemas.microsoft.com/cdo/configuration/SendPassword") = "".UpdateEnd WithSet CDOMsg.Configuration = CDOConfCDOMsg.Subject = MailSubjectCDOMsg.From = MailFrCDOMsg.To = MailToCDOMsg.CC = MailCCCDOMsg.TextBody = MailTextCDOMsg.SendSet CDOMsg = NothingSet CDOConf = NothingSet CDOFields = NothingEnd Sub -
TheSaint
aktív tag
Üdv!
Egy főtáblából szeretnék adott oszlopokat lekérdezni olyan módon hogy a sorok mellé szabadon lehessen megjegyzéseket irogatni és a főtábla változásakor a megjegyzés maradjon az adott sor mellett ahova eredetileg be lett írva.
Kimutatástáblával ez felejtős
Csatolt beillesztéssel előbb-utóbb elcsúsznak a sorok
Adatlekérdezéssel hiába szerkesztem meg PowerQuery-vel szépen, szúrok be üres oszlopot, frissítés után törli a beírt szövegeket...
Van erre megoldás?
Köszi! -
TheSaint
aktív tag
Köszi, hasonlóval próbálkoztam, de mint a példán is látható egy "/" jellel kezdődik minden érték (ami a valóságban hipertitkos vállalati kódolást takar, ami így néz ki: pl.: BZ19/0473 , stb...) tehát nem tudtam egy ilyen egyszerűbb képletre redukálni a tartalmat, amit könnyebb már kezelni.
Azért várok minden ötletet. -
TheSaint
aktív tag
Erre esetleg valaki?
[link] -
TheSaint
aktív tag
válasz
scott_free
#26954
üzenetére
Szervusz!
"1. egy cellában a következő érték van: "Név (1234)" - hogyan tudom ebből kiszedni csak a számot? (számként persze)"
Én erre a KUTOOLS bővítményt használom:
Text Tools - Remove Characters - Non-alpha -
TheSaint
aktív tag
Sziasztok!
Ha valakinek lenne erre megoldása:
=(SZUMHA('W:\Árucikkek\[37526.xlsx]Szerkezeti darabjegyzék (1)'!$C$11:$C$1500;"A 102";'W:\Árucikkek\[37526.xlsx]Szerkezeti darabjegyzék (1)'!$L$11:$L$1500))*G989A külső hivatkozott fájl nevét szeretném változóban használni, az ötjegyű szám már adott a táblázat azonos sorában. Lehetséges?
Illetve arra megoldás, hogy ne kelljen megnyitni a fájlt, hanem nyitás nélkül kiolvassa az adatokat? (Jó, ez tudom meredek...)
Előre is köszi!
Új hozzászólás Aktív témák
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Fallout 4 Pip-Boy Edition
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most Ünnepi áron! :)
- BLACK FRIDAY! - Jogtiszta Windows - Office & Vírusirtó licencek- Azonnal - Számlával - Garanciával
- Apple iPhone 14 Pro Max 256GB, Kártyafüggetlen, 1 Év Garanciával
- Telefon felvásárlás!! Samsung Galaxy A70/Samsung Galaxy A71/Samsung Galaxy A72
- MacBook felvásárlás!! MacBook, MacBook Air, MacBook Pro
- Bontatlan iPhone 16 Pro (128 GB) (rendelhető)
- GYÖNYÖRŰ iPhone 12 mini 128GB White -1 ÉV GARANCIA - Kártyafüggetlen, MS3856, 100% Akksi
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi
én hibáztam egy ponton. Örök hála 

