Visual Basic - Szoftverfejlesztés fórum

üzenetek

hozzászólások


lenkei83
(tag)

Szia!

Közben az Excel fórumban kitárgyaltuk, feltöltöttem ide a táblát: [https://1drv.ms/x/s!Ans3TmRiC9RGhaMx1z_INz4zg7X91Q?e=lSc26r]


Diopapa
(addikt)

Sziasztok, egy kis segítség kellene... Van 2 formom, nevezzük az egyiket Egyesnek, a másikat Kettesnek. Az Egyes fő formon deklarálva van egy public változó. Erről a formról van meghívva egy backgroundworker. Ez a BGW a Kettes formon levő függvényt használ. Ezen a Kettes formon levő függvényben az Egyes formon levő public változó tartalmát "nothing"-nek látja. Ugyanezen függvény használata nem BGW-vel természetesen a változó valós értékét mutatja.

Mit rontok el? Válaszaitokat előre is köszönöm!


sztanozs
(veterán)
Blog

Nem adod át a kettes formnak az egyes form létrehozott objektumának a referenciáját.
Ha esetleg Static változó lenne, akkor erre nem lenne szükség, de ez nem egy szép megoldás.


pmonitor
(aktív tag)

Ha egyik formból szeretnél hozzáférni egy másik form metódusához/változójához, az általában rossz program szerkezetre utal. Vb.Net-ben meg tudod oldani, hogy az ilyeneket modulban valósítod meg.

@sztanozs: Meg ha átadná, akkor sem fér hozzá egy control-hoz a DoWork()-ban. Csoda, hogy egyáltalán nem száll el a futásidőben.


sztanozs
(veterán)
Blog

Nem egy kontrolhoz akar hozzáférni (amit amúgy kézzel lehet publikusnak is deklarálni, csak az IDE rakja alapból Private-ba) - ha elolvastad volna a kérdést -, hanem egy publikus változóhoz.

Amúgy tervezésileg tényleg katyvasz, hogy egy BGW egy másik formon levő függvényt használ, de egy változóhoz vagy függvényhez való hozzáférés nem gond.

[ Szerkesztve ]


pmonitor
(aktív tag)

Miért? A Form nem Control?

szerk.:
Valahogy így lehet ezt megcsinálni:
Imports System.Threading
Public Class Form1

Public variable As Integer

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync(Me)
Timer1.Start()
End Sub


Sub Update()
Text = variable
End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim frm As Form1 = e.Argument
For i = 1 To 100
If (frm.InvokeRequired) Then frm.Invoke(New MethodInvoker(AddressOf Update), Nothing)
Thread.Sleep(1000)
Next
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
variable += 1
End Sub
End Class

[ Szerkesztve ]


sztanozs
(veterán)
Blog

Igen, de a Formnak nem a UI Thread által piszkált részében akar bármit is csinálni.


pmonitor
(aktív tag)

Igaz. De akkor meg kérdés, hogy BGW nélkül hogy olvassa ki? És még jól is működik Neki.


sztanozs
(veterán)
Blog

Úgy működött gondolom, hogy a F2 függvénye vagy statikus volt, vagy magát az F2-t a BGW-ben példányosította (pl mint egy progress form).

[ Szerkesztve ]


Diopapa
(addikt)

Köszi, hogy gondolkodtatok rajta, közben megoldottam. Public volt a változó, eddig ezzel nem volt gond ebben a formában csak most a BGW miatt. Most Public Shared lett és egyből átadta az egyik változó az értéket a másiknak.

Köszi mégegyszer.


sztanozs
(veterán)
Blog

Ez milyen VB egyébként? VBA (Office), VB6 vagy VB.NET?


pmonitor
(aktív tag)

Tuti, hogy .Net.


Vladek83
(tag)

Sziasztok!

a következő kód nem azt csinálja, amit szeretnék, 2 tizedesig kellene, hogy számoljon, de sajnos kerekít.:

TextBox1.Text = Format(Val(TextBox1.Text), "0.00")

Turtam a netet, de eddig semmi..?

Üdv,


sztanozs
(veterán)
Blog

Ez csak két tizedesre formálja a kiíratást, ténylegesen nem kerekíti két tizedesre.

Szerintem:
TextBox1.Text = Format(Int(100*Val(TextBox1.Text))/100, "0.00")

[ Szerkesztve ]


Vladek83
(tag)

Szia,

ezt találtam, ez most működik:

Dim aNumber As Double = TextBox1.Text
      TextBox1.Text = aNumber.ToString("n2")

[köszönöm] kipróbálom :R


zakoss
(tag)

Sziasztok,

Abban szeretnék segítséget kérni, hogy van-e valakinek olyan működő scriptje ami outlookban a kijelölt levelek mellékletek,csatolmányait (.docx, .pdf) kinyomtatja ha meghívom a makrót hozzá.

Találtam hozzá oldalakat amiken kis átalakítást kellett hozzátenni, hogy működő legyen, viszont az alapértelmezett nyomtatóra nem küldi ki pl: Print Attachments on Selected Messages

Előre is köszi a segítsgéget.


bszilvagyi
(csendes tag)

Sziasztok!
Esetleg valaki foglalkozott már VB6 alatt webkamera kezeléssel? Elavult dolog, az egyszer biztos, de sajnos a célgép ennyit tesz lehetővé.

Jelenleg az avicap32-vel működik a dolog, viszont a 640x480-as limit elég kevés, a kamera HD-t is tud.
A program maga annyi, hogy egy gomb megnyomására az éppen látható képből elment egyet egy adott helyre.

Olvastam, hogy DirectShow-val is meg lehetne oldani a dolgot, ha bárki tud valami érdemi dolgot hozzáfűzni, megköszönném. :R


Dian
(friss újonc)

Sziasztok,
Nem tudom tud e vki segíteni nekem. Lenne egy megoldandóm, viszont sem a VBA-hoz sem a makrokhoz nem értek, így csak reménykedni tudok, hogy lesz vkinek egy kész megoldása.
Köszönöm szépen előre

Egy több lapból álló excel egyik lapfüléből (legyen ez védett 1) folyamatosan gyűjteni kellene, egy másik lapra automatikusan, hogy mikor, kicsoda, mit, miről, mire módosított. És nyilván ne lehessen kitörölni ezt a fület.
A védett 1 lapfül, ahol módosítani lehet és ezt követni is szeretnénk, ott bizonyos oszlopokba csak bizonyos személyek írhatnak, de ezt egyszerű excel megoldással meg lehetett csinálni.


sztanozs
(veterán)
Blog

A worksheet_change eseményre kell feliratkozni és ott felvinni az eseményt egy új lapra...


Sátán44
(addikt)
Blog

Van egy excel táblázatom, amiben elhelyeztem egy Combox-ot. Amikor lenyitom a legördülő menüt üres a táblázat egészen addig, amíg egy karaktert nem írok be. Utána működik a találati lista szűrése.
Szeretném, ha a táblázat megnyitást követően a legördülő gombra kattintva látható legyen az AL oszlopban feltöltött szöveg listám, majd ezután gépelve szűkítse a találatokat. Ez hogy oldható meg?

Kód:

Option Explicit
Private Comb_Arrow As Boolean

Private Sub ComboBox1_Change()
Dim i As Long
        If Not Comb_Arrow Then
        With Me.ComboBox1
            .List = Worksheets("szerepkorok").Range("AL4", Worksheets("szerepkorok").Cells(Rows.Count, "AL").End(xlUp)).Value
            .ListRows = Application.WorksheetFunction.Min(6, .ListCount)
            .DropDown
               If Len(.Text) Then
                    For i = .ListCount - 1 To 0 Step -1
                       If InStr(1, .List(i), .Text, vbTextCompare) = 0 Then .RemoveItem i
                         Next
                          .DropDown
                           End If
         End With
         End If
 End Sub
 
 Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Comb_Arrow = (KeyCode = vbKeyUp) Or (KeyCode = vbKeyDown)
    If KeyCode = vbKeyReturn Then Me.ComboBox1.List = Worksheets("szerepkorok").Range _
    ("AL4", Worksheets("szerepkorok").Cells(Rows.Count, "AL").End(xlUp)).Value
End Sub


Postas99
(senior tag)

Szia!

Csak egy combobox vagy FORM-on levő combobox?


Postas99
(senior tag)

A gond azzal van, hogy nem az excel megnyitásra teszed be a combobox populate opciót, hanem a combobox.change opcióra.
Használd ezt:

Sub Workbook_Open()
'ide tedd a kododat
Dim i As Long
        If Not Comb_Arrow Then
        With Me.ComboBox1
            .List = Worksheets("szerepkorok").Range("AL4", Worksheets("szerepkorok").Cells(Rows.Count, "AL").End(xlUp)).Value
            .ListRows = Application.WorksheetFunction.Min(6, .ListCount)
            .DropDown
               If Len(.Text) Then
                    For i = .ListCount - 1 To 0 Step -1
                       If InStr(1, .List(i), .Text, vbTextCompare) = 0 Then .RemoveItem i
                         Next
                          .DropDown
                           End If
         End With
         End If

End Sub


F1DO
(senior tag)

Sziasztok!

Excel VB kód - annyit tesz hogy vár egy keresési értéket - ehhez megnyilik egy beviteli mező. A keresési érték beadásakor indul a keresés, annyi kellene, hogy jelenítsen meg egy üzenetet 2 másodpercre ha megtalálta és akkor is ha nem .

messagebox-al, popup-al próbálkoztam, de mindig ott az OK gomb és ameddig arra nem nyomok rá nem lép tovább a kód.

MsgBox "A keresett érték (" & SearchValue & ") nem található, üres sorba felvétele megtörtént.", vbExclamation + vbSystemModal, "Keresés eredménye"

+ itt az adott VB kódrészlet végén ez a késleltetés is szerepel
Application.Wait (Now + TimeValue("0:00:02"))

illetve:

CreateObject("WScript.Shell").PopUp "A keresett érték (" & SearchValue & ") nem található, üres sorba felvétele megtörtént.", 2

Megjelennek ezek révén az üzenetek, csak ott az OK gomb is ami nem kéne.


Delila_1
(veterán)
Blog

Msgbox helyett egy alakzatot jeleníts meg szöveggel, majd 2 mp után töröld.


F1DO
(senior tag)

Beletettem ezt, de nem jelenik meg semmi, csak a várakozási idő

Set InfoShape = ws.Shapes.AddTextbox(Orientation:=1, Left:=100, Top:=100, Width:=200, Height:=50)
InfoShape.TextFrame.Characters.Text = "A keresett érték (" & SearchValue & ") megtalálva."

' Várakozás 2 másodpercig
Application.Wait (Now + TimeValue("0:00:02"))

' Alakzat törlése
InfoShape.Delete


Postas99
(senior tag)

A megoldás amit kerestél:

Sub MessageBoxTimer()
Dim AckTime As Integer, InfoBox As Object
Set InfoBox = CreateObject("WScript.Shell")
'Set the message box to close after 10 seconds
AckTime = 10
Select Case InfoBox.Popup("Click OK (this window closes automatically after 10 seconds).", _
AckTime, "This is your Message Box", 0)
Case 1, -1
Exit Sub
End Select
End Sub


simongnxs
(friss újonc)

Sziasztok,
kérném a segítségeteket!
Írtam egy makrót, de nem működik.
Szeretnék egy olyan programot, ami:
megnyitja a kijelölt grafikon adattábláját
megnyitja az Adat1 szerkesztését
változtatja meg az adatok értékei képletét eggyel nagyobb sorszámúra például így: =adatok_havi!$J$7:$AS$7 - ból legyen =adatok_havi!$J$8:$AS$8
az oszlop értéke maradjon az eredeti, csak a sor értéke legyen eggyel nagyobb.
aztán beleklikkel a diagramm címébe
és ott is eggyel nagyobb számra cseréli a sor számát.

Sajnos, amit a makorrögzítéssel csinálok, az nem hozza az eredményt, illetve a chatgpt 3.5 is csupa olyan kódot generál, ami nem működik.
Tudom, hogy az Ember okosabb az AI-nél :)
Segítsetek, kérlek!




Amiens
(tag)
Blog

Szia!

Az adattartományt formázd táblázatba, gyorsabb és egyszerűbb; utána automatikus a grafikon vizualizációja is!

Jobban jársz!


Vladek83
(tag)

Sziasztok,

vb.net-ben van egy alkalmazásom.
Webview2-ben nyílik meg egy Onedrive táblázat.
Amit szeretnék elérni:
A táblázat egyik cellájába klikkelek, akkor azt adja vissza egy TextBox-ba vagy még ami jobb lenne DataGridView-ben, ezekre nem találtam eddig megoldást..
Ha valakinek lenne ötlete/javaslata szívesen venném..

Üdv,

üzenetek