Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Framen nimi

heikkju2 [25.05.2021 12:32:19]

#

Moro
Jeesatkaas tietämätöntä :)
Eli WBA lomakkeella on 135kpl framea jotka nimetty => Frame1 => Frame135
Taulukossa on solussa J numero joka vastaa Framen numeroa,
ja sen pitäisi vaihtaa ko Framen taustaväri.

Kysymys:
Miten saan tuon framen ja numeron yhdistettyä (tuo pätkä ei toimi):

Private Sub CommandButton3_Click()
Dim frame(135)
For a = 2 To 2957

If TextBox1.Text = Range("a" & a) Then
Z = Val(Range("j" & a))
frame(Z).BackColor = &HFF0000
End If
Next a

neosofta [25.05.2021 17:07:13]

#

Oletan, että kun 'puhut' WBA lomakkeesta niin kyseessä on VBA UserForm.
Mikäli oletukseni osui oikeaan niin Frame kontrollin osalta:

Private Sub CommandButton1_Click() 'testi

    For Each Frame In Me.Controls
        If Frame.Name = "Frame2" Then 'esim.
            Frame.BackColor = &HFF0000
        End If
    Next

End Sub

Toisaalta taas Frame ei ole tässä nyt se aivan eka ongelma jossa tökkää. Siis miten ihmeessä oletkin päätynyt ajatukseen, että TextBox kontrollin tekstiarvo voisi olla Range objekti:

If TextBox1.Text = Range("a" & a) Then
'...

Oletetaan vielä, että viritelmäsi pyörii VBA UserForm:lta käsin ja ko. Range haetaan esim. Työkirjan taulusta Taul1:

Private Sub CommandButton2_Click() 'testi

    For a = 2 To Taul1.UsedRange.SpecialCells(xlCellTypeLastCell).Row

        If UCase(TextBox1.Text) = Replace(Taul1.Range("a" & a).Address, "$", "") Then

            MsgBox "Jee! solu" & Replace(Taul1.Range("a" & a).Address, "$", "") 'testi
            TextBox1.Text = "" 'muuten 'Jee! ...' tulee näkyviin joka kierroksella

            'mikäli Frame kontrollit on UserForm:lla
            For Each Frame In Me.Controls
                If Frame.Name = "Frame" & a Then
                    Frame.BackColor = &HFF0000
                    Exit For
                End If
            Next

            'HUOM koska laskuri alkaa 2:sta niin Frame1:n taustaväri ei muutu
            'koskaan jotenka: "Frame" & a - 1 voisi olla tässä toimivampi.

            'mikäli Frame kontrollit on Työkirjan taulussa Taul1 esim.
            Dim ctlr As Frame
            For Each OLEObject In Taul1.OLEObjects
                If OLEObject.Name = "Frame" & a Then
                    Set ctlr = Taul1.OLEObjects("Frame" & a).Object
                    ctlr.BackColor = &HFF0000
                    Set ctlr = Nothing: Exit For
                End If
            Next

        End If

        'tällä pääset tarvittaessa ulos silmukasta (a)
        'If TextBox1.Text = "" Then Exit For

    Next a

End Sub

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta