Hirdetés

2024. május 3., péntek

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Visual Basic

Hozzászólások

(#1801) sztanozs válasza vilag (#1800) üzenetére


sztanozs
veterán

Domain van, vagy csak egy csomó gép workgroupban?
Domainban simán berakjátok domain policy-be a telepítést és következő újrainduláskor felmegy. Workgroupra meg csak kell csinálni egy command file-t ami végigfut a hálózaton, fellép az összes gépre és felmásolja/elindítja a telepítőt (vagy csak bemásolod a silent telepítést indító cmd-t a startup-ba - ami ha fent van már letörli magát).

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1802) martonx válasza vilag (#1800) üzenetére


martonx
veterán

mondjuk egy .Net telepítés, az kb. két kattintás egy .msi-re.
Ha meg picit ügyesebb a rendszergazda, akkor automatizálja.
Bár a rendszergazdákat ismerve 90%, hogy se nem ügyes, se dolgozni nem akar.

Én kérek elnézést!

(#1803) vilag válasza sztanozs (#1801) üzenetére


vilag
tag

Van esetleg valami hasonló command file mintád?

Valami hasonlót kerestem igazából. Bár sejtem, hogy egy file ikoncserét nemigen lehet belőle levezérelni.
Már az is haladás volna ha egy asztali parancsikon elhelyezést le tudnék vele vezérelni.

Egyébként van domain, szerver meg minden Istennyila.

Azért az vicces lenne ha a rendszergazda gépén is megjelenne a kis telepítőablak :D

(#1804) vilag válasza martonx (#1802) üzenetére


vilag
tag

Bár a mi rendszergazdánk a 90%-ba esik (nem ügyes annyira), azért meg is kell védenem, mert csak mellékesen rendszergazda, emellett ugyan olyan ügyintéző mint bármelyikünk a cégnél. A nemakarás, így betudható a rengeteg ügynek.

Mondjuk ha sokat macerálom valami miatt általában kötélnek áll :)

(#1805) dkaro


dkaro
őstag

Sziasztok!
Remélem jó helyre írok. VBS HTA script írásban szeretnék segítséget kérni.
A célom:
Egy tömbbe kigyűjtöttem egy OU Groupjait.
Szeretném ezeket a groupokat html formban dinamikusan megjeleníteni.
Tehát pl ha x a mérete a tömbnek akkor generáljon le x radiogombot így, hogy:
radiogomb1 értéke tomb(0)
radiogomb2 értéke tomb(1)
stb...

Tudom, hogy kicsit összetettebb de remélem valaki tud segíteni.
Azt fontos megjegyezni, hogy nem egész 2 napja "foglalkozgatok" vbssel.:)
Előre is köszönöm a segítséget!
dkaro

(#1806) martonx válasza dkaro (#1805) üzenetére


martonx
veterán

Szia!

Egy for ciklussal bejárod a tömböt, és mondjuk egy div-be (ami a DataArea) belerakod a rádió gombokat.
strHTML = strHTML & "<input id=" & intButtonCount & " type="radio value= " & tomb(i) & ">"
És az összeállított rádió gombokat így rakod bele a div-be:
DataArea.InnerHTML = strHTML

Én kérek elnézést!

(#1807) dkaro válasza martonx (#1806) üzenetére


dkaro
őstag

Köszönöm!!!

(#1808) dkaro


dkaro
őstag

Akkor újabb kérdésem lenne (gondolom lesz még:)):
Adott ez a script részletem:
Célja az lenne hogy kiiratom a Printers ouban található Csoportokat (mind univerzális biztonsági csoport)
<script language="vbs">
Set objOU = GetObject("LDAP://srv0101vg/ou=Printers,ou=cég,dc=varosgazda,dc=hu")
objOU.Filter = Array("group")
For Each objGroup in objOU
document.write("<option value='"&objGroup.Name&">"&objGroup.Name&"</option>")
Next
</script>

Nos ki is listázza a csoportokat de nem mindet. Csak 13at a 29ből hibát pedig nem kapok.
Mit kéne máshogy írnom?
Köszönöm!

---
Szerk:
Pontosítanék. Minden 2kat ír csak ki. Ez vmi triviális hiba lehet.:)

[ Szerkesztve ]

(#1809) dkaro


dkaro
őstag

Hát megvan télleg triviális. Lemaradt egy ' a > előtt.:)

(#1810) Gülredy


Gülredy
tag

Sziasztok!
Remélem jó helyre írok, Excel-es visual basic-ből kérnék egy apró segítséget.

Egy nagyobb feladat részfeladata lenne, hogy egy listbox-ba bevitt tartalmat (gomb nyomásra bevitt tartalmat) egy export gomb nyomására egy txt fájlba kell exportálni.
Ez meg is lenne, de megvan adva hogy milyen formátumba kell exportálni, az én megoldásommal pedig ugyan úgy exportálja ahogy a listában van!

Szóval itt az én kódom:

Private Sub CommandButton_export_Click()

Dim i As Long
Open "D:\export.txt" For Output As #1
For i = 0 To lista.ListCount - 1
lista.Selected(i) = True
Print #1, lista.List(lista.ListIndex)
Next
Close #1
End Sub

Ez így exportálja nekem a listát fájlba: (az adatokat csak találomra írtam)

Márai
Füveskönyv
1980
Verseskötet
----------

De ilyen módon kellene beírnia a fájlba:
szerző1;cím1;1999;Regény

Hogyan tudnám a jelenlegi kódomat módosítani ahhoz hogy formázott legyen? Vagy teljesen más kódot kellene használni hozzá?
Régen tanultam már a visual basic-et...

Előre is köszönöm a válaszokat!

(#1811) martonx válasza Gülredy (#1810) üzenetére


martonx
veterán

fileba = ""
For i = 0 To lista.ListCount - 1
lista.Selected(i) = True
fileba = fileba & lista.List(lista.ListIndex) & ";"
Next
Print #1, fileba

Annyiból nem tökéletes, hogy a legutolsó ;-t le kell majd hagynod a végéről. De valamit te is csinálj :DDD

Én kérek elnézést!

(#1812) Gülredy válasza martonx (#1811) üzenetére


Gülredy
tag

Nagyon köszönöm ez pont úgy működik ahogy kell!
Ráadásul ha egymás után veszek fel két rekordot akkor szépen külön sorba is rakja!
Úgyhogy nagyon eltaláltad a működését!
Nem kell levágnom a végéről se semmit mert ez így van jól!

Annyit kérdeznék még, hogy a működését jól értelmezem-e?

készítünk egy fileba nevű változót ami üres lesz
Lesz egy for ciklus az első elemtől az utolsó lista elemig.
majd itt ez a rész nem teljesen tiszta, hogy a fileba nevű változóna értékül adjuk önmagát, és ahhoz hozzáfűzzük a lista i-edik elemét + ;

De ettől miért marad egysorban? :)

(#1813) Gülredy


Gülredy
tag

Az előbbi feleadatot befejeztem, amely egy windows form-on végzendő feladat volt.

Most egy exlcel worksheet-en végzett feladathoz kellene segítség. Ilyen macro-s dolgokat még nem tanultam soha, de ez a kiadott feladat.

Szóval a problémám egyszerű, mégsem találok rá megoldást.
Van az excel táblázaton egy combobox, amelynek értéket kell adni. Ezt meg is tudom tenni, de csak úgy működik az én verzióm, ha a visual basic editorból lefuttatom. De így a felhasználó meg nem fogja látni a három variációt, csak ha elindítaná a programot.
Próbáltam a general részbe berakni, de úgy meg akárhányszor futtatom a programot mindig hozzáadja a három kategóriát a kategória combobox-hoz így nem három lesz belőlük hanem annyiszor három ahányszor futtatom a programot!

Szóval itt a kód. (így nem látja a user megnyitáskor a három kategóriát, csak ha F5el lefuttatja visual basicből)
Private Sub Worksheet_Activate()
With ActiveSheet.ComboBox1
.Clear
.AddItem ("Regény")
.AddItem ("Verseskötet")
.AddItem ("Folyóirat")

End With
End Sub

Hogyan tudnám a combobox-nak értékül adni ezt a három kategóriát úgy, hogy az már a dokumentum megnyitásakor benne legyen. Ha lehet kerülném a cellákból betöltött adatkénti megadást. De ha nincs más...

(#1814) Gülredy válasza Gülredy (#1813) üzenetére


Gülredy
tag

Már tárgytalan!

(#1815) martonx válasza Gülredy (#1812) üzenetére


martonx
veterán

azért marad egy sorban, mert egyben adjuk át neki az összefűzött értékeket.

Én kérek elnézést!

(#1816) Gülredy


Gülredy
tag

Hogyan tudnám ezt a kódot úgy módosítani, hogy ne egy megadott intervallumot írjon ki pl A9:D9-ig hanem mondjuk A9:D9-től lefele az összes sort (balról jobbra) addig amíg van olyan cella amiben adat van?
Mert ha csak egy nagyobb számot írok a D-nek akkor egy csomó ;-t rak a fájlba, ami meg viszont kell, mert így kell kinéznie a fájban az adatoknak, mindnek külön sorba.
szerző1;cím1;kiadáséve1;kategória1;
szerző2;cím2;kiadáséve2;kategória2;
....

Szóval amit beolvas a cellákból azok is ugyan ebben a sorrendben vannak, csak az nem megy hogy ne csak egy sort olvasson be, hanem annyi sort amennyiben adat van!

Private Sub CommandButton3_Click()

Dim ce As Range
Open "D:\export_from_xls.txt" For Append As #1
fileba = ""
For Each ce In Range("A9:D9")
fileba = fileba & ce.Value & ";"
Next ce
Print #1, fileba
Close #1

End Sub

(#1817) stigma


stigma
addikt

Hali abban kérnék segítséget, hogy lenne egy kivételkezelés amihez help-et kérnék.
3 textbox egy formon amiben egy adott dátum nap,hónap, év eredményét adom meg, majd azt a későbbiekben felhasználom, átalakítva dátummá.
Ehhez kellene valami error kezelés, mégpedig ha rossz dátumot adok meg az adott metódus ne induljon el vagy dobjon ki hibát, elég lesz egy msgbox is.(itt az intervallumokat már lekezeltem)

sub lista()
...
on error goto errorhandler:
datum= ev.text + "." + nap.text + "." + textbox1.text (Ebből lesz a dátum)
if not isdate(datum) then
msgbox("Nem dátum formátum")
on error goto 0 'Dobjon üzenetet, álljon le a form futtatása
elseif datum = " " then
msgbox("Üres")
on error goto 0 'Dobjon üzenetet, álljon le a form futtatása
else
folytatódjon a többi parancs lefutása
itt próbáltam "on error resume next"-el, de sajnos semmit nem csinál.

errorhandler:
msgbox err.descreption ' ide leeht inkább switch case -el kellene error-t kezelnem
exit sub

Segítséget előre is köszönöm, bocs ha nagy hülyeséget kérdeztem csak eléggé fáradt vagyok és ma meg kéne oldanom a problémát.

....iPhone 13 / iPad 9th Gen. Wifi 64GB...

(#1818) martonx válasza stigma (#1817) üzenetére


martonx
veterán

Amit írtál kódot nem tűnik rossznak, szóval nem igazán értem, hogy most mi is a bajod?
Hogy kell bezárni a form-ot, a msgbox után? Vagy mit szeretnél tudni?
Esetedben abszolút nem kell az on error-okkal szórakozni. Simán használod az IsDate függvényt, és ennek értelmében vagy hibát jelzel vissza a felhasználónak vag futtatod a kódot.

Én kérek elnézést!

(#1819) stigma válasza martonx (#1818) üzenetére


stigma
addikt

Útközben sikerült megoldanom a problémát, bocsesz.
Amúgy lényegében a textbox-ok összerakása dátummá kellett, mivel ebből a dátumból építkezett tovább a moduljaim és maga a form ezért kellett volna hibakezelés rossz dátum esetén ne legyen gond, hanem inkább hibaleállás.

Esetleg olyan kérdésem, lenne még, hogy lehet megoldani azt hogy a GetOpenFilename -el új ablak nyíljon meg ha egy fájlt kiválasztok?
Probléma az hogy Reflection-ben ami WRQ rendszer, VBA van aláépítve de egy átírtabb verzió, amiben nincs Dialog metódus hogy előhívjam csak GetOpenFilename van ami ha megnyitok egy fájt az elérési útját adja vissza.
fileToOpen = Application .GetOpenFilename("Text Files (*.txt), *.txt")

....iPhone 13 / iPad 9th Gen. Wifi 64GB...

(#1820) martonx válasza stigma (#1819) üzenetére


martonx
veterán

sosem használtam Reflection X-et. Passz.

Én kérek elnézést!

(#1821) stigma válasza martonx (#1820) üzenetére


stigma
addikt

:R
Azért köszönöm, ha valami lesz még írni fogok.

....iPhone 13 / iPad 9th Gen. Wifi 64GB...

(#1822) dkaro


dkaro
őstag

Sziasztok!
Most a multiple selecttel akadtam el. Úgy olvastam hogy egy stringben tárolódik le az értéke a kiválasztott elemeknek vesszővel elválasztva. Adott ez a kód:
<html>
<head>
<title>My HTML application</title>
<HTA:APPLICATION
APPLICATIONNAME="My HTML application"
ID="MyHTMLapplication"
VERSION="1.0"/>

<script language="VBScript">
Sub RunScript
Dim strValaszt
strValaszt = ertek.value
document.write("<span>"&strValaszt&"</span>")

End Sub
</script>
</head>

<body bgcolor="white">
<form>
<select multiple="multiple" size="3" name="ertek">
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
</select>
<input type="button" value="próba" onClick="RunScript">
</form>

</body>
</html>

Csak az első kijelölt elem kerül bele a változóba. Hogy tudom belevarázsolni mindet?
Köszönöm!

(#1823) martonx válasza dkaro (#1822) üzenetére


martonx
veterán

Sub RunScript
For i = 0 to (ertek.Options.Length - 1)
If (ertek.Options(i).Selected) Then
strComputer = strComputer & ertek.Options(i).Value & vbcrlf
End If
Next
Msgbox strComputer
End Sub

Én kérek elnézést!

(#1824) Gülredy


Gülredy
tag

Sziasztok!

Egy olyan kérdésem lenne, hogy hogyan tudnék excel-ből sql adatbázsiba exportálni oszlopokat?

Van egy próbálkozásom de nem tudom hogy hogy tudnám megadni az oszlopokat mert mindenre hibát dob!

Dim strSQL As String
Dim strXLSource As String
Dim lngRecsAff As Long


strConn = strConn & "Provider=SQLOLEDB;Data Source=;"
strConn = strConn & "Initial Catolog=;Trusted_Connection=YES"
Set cn = New ADODB.connection
cn.Open "DRIVER={MySQL ODBC 5.1 Driver}" _
& ";SERVER=localhost" _
& ";DATABASE=test" _
& ";UID=root" _
& ";PWD=root" _
& ";OPTION=16427"
strXLSource = "c:\david\test\Munkafüzet1.xlsm;Extended Properties=Excel 12.0"


'
'Import by using OPENDATASOURCE.
'
'INSERT INTO
'(SQL Fields)
'
'SELECT
'
'FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=$]

strSQL = "INSERT INTO valuta (a)"
strSQL = strSQL & "VALUES "
'strSQL = " INSERT INTO valuta VALUES "
'SELECT a, b, c FROM valuta"
'strSQL = strSQL & " ([a]) "
'strSQL = strSQL & " SELECT [a] "
'strSQL = strSQL & " FROM "
'strSQL = strSQL & " OPENDATASOURCE('valuta', 'Data Source=" & strXLSource & "')...[tbla$] "

Debug.Print strSQL

cn.Execute strSQL, lngRecsAff, adExecuteNoRecords

Debug.Print "Records affected: " & lngRecsAff

End Sub

Valójában ezt az strSQL-es részt nem igazán értem hogy hogyan adhatnám meg!
Egy értéket meg tudok adni sql szintaxissal de nekem egész oszlop adatait kellene exportálni!

(#1825) martonx válasza Gülredy (#1824) üzenetére


martonx
veterán

strSQL = "INSERT INTO valuta (a,b,c)" - itt adod meg, hogy mely sql mezőkbe akarsz értéket beszúrni.
strSQL = strSQL & "VALUES (" cells(sor,oszlop).text ")" - kell két and jel természetesen, csak a billentyűzetem szar.

Az egészet pedig egy for vagy while ciklussal annyirszor futtatod ahány sorod van.

Én kérek elnézést!

(#1826) Gülredy válasza martonx (#1825) üzenetére


Gülredy
tag

For i = 1 To 20

strSQL = "INSERT INTO valuta (b)"
strSQL = strSQL & "VALUES (" & Cells(20, a).Text & ")"
Next i

Valahogy így?

A második sorra Application defined or Object Defined error-t nyom!

[ Szerkesztve ]

(#1827) Gülredy válasza Gülredy (#1826) üzenetére


Gülredy
tag

Már rájöttem mit rontottam el nem tudom miért a-t írtam oszlop indexnek :)

Most így néz ki eddig, működni működik csak az a baj hogy csak az utolsó számot írja bele de azt 20x!
Tehát beleraktam a program végét is (az exportálást) a for ciklusba, így beírja 20x de csak az utolsó számot! Nekem meg pl az A oszlop 20. eleméig mindet bele kellene íratni.

For i = 1 To 20

strSQL = "INSERT INTO valuta (b)"
strSQL = strSQL & "VALUES (" & Cells(20, 1).Text & ")"

Debug.Print strSQL

cn.Execute strSQL, lngRecsAff, adExecuteNoRecords

Debug.Print "Records affected: " & lngRecsAff
Next i

Mit rontok el szerinted?

[ Szerkesztve ]

(#1828) Gülredy


Gülredy
tag

Megvan a megoldás (figyelmetlen voltam) a hozzászólásom tárgytalan! :)

(#1829) DerStauner


DerStauner
senior tag

helló!

a social msdn-n eddig nem kaptam választ a kérdésemre, ezért itt is feltenném:

hogyan tudok egy datagridview cellához egy picturebox-ot hozzáadni? nem imagecell-re van szükségem, hanem egy textbox cell-re, aminek a jobb sarkában van egy picturebox. és ami fontos, hogy mindig látható legyen, tehát edit mode-ban is. egy custom column-t szeretnék létre hozni. ez lenne az első lépés (picturebox hozzáadása a cell-hez). de a neten nem találok semmit. a microsoft host control-os példáját próbáltam, nem az kell nekem.

tudjátok, minden control-nak van Controls tömbje, és akkor írhatom, hogy Controls.Add(picturebox). de úgy néz ki, hogy a cell-nek nincs.

(#1830) martonx válasza DerStauner (#1829) üzenetére


martonx
veterán

Ez most winforms, wpf, silverlight, vagy asp.net? Winforms-al nem hiszem, hogy tudnál valaha is ilyet csinálni.

Én kérek elnézést!

(#1831) sztanozs válasza DerStauner (#1829) üzenetére


sztanozs
veterán

Esetleg ha a cell teljes Paint-jét te valósítod meg...

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1832) vilag


vilag
tag

Sziasztok!

Egy újabb problémával találtam szemben magamat.

A probléma az lenne, hogy egy excel dokumentumot úgy akarok megnyitni, hogy egyből a userform jelenjen meg, viszont (mivel ez nem túl nagy) a háttérben maga az extel tábla ne is látszódjon.

A googliban kutakodva meg is találtam amire szükségem van, de sajnos nem egészen úgy történik minden ahogyan én szeretném.

Már több megoldással is próbálkoztam de eddig csak félsikert értem el mindegyikkel.
1.

Private Sub Workbook_Open()

Application.WindowState = xlMinimized
UserForm1.Show

End Sub

Ebben az esetben a munkafüzet megnyitásakor az valóban a tálcára kerül, viszont a userform-al együtt.

2.

Private Sub CommandButton1_Click()

Application.WindowState = xlMinimized
UserForm1.Show

End Sub

Ellenben ha egy úgy van megcsinálva, hogy a munkafüzetben van egy gomb, amihez ugyan ez a kód van beírva, akkor a gombnyomásra úgy működik ahogyan kell.
Csak ugye pont ezt szeretném elkerülni, mert semmi szükség még egy felesleges gombnyomásra.

-----------------
Próbáltam már magából a userform initializálásból megcsinálni, de az eredmény ugyan az mint a 2. esetben.
Próbáltam már a userform initializálásból meghívni a kattintást, de az nem tetszett neki.
Próbáltam már az első programkódot megcserélni, azaz előbb nyitni a userformot aztán minimalizálni, de ekkor nem történik semmi.
Próbáltam már az első verzió után valahogyan aktiválni a munkafüzetet, de ez sem sikerült.

Van esetleg valakinek valami használható megoldása?

------------------

Lenne még egy olyan kérdésem, hogy valahogyan ki lehet e nyerni, hogy az altív munkafüzeten kívül van e még nyitva másiki munkafüzet?
Kérdezem ezt azért, mert mondjuk egy kilépés gombnál akkor le tudnám vezérelni, hogy csak az aktív munkafüzetet zárja e be, vagy az egész excelt.
Így elkerülhető lenne, hogy a felhasználónál nyitva lévő (és esetleg mentetlen) más munkafüzetet is bezárjak. (Az application.displayalerts direkt falsra van állítva).

Előre is köszönöm!

[ Szerkesztve ]

(#1833) sztanozs válasza vilag (#1832) üzenetére


sztanozs
veterán

Egyrészt, ha Excel Addint csinálsz, akkor nem látszik a worksheet, de tud futni kód.
Másrészt el tudod takni kicsibe (minimized) a worksheetet, de így is látható marad (és megszünteti a többi ablak "Maximized" állapotát
Harmadrészt megnyitás után is át tudod rakni Add-in típusba, viszpnt úgy nem fogod tudni menteni a save gombbal, csak formról.

Add-in-be átrakni megnyitáskor:
Private Sub Workbook_Open()
Me.IsAddin = True
End Sub

Mentést viszont kézzel kell csinálnod, mert addin típusú excel-t nem lehet xls/xlsm-be menteni, csak xla-ba. Így mentés előtt kézzel ki kell szedni az Addin property-t (ami láthatóvá teszi a sheet-et - de jól lekódolva csak a mentés idejére).

ThisWorkbook:
Private Sub Workbook_Open()
Me.IsAddin = True
Set UserForm1.App = Me
UserForm1.Show False
End Sub

Public Sub WB_Save()
Me.IsAddin = False
Me.Save
Me.IsAddin = True
End Sub

UserForm:
Public App As Object

Private Sub CommandButton1_Click()
App.WB_Save
End Sub

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1834) vilag válasza sztanozs (#1833) üzenetére


vilag
tag

Igazából csak annyit szeretnék elérni, hogy az excel megnyitása után azonnal csakis a userform látszódjon. Se a munkalap, se pedig az üres excel ablak ne látszódjon, csak és kizárólag a userform.

A táblába jelen esetben semmiféle kivétel-visszaírás nem történik!
Gyakorlatilag kódból fut minden.
Az egész csak annyit csinál, hogy gombnyomásra kiválasztott fájlt/fájlokat bizonyos helyre másol. Kilépéskori mentésre semmi szükség.
Rendben, valamint egy kilépés gomb.

--------------------

A több munkafüzetes problémára esetleg valami megoldás?

Üdv, vilag

(#1835) sztanozs válasza vilag (#1834) üzenetére


sztanozs
veterán

Form properties:
Show Modal - False
Window Position - Center Screen

Több Workbookra - csak a formosat zárja be:
Kód - Workbook:
Private Sub Workbook_Open()
Application.WindowState = xlMinimized
Set UserForm1.wb = Me
UserForm1.Show
End Sub

Kód - Form:
Public wb As Object

Private Sub CommandButton1_Click()
Dim wcount As Integer
Dim twb As Workbook
wcount = 0
For Each twb In Application.Workbooks
wcount = wcount + 1
Next
If wcount = 1 Then
Application.Quit
Else
Application.DisplayAlerts = False
wb.Close False
End If
End Sub

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1836) dkaro válasza martonx (#1823) üzenetére


dkaro
őstag

Köszönöm a segítséget így nyert.
Most újabb hibánál akadtam el:
Sub RunScript
For i = 0 to (nyomtato.Options.Length - 1)
If (nyomtato.Options(i).Selected) Then
strComputer = strComputer & nyomtato.Options(i).Value & "%"
End If
Next
Dim tomb
Dim objGroup
Const ADS_PROPERTY_APPEND = 3
tomb = Split(strComputer,"%")
For j = 0 To (UBound(tomb))
Set objGroup = GetObject("LDAP://srv/"&tomb(j)&",ou=Printers,ou=SZE,dc=domain,dc=local")
objGroup.PutEx ADS_PROPERTY_APPEND, "member", Array("cn=user,ou=SZE,dc=domain,dc=local")
objGroup.SetInfo
next
End Sub

Ez a script azt lenne hivatott csinálni, hogy a multiple selectben kiválasztott csoportokba berakja a user.
Sajnos 80005000-es hibaüzenetet kapok. Ettől függetlenül bekerül a user az összeskijelölt csoportba de a hibaüzenet zavar.
Természetesen rendszergazdaként futtatom a scriptet.
Köszönöm!

(#1837) martonx válasza dkaro (#1836) üzenetére


martonx
veterán

debug mit mutat? Melyik sornál van a hiba?
Másrészt, ha végeredményben megcsinálja a script amit kell, a hibaüzenetet egy On Error Resume Next-el meg lehet kerülni.

Én kérek elnézést!

(#1838) dkaro válasza martonx (#1837) üzenetére


dkaro
őstag

Szia!
A GetObject sorra dobja a hibát(első karakter).

(#1839) sztanozs válasza dkaro (#1838) üzenetére


sztanozs
veterán

Az srv helyére illendő volna beilleszteni az AD szerver nevét (vagy kihagyni és rögtön az ldap path definíciót írni)... Ja és használj kód beillesztést.

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1840) dkaro válasza sztanozs (#1839) üzenetére


dkaro
őstag

srv a szerver neve.
Mit értesz kódbeillesztésen?

(#1841) sztanozs válasza dkaro (#1840) üzenetére


sztanozs
veterán

A tomb(j)-ben rendesen van formázva a nyomtató neve?
GetObject("LDAP://srv/" & tomb(j) & ",ou=Printers,ou=SZE,dc=domain,dc=local")
a "rendesen" alatt a cn=csoportnév formát értem.

Kódbeillesztésre ezt*
//kód
dim valami as Variant
valami = 1
// még kód
dim masvalami as Variant
masvalami = valami

* Kattintható kódok és arcocskák, második sor, első gomb: [Programkód]

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1842) sztanozs válasza sztanozs (#1841) üzenetére


sztanozs
veterán

Amúgy vsz amiatt csinál(hat)ja, mert a tömb utolsó eleme üres:
3 printert kiválsztva
strComputer tartalma ez lesz: cn=printer1%cn=printer2%cn=printer3%
az ebből generált tomb pedig ez:
(
"cn=printer1",
"cn=printer2",
"cn=printer3",
""
)

Szóval nem ártana levágni az strComputer utolsó karakterét :)

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1843) sztanozs válasza sztanozs (#1842) üzenetére


sztanozs
veterán

Ja - és ahogy mondani szoktuk - nem ártana debogolni... Sok kérdést meg lehet vele spórolni:
0. Megoldás
1) azon a soron, ahol megáll, megnézed a változók értékét...

1. megoldás
1) Problémás sorra rámész
2) F9 vagy sor elé (szürke sávra) kattintasz - Breakpoint
3) még egyszer futtatod a kódot és megnézed, mi a sorban található változók értéke - a problémák nagy része a helytelenül használt / inicializált változókból adódik.

2. megoldás
1) Problémás sor elé beszúrsz egy sort:
On Error Resume Next
2) Problémás sor után beszúrod az alábbiakat:
If Err Then
MsgBox Err & vbCrLf & Err.Description
Err.Clear
End If
On Error Goto 0

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1844) dkaro válasza sztanozs (#1843) üzenetére


dkaro
őstag

Szia!
Köszönöm a segítséget és a tippeket!
Tényleg az utolsó karakter volt a hiba.
Levágtam és lefut rendesen.
Köszi!

(#1845) vilag válasza sztanozs (#1835) üzenetére


vilag
tag

Hali!

Az ötleted sokat segített a modul tekintetében.
a Show Modal = False az jó volt, de Window Position tulajdonsága nincs a userformnak.

Végül is úgy sikerült megoldani, hogy ötvöztem az általad javasoltat a saját ötlettel, azaz a Show Modal-t Falsra állítottam, illetve a userform initializáláshoz beírtam ezt:
Application.WindowState = xlMinimized

A kettő együtt végül is azt csinálja amit szerettem volna :)

A több Workbook-ra kínált megoldással még nem volt időm foglalatoskodni, mert a másik sürgősebb.

Azzal igazából azt szeretném megoldani, hogy amikor a userformon megnyomom a kilépés gombot, akkor megvizsgálja, hogy van e nyitva másik munkafüzet is vagy sem. Ekkor kettéválna a folyamat:
1. Az eredmény az, hogy nincs nyitva másik munkafüzet -> zárja be az egész excelt
2. Az eredmény az, hogy van nyitva másik munkafüzet -> csak ezt a munkafüzetet zárja be.

A két különböző bezárást le tudom vezérelni, igazából a vizsgálatot nem tudtam megoldani.

Remélem az általad vázoltal meg tudom majd oldani.

Üdv, vilag

[ Szerkesztve ]

(#1846) sztanozs válasza vilag (#1845) üzenetére


sztanozs
veterán

A hozzászólásomban a CommandButton1_Click() metódus pont azt csinálja, amit szeretnél...

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1847) PumpkinSeed


PumpkinSeed
addikt

Van valami kötelező olvasmány ami segít egy kezdőnek? Mit ajánlotok? Most kezdett érdekelni ez a téma. :))

"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán

(#1848) vilag válasza sztanozs (#1835) üzenetére


vilag
tag

Üdv!

Csináltam magamnak egy kis időt és megnéztem a több munkafüzetes megoldást is.

A megoldás működik...csak fordítva :)

Igazából azt írtad, hogy ha csak egy munkafüzet van nyitva, akkor csak a munkafüzetet zárja be, és ha több akkor pedig az egész programot :)

De a problémát megoldottam.
A hiba a következő volt:

Private Sub CommandButton1_Click()
Dim wcount As Integer
Dim twb As Workbook
wcount = 0
For Each twb In Application.Workbooks
wcount = wcount + 1
Next
If wcount = 1 Then helyette 0 kell
Application.Quit
Else
Application.DisplayAlerts = False
wb.Close False
End If
End Sub

Valamint a wb.Close -ra hibát dob, így azt átírtam twb-re (de így sem működött), így átírtam ThisWorkbook-ra.
Meg annyi, hogy én ez után a hibajelzést újra true-ra állítottam, hogy a nyitva maradt munkafüzetekben működjön. Bár lehet, hogy ez csak adott munkafüzetre vonatkozik.
Az igazat megvallva ezt nem tudom.

Mindent egybevéve, nagyon köszönöm a segítséget, most több programomba is beépítem a megoldást.

Üdv, vilag

(#1849) sztanozs válasza vilag (#1848) üzenetére


sztanozs
veterán

A wb a Form1 egy lokális változója, amit inicializáláskor töltesz fel, ahogy - szintén ugyanabban a hszban - írtam is:
Kód - Workbook:
Private Sub Workbook_Open()
Application.WindowState = xlMinimized
Set UserForm1.wb = Me
UserForm1.Show
End Sub

Kód - Form:
Public wb As Object

wcount=0-ra:
Addin-moódba teszed végül a workbook-ot? Akkor tényleg nem jelenik meg a workbook-ok között.

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1850) sztanozs válasza sztanozs (#1849) üzenetére


sztanozs
veterán

ThisWorkbook az igazi. Nem kell hackelni a lokális változóval - csak nem jutott az eszembe... :)

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Visual Basic
Copyright © 2000-2024 PROHARDVER Informatikai Kft.