- Apple iPhone 16 Pro - rutinvizsga
- Samsung Galaxy A36 5G - a középső testvér
- Samsung Galaxy A55 - új év, régi stratégia
- LG V50 ThinQ Dual Screen - az 5G ára
- Honor 200 Pro - mobilportré
- Xiaomi 13 Pro - szerencsés szám
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Magisk
- Honor 400 Pro - gép a képben
- Milyen okostelefont vegyek?
Új hozzászólás Aktív témák
-
sztanozs
veterán
Ha 5 nap alatt át tudod fordítani VBA-ból VB.NET-be (és XLL-be befordítod), akkor nagyjából effektíven meg tudod védeni a belenyúlás és a forráskód megszerzése ellen. Más ésszerű lehetőséged nem nagyon van.
mod: ezt találtam még neked: [link]
Másrészről egyáltalán nem etikus, amit szeretnél. Bár éveket dolgoztál rajta, de ezt a cég érdekében (vsz a munkavégzés automatizálásából) tetted. Bár lehet, hogy rossz érzés magad mögött hagyni, mégis csak legalább annyira (igazából sokkal inkább) a cégé a kód, mint a tiéd. Alapesetben igazából magaddal sem viheted, hacsak a cégtől erre vonatkozóan nem kapsz egyértelmű felhatalmazást.
-
vilag
tag
Valakinek van ötlete hivatkozott problémával kapcsolatban?
+1 kérdés:
Adott egy munkafüzet aminek az egyik lapját (vagy annak tartalmát) másolom egy új munkafüzetbe és mentetem el kód segítségével.
Szerencsére a munkalapon lévő gomb (és a hozzá tartozó kód is) megye vele.Meg lehet-e valahogyan oldani, hogy az újonnan létrejövő munkafüzet "ThisWorkbook"-jába kódot helyezzek el?
Oda szeretném megírni, hogy bezárás előtt ne dobjon fel hibaüzenetet, hanem mindent figyelmen kívül hagyva zárja be.
Nevezetesen:Application.Displayalerts = False
A gombnyomásra lefutó makró miatt ugyan is bezárás előtt megkérdezi, hogy akarok-e menteni.
Ezt viszont nem szeretném, mert a felhasználók amúgy sem tudnak beleírni a munkafüzetbe, így semmi szükség erre, csak összezavarja szegényeket...Sajnos ebben a formában eredménytelen:
Private Sub CommandButton1_Click()
ActiveSheet.PrintOut Copies:=2, Collate:=True
Application.DisplayAlerts = False
End Sub -
Delila_1
veterán
A tegnapi makró egyszerűsítve úgy, hogy az összes cella háttér színezést szüntesse meg, mielőtt a kijelölt sorokat besárgítja:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim kezd As Long, ucso As Long, cim As String
Application.EnableEvents = False
Cells.Interior.Color = xlNone
cim = Target.Address
kezd = Selection.Row
ucso = Range(cim).Row + Range(cim).Rows.Count - 1
Rows(kezd & ":" & ucso).Interior.Color = vbYellow
Application.EnableEvents = True
End Sub -
Delila_1
veterán
Már majdnem kész volt a makró, mikor jött a szerelő.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim elozo As String, kezd As Long, ucso As Long, b As Integer, cim As String
Application.EnableEvents = False
cim = Target.Address
Debug.Print Target.Address
If Range("AA1") <> "" Then
elozo = Range("AA1") & ":" & Range("AB1")
Range(elozo).Interior.Color = xlNone
End If
kezd = Selection.Row
For b = Len(cim) To 1 Step -1
If Mid(cim, b, 1) = "$" Then
ucso = Mid(cim, b + 1, 20) * 1
Exit For
End If
Next
Rows(kezd & ":" & ucso).Interior.Color = vbYellow
Range("AA1") = kezd: Range("AB1") = ucso
Application.EnableEvents = True
End SubItt a kijelölés alsó sorát egy ciklussal kerestetem ki. Ha sikerül elegánsabb megoldást találni rá, megírom.
-
-
Delila_1
veterán
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim elozo As String
Range(Target.Address).Interior.Color = vbYellow
If Range("AA1") <> "" Then
elozo = Range("AA1").Value
Range(elozo).Interior.Color = xlNone
End If
Range("AA1") = Target.Address
End SubSzínezi a kiválasztott területet, majd az AA1-be beírja a jelenlegi területet. A következő kijelölésnél a színezésen kívül az AA1-ben tárolt cím (terület) színezését megszünteti.
-
Delila_1
veterán
Lapfülön jobb klikk, Kód megjelenítése.
Ezzel beléptél a Visual Basik-be, ott is a lapod kódjához. A jobb oldalon lévő nagy üres felületre viheted be az eseményvezérelt makrót. Az üres rész tetején balra a (General) helyett kiválasztod a Worksheet opciót.
Már meg is jelent a makród kezdő- és befejező sora.Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End SubEz a makró akkor indul, ha egy cellát kiválasztasz, magyarul, ha rálépsz. A két sor közé írhatod meg a kódodat, pl.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Interior.Color = vbYellow
End SubA kiválasztott cella háttere sárga lesz.
Adhatsz feltételt, hogy pl. csak az A oszlopban sárgítson.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then
Target.Interior.Color = vbYellow
End If
End SubEzernyi más dolgot is rendelhetsz a makróhoz.
-
Delila_1
veterán
A különbség az, hogy a szintaktika szerint & jelet kell alkalmazni, a + jel értelmetlen.
Csináld a következőt: írj be egy üres cellába egy egyest. Másold Ctrl+c-vel. Jelöld ki a dátumokat tartalmazó cellákat, majd Irányított beillesztés, értéket, a művelet pedig szorzás. Mindegyik dátumos tartományodra végezd el, akkor biztosan egyforma típusúak lesznek az adatok.
-
Ispy
nagyúr
Gugliban ezt találtam, nem tudom segít-e rajtad.
-
csaszizoltan
csendes tag
Keress rá az alábbira:
vba run time error 1004 tulajdonsága nem érhető el
és az alábbi találat:
Excel(VBA) Miért nem működik a .Match parancs?
idézet belőle:
"Azért, mert ha nincs" (itt: találat) ", akkor hibát generál."Értem én, hogy az On Error-nak el kéne kapnia a nem talált eseteket, de hátha a találaton lévő
On Error Resume Next
változat megoldja.Elképzelhető még a hiba okára a változók deklarációjának (Dim) elmaradása.
Másrészt az eső sorba írt
Option Explicit
-tel fordítási időben szűrhetünk hibákat. -
Delila_1
veterán
Elég ennyi:
With Selection
.BorderAround LineStyle:=xlContinuous, Weight:=xlThin 'körbe
.Borders(xlInsideVertical).Weight = xlThin 'belső függőleges
End WihtA stílust és a színt nem kell külön megadni, mert így az alapértékek lesznek érvényesek (xlContinuous és xlAutomatic)
-
sztanozs
veterán
Ezzel le tudod kérdezni a memberhip-et:
Function IsMember(userDomain As String, userName As String, groupDomain As String, groupName As String) As Boolean
Dim grp As Object
Dim grpPath As String, userPath As String
grpPath = "WinNT://" & groupDomain & "/" & groupName
Set grp = GetObject(grpPath & ",group")
userPath = "WinNT://" & userDomain & "/" & userName
IsMember = grp.IsMember(userPath)
End FunctionÍgy hívd meg (angol windows-on - magyaron ugye más az Admin Group neve):
IsMember(Environ("userdomain"), Environ("username"), ".", "Administrators")
-
sztanozs
veterán
Szerintem felesleges Windows API-val küzdeni...
VBS simán átültethető VBA-ba:
Public Sub InstallFont()
Dim objShell As Object ' Shell
Dim objFolder As Object ' Folder
Dim objFSO As Object
Dim srcFolder, srcFile
'Ide kell a Font forrás könyvtára
srcFolder = "\\networkserver\sharedfolder\publicfonts"
'Ide kell a font file neve
srcFile = "code128.ttf"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(srcFolder)
Set objFSO = CreateObject("Scripting.Filesystemobject")
If Not objFSO.FileExists("C:\Windows\Fonts\" & srcFile) Then
Dim objFolderItem As Object ' FolderItem
Set objFolderItem = objFolder.ParseName(srcFile)
On Error Resume Next
objFolderItem.InvokeVerb "Install"
If Err Then
Debug.Print Err.Description
Err.Clear
End If
On Error GoTo 0
Set objFolderItem = Nothing
End If
Set objFSO = Nothing
Set objFolder = Nothing
Set objShell = Nothing
End Sub -
vilag
tag
Kis javítás a kódokban:
1. verzió:
Public szov As String
Public h As Long
Private Sub CommandButton1_Click()
vkod = ""
ossz = 0
szov = Trim(InputBox("Vonalkód értéke:", "Kód bevitel"))
ActiveSheet.Cells(3, 3) = szov
If szov = "" Then GoTo vege
h = Len(szov)
If h > 100 Then GoTo vege
Dim vk(2, 100)
For i = 0 To h
If i = 0 Then
vk(1, i) = Chr(204)
vk(2, i) = 104
Else
vk(1, i) = Mid(szov, i, 1)
vk(2, i) = Asc(vk(1, i)) - 32
End If
If i = 0 Then k = 1 Else k = i
ossz = ossz + vk(2, i) * k
vkod = vkod + vk(1, i)
Next
eossz = ossz Mod 103
ActiveSheet.Cells(2, 2) = eossz
If eossz < 95 Then
vkod = vkod + Chr(eossz + 32) + Chr(206)
Else
vkod = vkod + Chr(eossz + 100) + Chr(206)
End If
ActiveSheet.Cells(2, 3) = vkod
vege:
vege = MsgBox("Konverzió vége!", vbOKOnly, "Vége")
End SubValamiért nem csinálja meg a kiemelést.
Ez a javítás:
If eossz < 95 Then
vkod = vkod + Chr(eossz + 32) + Chr(206)
Else
vkod = vkod + Chr(eossz + 100) + Chr(206)
End If2. verzió:
Public szov As String
Public h As LongPrivate Sub CommandButton1_Click()
vkod = ""
ossz = 0
szov = Trim(InputBox("Vonalkód értéke:", "Kód bevitel"))
ActiveSheet.Cells(3, 3) = szov
If szov = "" Then GoTo vege
h = Len(szov)
If h > 100 Then GoTo vege
j = 1Dim vk(2, 100)
For i = 0 To h
Select Case i
Case 0
vk(1, i) = Chr(204)
vk(2, i) = 104
j = i
Case 1 To 2
vk(1, i) = Mid(szov, i, 1)
If Asc(vk(1, i)) < 195 Then vk(2, i) = Asc(vk(1, i)) - 32 Else vk(2, i) = Asc(vk(1, i)) - 100
j = i
Case 3
j = i
vk(1, i) = Chr(199)
vk(2, i) = Asc(vk(1, i)) - 100
Case Else
' If Application.WorksheetFunction.IsEven(i) = True Then 'XP alatt nem működik!!!
If i Mod 2 = 0 Then 'XP alatt is működik
j = i - ((i - 4) / 2)
s2 = Val(Mid(szov, i - 1, 2))
If s2 < 95 Then vk(1, j) = Chr(s2 + 32) Else vk(1, j) = Chr(s2 + 100)
vk(2, j) = s2
End IfEnd Select
If j = 0 Then k = 1 Else k = j
' If i <= 3 Or Application.WorksheetFunction.IsEven(i) = True Then 'XP alatt nem működik
If i Mod 2 = 0 Then 'XP alatt is működik
ossz = ossz + vk(2, j) * k
vkod = vkod + vk(1, j)
End If
Nexteossz = ossz Mod 103
ActiveSheet.Cells(2, 2) = eossz
If eossz < 95 Then
vkod = vkod + Chr(eossz + 32) + Chr(206)
Else
vkod = vkod + Chr(eossz + 100) + Chr(206)
End If
ActiveSheet.Cells(2, 3) = vkod
vege:
vege = MsgBox("Konverzió vége!", vbOKOnly, "Vége")End Sub
Remélem még hasznos lehet valakinek.
-
-
Delila_1
veterán
Egy ismerősöm úgy oldotta meg, hogy a konvertálásnál a szöveg elé és mögé tett egy-egy csillagot.
A1 tartalmazza a szöveget, a bárkód betűtípust tartalmazó cella képlete pedig ="*" & A1 & "*"Nem minden olvasó tudja ezt követni, de náluk a munkahelyén egyikkel sem volt gond.
-
vilag
tag
Találtam megoldást:
Application.EnableEvents = False
Workbooks.Open (arhiv)
Application.EnableEvents = TrueMegjegyzés: ebben az esetben a makrók letiltása csak a False és True közti eseményekre vonatkozik.
Ha pl. ezután a Close paranccsal bezáratom a megnyittatott "arhiv" minkafüzetet, akkor ha a BeforeClose eseményhez van valami definiálva, akkor az lefut.Szóval, csak jól kell használni és igazán kezes a dolog.
-
martonx
veterán
Pedig szerintem a programod megérett arra, hogy ne egy file-ban legyen. Sok út áll előtted, néhány a teljesség igénye nélkül, megoldási komplexitás szerint növekvő sorrendben:
1. adat részét másik excelbe viszed át
2. adat részét adatbázisba viszed át (ez lehet bármilyen adatbázis, akár csak egy sima access-es kis lokális db)
3. a programot fogod és kompletten átírod valamilyen vastag klienses megoldásra.
4. átírod webalkalmazásra, ugyebár böngésző garantáltan minden gépen van, még mobilon és tableten is. Én ezt a megoldást preferálom, bár én webfejlesztő vagyok, szóval részrehajlok. Ez a legmacerásabb, legnagyobb váltás, ugyanakkor ez a legelőremutatóbb is. -
belaur
tag
Én ezt ugy oldanám meg, hogy csinalok egy Read excel-t ami gombnyomásra/megnyitaskor kilistázza a a Read/Write excel tartalmát, valamint egy Write excel-t amiben lehet szerkeszteni.
Hasonló módszer lehet hogy kimented egy külső fájlba az adatot és azt az egyik excel csak beolvassa a másik pedig szerkeszti is.UI. nemtudom, hogy megoldható-e, de én valahogy igy kezdenék neki a dolognak. A fájl olvasás irás jogosultságokkal lehet galiba imo.
-
sztanozs
veterán
Ha már office - miért nem használsz access-t, abban legalább ez megoldható volna?
Vagy miért nem használsz az excelben korlátozásokat, azt tudod programozottan módosítani. Egyszerűen beállítod, hogy a form mezőők nem módosíthatók és kész. Megfelelő felhasználóknak meg feloldod a zárolást.
[link] -
martonx
veterán
ezt már számtalanszor kitárgyaltuk, de az excel annyira nem erre való. A jogosultság kezelés nem az erőssége.
Egyébként kerülő megoldásokat el tudok képzelni. Az excel megnyitásakor mindenképpen kérsz egy felhasználónév, jelszó párost. Ehhez te csinálnád a formot, meg te tárolnád az excelen belül ezeket az adatokat is. Aztán annak függvényében, hogy ki mihez férhet hozzá, kódból tudsz szabályozni mindent.
De ez azért nem kis macera lesz.
-
martonx
veterán
Ha számlát is akarsz adni, akkor egyéni vállalkozóit érdemes kiváltani. Ha jól rémlik ez ingyenes, csak némi okmányirodai szopás (űrlap, sorban állás stb...) kell hozzá. Meg majd venned kell egy számlatömböt, ha már kaptál adószámot, mint egyéni vállalkozó.
Plusz ettől kezdve valamivel macerásabb lesz az éves adóbevallásod.
Ha netán nem akarod a gatyádat is leadózni, akkor meg el kell kezdeni költség számlákat gyűjteni, könyvelőt fogadni.
Innen csókoltatom a vállalkozásbarát magyar államot. -
martonx
veterán
Elvileg a szabadalmi hivatalnál bármit be lehet jegyeztetni. Én már csináltam olyan programot ami védelem alatt van, de nem én intéztem a bejegyzését.
De ezzel nem sokra mész, ha feltörik, és orrba-szájba ingyen használják. A legjobb, ha minél jobban levéded a kódot. Esetedben ez kimerül a vba projekt jelszavazásában. -
sztanozs
veterán
Inkább a munkaszerződésben szokták kikötni, hogy a cég eszközein (illetve a munkaidőben) végzett szellemi termék jogai felett a cég rendelkezik. Tehát amit a munkaeszközödön, vagy munkaidőben, vagy a munkavégzéssel kapcsolatban készítesz, annak a cég a jogtulajdonosa, nem te és így nem is adhatod el - sem a cégnek, sem másik harmadik félnek.
Persze csak ha ez el van rejtve a munkaszerződésedben. -
martonx
veterán
Miért ne? Kivéve, ha olyan 3rd party open source komponenseket használtál benne, amik GPL liszenszűek.
De általában még ekkor is eladhatod a saját programod, csak éppen előtte meg kell venned a kérdéses 3rd party komponenseket.
A licenszelés mindig kemény ügy, pláne hazánkban, ahol az utolsó, ami az emberek eszébe jut, hogy programot vegyen, pénzért. -
martonx
veterán
Nem különösebben, én leginkább .Net vonalon, ott is ASP.NET-ben mozgok. Egyszer egy Android-os alkalmazás backend-jét fejlesztettem Java-ban, nem ragadott meg.
Tényleg a Referenciáknál az Excel mutatja, hogy melyik hiányzik, látszik, hogy (hál istennek) jópár hónapja már nem kell excel vba-znom. Fontos tudnod, hogy ha kizárólag Excel 2003-ban fejlesztesz, akkor az abban felhasznált referenciák egytől egyig működni fognak az újabb exceleken. Ez visszafelé viszont nem igaz!!!
-
sztanozs
veterán
Trim biztos megy plusz referenciák nélkül is. Az tudom elképzelni, hogy valamelyik referencia felüldefiniálja Trim-et (ami amúgy elég szarul működik alapból)...
Referenciákat magával viszi, de ha nincs ott a fájl (vagy ott van, de nem kompatibilis), akkor nem tudja felvenni.Ebben van egy pár példa: [link]
-
sztanozs
veterán
FYI - http://stackoverflow.com/questions/507191/cant-find-project-or-library-for-standard-vba-functions
Szedjél ki minden nem szükséges referenciát (fenti linken van élda, mi maradjon), az Environ("USERNAME") helyett használd az Application.Username-t. -
martonx
veterán
Hehehe, hát ezért is halnak ki lassan a vastag kliensek. A gondot biztosan az okozza, hogy valamilyen dll hiányzik.
Hogy ez nálatok valamilyen egyedi 3rd party dll volt-e, ami minden gépen ott csücsült, vagy az Office Professional valamilyen saját dll-je, ami az Office Basic-ben nincs csak meg, azt így messziről persze, hogy nem fogjuk tudni neked megmondani.
A hibát dobó gépen pont ugyanúgy tudsz debug-olni, és akkor remélhetőleg pontosabban látszik, hogy hol kapod ezt a hibát. -
martonx
veterán
Én olvastam, meg gondolom mások is, csak nincs kedvünk az exceles önképzésedet megzavarni. Illetve a vélményemet tudod: Amire az excelt most használod, azzal már rég túlléptél a normalitás határán.
Persze tudom, hogy a körülmények erre kényszerítenek, nincs ezzel gond, de ne várd el, hogy az extrémebbnél extrémebb problémáidra ugorjunk. -
vilag
tag
Féli már sikerült megoldani a problémát.
Ahhoz, hogy a tördelés megfelelő legyen a következőket kell tenni:
TextBox tulajdonságainál a következőket kell állítani:
MultiLine=True
ScrollBars=3
WordWrap=TrueSajnálatos módon a Scrollbar csak akkor jelenik meg ha a TextBox fókuszba kerül, így kénytelen voltam programból fókuszba hozni, majd átadni egy másik vezérlőnek a fókuszt.
Ennek az a sajnálatos eredménye, hogy a TexBoxban a szöveg úgy jelenik meg, hogy a szöveg vége látszik azaz az eleje van rejtve, nem pedig a hátulja, ahogy az várható volna.Ennek kiküszöbölésére van valakinek ötlete??
-
vilag
tag
Közben a saját kérdésem nyomán meg is találtam a választ.
A probléma az volt, hogy menet közben programból megnyitottam egy másik fájlt, így az lett az aktív munkafüzet.
Mivel az új aktív munkafüzetben nem volt olyan munkalap ezért a RowSourceot nem tudta beállítani.Szóval mindössze a megnyitás után a ThisWorkBokk.Activate parancsot kellett kiadnom és minden rendbe jött.
-
martonx
veterán
Van rálátásom közszférában dolgozó rendszergazdák (középiskolai rendszergazdától kezdve egyetemi rendszergazdán át, megyei önkormányzat - vagy hogy is hívják mostanában - rendszergazdájáig) munkájára. Ha én egyszer ott dolgozhatnék.
Tudom nem nagy pénz, de mellette napi 8 órában mehet a maszek. -
martonx
veterán
Úgy érted, hogy adatbázisként szeretnéd használni? Mert az ADO tudja adatbázisként használni az excel file-t, anélkül hogy neked kézzel külön vezérelned kellene a megnyitását.
Bár már kifejtettem, hogy kevés szerencsétlenebb dolog van, mint xls-t használni kvázi adatbázisként.
Új hozzászólás Aktív témák
Hirdetés
- exHWSW - Értünk mindenhez IS
- OLED TV topic
- Kerékpárosok, bringások ide!
- Mibe tegyem a megtakarításaimat?
- Lakáshitel, lakásvásárlás
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Székesfehérvár és környéke adok-veszek-beszélgetek
- Fejhallgató erősítő és DAC topik
- Apple iPhone 16 Pro - rutinvizsga
- Xbox tulajok OFF topicja
- További aktív témák...
- AKCIÓ! GAMER PC: Új RYZEN 5 4500-5600X +RTX 3060/3070/3080 +Új 16-64GB DDR4! GAR/SZÁMLA! 50 FÉLE HÁZ
- UHH! HP EliteBook 840 G8 Fémházas Laptop 14" -45% i5-1145G7 4Mag 32/512 FHD IPS Intel Iris Xe Magyar
- Xiaomi Redmi Note 13 Pro 5G - 8/256 - Media Markt garancia
- Xiaomi Redmi 9at - 2/32 - szürke
- Xiaomi Mi8 - 6/128 - fekete
- BESZÁMÍTÁS! MSI B450 TomaHawk R5 5600X 32GB DDR4 512GB SSD RTX 3060 XC 12GB Rampage SHIVA 600W
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB DDR5 RTX 4070Ti Super GAMER PC termékbeszámítással
- Csere-Beszámítás! RTX Számítógép PC Játékra! R5 8400F / RTX 3070Ti / 32GB DDR5 / 1TB SSD
- Dell USB-C dokkolók: (K20A) WD19/ WD19S/ WD19DC + 130W, 180W, 240W töltők
- Lenovo ThinkPad X13 G2 multitouch
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged