Hej! Programmerar du i Word, Excel, PowerPoint eller Access? Hej Andreas! Du kan lägga in Flexgrid och andra Active X kontroller i Excel. Har öppnat en ny arbetsbok, skapat ett nytt formulär med en textbox. Jag testade utan att fullständigt namn till textboxen, TextBox, fick samma felmeddelande som dig. Sedan la jag till referensbibliotekets namn: MSForms, alltså: MSForms.TextBox. Då fungerade det. Hej igen Andreas! Behöver du göra det mer effektivt så kan du istället lagra dem i en två dimensionell array. Men då måste du först sätta arrayen vid start.Referera txtboxar mha index?
Har ett formulär som innehåller ett antal rader och kolumner bestående av textboxar!
Skulle önska att det var möjligt att referera till textboxarna mha radindex och kolumnindex.
t.ex referens med radindex:
Dim AdressR As String
Dim indRad As Integer
indRad = 2
AdressR = "txtR" + CStr(indR) ;AdressR ges adressen till textbox txtR2
Kan man på nåt sätt använda innehållet i AdressR för att referera till angiven textbox?
alltså ex.vis
(AdressR).Text = "XX" ;textbox med adress som ligger i AdresssR="XX"
Hur löser man ovanstående?
Ett alternativ vore ju att först föra över boxarnas cellinnehåll till Excel-rader och -kolumner och därefter jobba med matriser, men finns det annan lösning?
Jobbar i VBA-kod.
mvh/HarrySv: Referera txtboxar mha index?
Om du vill ha ett rutnät så finns ju "Microsoft FlexGrid Control 6.0 (SP6)".
Från Controls collectionen på formulär så kommer du åt en kontroll genom dess namn.
Ett exempel med fyra textboxes: TextBox1_1, TextBox1_2, TextBox2_1 och TextBox2_2:
<info>
[TextBox1_1] [TextBox1_2]
[TextBox2_1] [TextBox2_2]
[CommandButton1]
</info>
Koden för att gå igenom och fylla dem genom deras namn:
Function GetTextBox(Row As Long, Column As Long) As TextBox
Set GetTextBox = Me.Controls("Textbox" & Row & "_" & Column)
End Function
Private Sub CommandButton1_Click()
Dim X As Long
Dim Y As Long
Dim txt As TextBox
For X = 1 To 2
For Y = 1 To 2
Set txt = GetTextBox(Y, X)
txt.Text = X & ", " & Y
Next
Next
End Sub
Sv:Referera txtboxar mha index?
Tack för ditt svar. Programmerar i dethär fallet i ExcelVBA och har således inte tillgång till Flexgrid som kanske skulle varit användbar i dethär fallet.
Måste tyvärr erkänna att jag inte lyckats få Funktionen GetTextBox att fungera.
Har förenklat den så att jag jobbar med Ett exempel med fyra textboxes: TextBox11, TextBox12, TextBox21 och TextBox22 alltså utan "understreck".
Fastnar alltid på instuktionen: Set GetTextBox = Me.Controls("Textbox" & Row & "_" & Column)
i GetTextBox funktionen med felmeddelandet "Inkompatibla typer".
Sista försöket är med enbart 1st Textbox med namnet Text.
Function GetTextBox(Nmn As String) As TextBox
Set GetTextBox = Me.Controls(Nmn)
End Function
Private Sub cmdButton1_Click()
Dim txt As TextBox
Set txt = GetTextBox("Text")
End Sub
Resultatet blir även i detta renskrapade exempel att jag fastnar på instruktionen
Set GetTextBox = Me.Controls(Nmn) med felmeddelandet:
"Körfel nr 13 Inkompatibla typer"
Vad göra?
mvh/HarrySv: Referera txtboxar mha index?
Högerklicka i toolboxen och välj "Additional Controls"(Eller motsvarande svenskt alternativ) från popupp menyn.
Det låter dom du har en gammal referens till TextBox controllen.
Testa att skapa ett nytt arbetsbok ett nytt formulär och en textbox kontroll.
Om det funkar där så har du identifierat att det är referenser som behöver korrigeras.
Jag har referens till "Microsoft Forms 2.0 Object Library"
Du kan ju testa med att ange fullkvalificerare till TextBox om det skulle vara så att det finns en annan referens som innehåller TextBox:
Private Sub UserForm_Click()
Dim txt As MSForms.TextBox
Set txt = Me.Controls("TextBox1")
txt.Text = "You clicked!"
End Sub
Sv:Referera txtboxar mha index?
TextBox1.
"You clicked!" fungerar !!
kör sedan exemplet i dethär nya förmuläret:
Function GetTextBox(Nmn As String) As TextBox
Set GetTextBox = Me.Controls(Nmn)
End Function
Private Sub cmdButton1_Click()
Dim txt As TextBox
Set txt = GetTextBox("TextBox1")
End Sub
Resultat felmeddelande 13 Inkompatibla typer !!!
När jag kollar referenser, så finns det inget "Microsoft Forms 2.0 Object Library". Ja det finns faktiskt överhuvudtaget inget Microsoft "blabla" Library. alltså inget Library.
När jag högerklickar i toolboxen så får jag upp en popuppmeny med enheldel kontroller varav endel är förkryssade. Ingen Library controll finns och in Flexgrid finns.
Kör med Office 2003 proffessional edition.
Verkar som jag saknar nåt!
mvh/HarrySv: Referera txtboxar mha index?
Jag tittade i objekt browsern. Om man visar dolda objekt så har Excel ett eget Textbox objekt.
Lösningen är alltså att ange fullständigt namn till textbox kontrollen:
Function GetTextBox(Nmn As String) As MSForms.TextBox
Set GetTextBox = Me.Controls(Nmn)
End Function
Private Sub CommandButton1_Click()
Dim txt As MSForms.TextBox
Set txt = GetTextBox("TextBox1")
txt.Text = "You clicked!"
End Sub
Så jag har faktiskt innan svarat på din fråga. Men jag var kanske lite för otydlig om hur. Då jag förutsatte att du förstod vad jag menade.
Sv:Referera txtboxar mha index?
Tack för dina svar!
Lösningen för att "stega" igenom 5rader med 5textboxar (TextBox11,TextBox12....Textbox21,TextBox22 ...osv) i varje rad blir nu att se ut såhär:
Function GetTextBox(Nmn As String, Row As Long, Column As Long) As MSForms.TextBox
Set GetTextBox = Me.Controls("TextBox" & Row & Column)
End Function
Private Sub cmdButton1_Click()
Dim X As Long
Dim Y As Long
Dim txt As MSForms.TextBox
For X = 1 To 5
For Y = 1 To 5
Set txt = GetTextBox("TextBox", Y, X)
txt.Text = Y & ", " & X
Next
Next
End Sub
Fungerer perfekt!
Tack för hjälpen!!
MVH/HarrySv: Referera txtboxar mha index?