TextBox klass – VBA tekstikasti loomine. Vormi loomine Exceli VBA-s

Lastele mõeldud palavikuvastaseid ravimeid määrab lastearst. Kuid palaviku puhul on hädaolukordi, kui lapsele tuleb kohe rohtu anda. Siis võtavad vanemad vastutuse ja kasutavad palavikualandajaid. Mida on lubatud imikutele anda? Kuidas saate vanematel lastel temperatuuri alandada? Millised ravimid on kõige ohutumad?

Vaatame VBA TextBox klassi, mis võimaldab vormile tekstikasti paigutada. Klass vba TextBox võimaldab luua nii mitmerealisi kui ka üherealisi tekstisisestusalasid, kuigi viimasel juhul on mugavam kasutada MsgBox funktsiooni. Samuti saate lisada kerimisribasid ja määrata sisestusmärkide maksimaalse pikkuse. TextBoxi saab kasutada ka parooli sisestamise komponendina.

Vaatame kõigepealt klassi TextBox ja selle põhisündmuse põhiomadusi ning seejärel kirjutame näite.

TextBox VBA keeleklassi üritused

väärtus või Tekst- tekst, mis sisestatakse tekstikasti

nähtav– võimaldab elementi peita (väär) või uuesti (tõene) näidata.

mitmerealine– see atribuut võimaldab määrata, kas tekstiväli on üherealine (false) või mitmerealine (tõene).

sõnamurdmine– atribuut on kasutamiseks asjakohane, kui MultiLine sisaldab väärtust true, sel juhul, kui WordWrap on seatud väärtusele Tõene, murrab tekst tekstivälja tekstivälja piirini jõudmisel automaatselt uuele reale.

kerimisribad– võimaldab määrata, kas kerimisribasid kuvatakse või mitte. Kinnistul võivad olla järgmised väärtused:

  • 0 – fmScrollBarsPuudub(kerimisribad puuduvad)
  • 1– fmScrollBarsHorizontal(horisontaalne kerimisriba)
  • 2 – fmScrollBarsVertical(vertikaalne kerimisriba)
  • 3 – fmScrollBarsBoth(horisontaalne ja vertikaalne kerimine)

ParoolChar- võimaldab määrata sisendandmete asemel kuvatava märgi. Atribuut on oluline parooli sisestamisel.

Maksimaalne pikkus- võimaldab määrata tekstiväljale sisestatavate märkide maksimaalse arvu. Vaikimisi on 0, mis tähendab, et piirangut pole.

Sarnaselt teistele juhtelementidele on ka klassis TextBox sündmused, TextBoxi põhisündmus on muuta- see esineb iga kord, kui märk tekstiväljale sisestatakse. Võib-olla olete seda pilti näinud: kinnituskoodi sisestamisel ei ole nupp „Kontrolli” saadaval seni, kuni selle pikkus jõuab määratud koodini (näiteks 12 tähemärki). Seda saab teha ka siin.


Olgu, nüüd on aeg harjutada. Ma ei süvene kõigisse detailidesse uuesti, nagu eelmistes artiklites, seega ütlen otse: lisage projektile uus moodul ja uus vorm. Valige tööriistakasti aknast juhtelement Inscription (), lisage see vormi, laske sellel olla ülaosas, pange selle alla tekstikast (TextBox) ja kõige all - olgu nupp ( sildiga "Kontrolli"). ). Noh, nagu varemgi, kirjutame mooduli koodiredaktorisse protseduuri:

Siin töötleme ühe nupuvajutusega, kui nupule klõpsate, omistatakse objekti Label1 atribuudile Caption (Inscription) tekstivälja TextBox1 sisu (Text property).

Privaatne alamtekst1_Muuda() Dim LenText Byte Byte LenText = Len(Textbox1.Text) Kui LenText = 12 Siis bCheck.Enabled = Tõene Muidu bCheck.Enabled = Vale Lõpp, kui End Sub

Siin töödeldakse sündmust Change vba TextBox klassi objekti TextBox1 tekstivälja jaoks. Muutuja LenText salvestab sisestatud teksti pikkuse, iga kord andmete sisestamisel kontrollitakse pikkust, kui see võrdub 12-ga, siis nupp aktiveerub, vastasel juhul ei ole nupp 0 aktiivne.

Selle protseduuri käigus määratakse algväärtused, osa neist saab määrata ka Properties aknas, kuid selguse huvides otsustasin kirjutada kõik programmi koodi. Siin pole põhjust muretseda, niipea kui vorm on mällu laaditud, on nupp “Kontrolli” passiivne, tekstivälja ja sildi fondi suuruseks on määratud 20, samuti määrame maksimaalse teksti pikkuse TextBox keele VBA klass ja selle üks rida.

5. võimalus
Loo kohandatud vaatevorm:


Looge vormimoodulis privaatne alamprogrammi protseduur, mis käivitatakse nupul "Arvutamine" klõpsamisel. Protseduuri käigus tuleks arvutada iga ametikoha töötaja, kelle nimi on kantud tekstiväljale Väli1, igapäevase töö eest koguneva maksimumsumma nädalapäeval, mille number kantakse väljale 2. Kogunenud summa arvutatakse kaevandamise ja intressimäära korrutisena. Protseduur peaks asetama arvutuse tulemuse väljale 3.
Kasutajavormi loomiseks avage Visual Basic Code Editor (Alt+F11) ja valige menüüst Insert->UserForm. Seejärel peate lisama vajalikud komponendid ja konfigureerima kõik vormi ja komponentide parameetrid - suurus, font, pealkirjad.
Sel juhul on vaja kolme TextBoxi elementi (TextDolgn - asukoht, TextDen - nädalapäev, TextMaks - maksimaalne kogunenud summa), kahte nuppu (Arvuta ja Välju) ja 4 silti. Kõiki omadusi saab määrata paneelil Atribuudid.
Kui teete arvutusnupul topeltklõpsu, loob redaktor protseduurimalli. Lisame sellele teksti:

Privaatne Sub btnCalc_Click()
Dim r Täisarvuna "rea number
Dim c As Integer "veeru number
Dim maxSum As Integer "maksimaalne kogunenud summa
Dim rng As Range "kohandatud vahemik
textMaks.Text = "" "välja tühjendamine eelmisest otsingust
"kui ametikoha nimetust ei sisestata, siis teade ja protseduurist väljumine
Kui textDolgn.Text = Tühi Siis
MsgBox "Sisesta ametinimetus!"
textDolgn.SetFocus "keskenduge sisestusväljale
välju alam
Lõpeta Kui
"Kui päeva numbrit ei sisestata, siis teade ja protseduurist väljumine
Kui textDen.Text = Tühi Siis
MsgBox "Sisestage nädalapäeva number (1 kuni 7)!"
textDen.SetFocus
välju alam
Lõpeta Kui
"Sisestatud mittenumbriline päevaväärtus
Kui mitte (IsNumeric(textDen.Text)) Siis
MsgBox "Mittenumbriline nädalapäev (nõutav 1 kuni 7)!"
textDen.SetFocus
välju alam
"Sisestatud vale nädalapäeva number
ElseIf(CInt(tekstDen.Tekst)< 1) Or (CInt(textDen.Text) >7) Siis
MsgBox "Vigane nädalapäev (nõutav 1 kuni 7)!"
textDen.SetFocus
textDen.Text = "" "tühjenda väli
välju alam
Lõpeta Kui
"alustage tsüklit realt 3
r = 3
"päeva number sisestusväljalt
c = CInt(tekstDen.tekst)
Set rng = Sheets(1).UsedRange
maxSum = -1
Kui r = 3 To rng.Rows.Count
"kui lahtrist leitakse määratud ametinimetus
Kui InStr(1, Cells(r, 2), textDolgn.Text, vbTextCompare) > 0 Siis
"Kui summa on maksimumist suurem, siis muutke maksimumi väärtus uue vastu
Kui CInt(Cells(r, 3)) * CInt(Cells(r, c + 3)) > maxSum Siis maxSum = CInt(Cells(r, 3)) * CInt(Cells(r, c + 3))
Lõpeta Kui
Järgmine r
Kui maxSum = -1 Siis
MsgBox "Määratud asukohta ei leitud"
textMax.Text = "-"
Muidu
textMaks.Tekst = CStr(maxSum)
Lõpeta Kui
Set rng = Miski ei vabasta mälu
lõpu alam
Siin on palju tšekke. Kõigepealt kontrollige, kas kõik andmed on sisestatud. Kui ei, siis teavitame sellest kasutajat, paneme sisendfookuse tühjale väljale (kasutaja mugavuse huvides, et ta enam hiirt ei torkaks) ja väljume protseduurist.
Seejärel kontrollime, kas päeva number on õigesti sisestatud. Esiteks peab see olema number ja teiseks number 1 kuni 7. Kui midagi on valesti, siis tühjendame sisestusvälja, seame sellele fookuse ja väljume protseduurist, teavitades kasutajat uuesti ebaõnnestunud katsest.
Kui kõik on korras, hakkame otsima soovitud väärtusi. Määratleme kohandatud vahemiku, mis ei sõltu ridade arvust. Seejärel peate tsüklist leidma maksimaalse summa. Rakkude väärtusi tuleb millegagi võrrelda. Siin ei saa me lihtsalt asendada rea ​​või veeru esimest lahtrit, siis seda, mida tuleb parameetriga valida - asukoht. Aga näeme, et kogunenud summa ei saa olla väiksem kui null – määr ei saa olla negatiivne ja ka töötundide arv. Sel juhul me ei arvesta "punase tagasipööramise" võimalusega - see tähendab eelmiste perioodide parandusi. Nii et võtame esialgse maksimumsumma, mis on võrdne -1 (miinus üks).
Alustame tsüklit läbi veeru lahtrite määratud päevanumbriga (see on sisestusvälja väärtus pluss 3).
Vaadake, kas lahter sisaldab määratud ametinimetust. Saate lihtsalt võrrelda kahte stringi, kuid see on ebamugav, kuna peate positsiooni täielikult ja õigesti sisestama. Seetõttu kasutame funktsiooni InStr, mis tagastab väärtuse, mis on suurem kui 0, kui määratud alamstring on stringist leitud. Võite kasutada funktsiooni Like, mis võrdleb ka kahte stringi. See on arendaja otsustada.
Kui lahtris positsioon leitakse, korrutame määra töötundide arvuga ja võrdleme tulemust maksimaalse summaga. Kui tulemus on suurem, muutke see uueks väärtuseks.
Ärge unustage vajaduse korral stringiväärtusi numbriteks teisendada ja vastupidi. Isegi kui Excel ise mõistab, kus see sisaldub, on töökindluse huvides parem seda teha.
Pärast tsükli läbimist vaatame, kui maksimaalne summa on -1 (algväärtus), siis sellist positsiooni pole. Kuvame sõnumi ja lisame selguse huvides väljale kriipsu.
Kui summa ei ole võrdne -1, siis asetame leitud väärtuse väljale textMaks.
Vabastame programmi lõpus objekti mälu.
Seal on ka tekst Exit nupu jaoks:
Privaatne Sub btnExit_Click()
"vormi üleslaadimine
Laadi mind maha
lõpu alam
Vormi käivitamiseks asetage andmelehele nupp (vahekaart "Arendaja", jaotis "Juhtelemendid", loend "Lisa" - valige vormi juhtelementide hulgast nupp) ja määrake sellele makro Button1_Click. Seejärel kirjutage redaktoris selle nupu kood:
Alamnupp1_Click()
UserForm1.Show
lõpu alam
Kõik, saate vormi tööd kontrollida.
Siin olen andnud ainult 5 võimalust. Kui vajate teist, saate küsida VK grupist (vt kontaktide lehekülge). Kuid üldiselt on kõik võimalused sarnased. Erinevused on väikesed, eriti kui teil on vaja väljastada mitme tekstiväärtusega string. Seejärel saate mitme rea kuvamiseks kasutada tekstikasti atribuuti – Multiline ja eraldamiseks kasutada reavahetusmärke.

Tekstiväljad on mõeldud teksti sisestamiseks ja muutmiseks – element TextBox. Nii nagu elemendi Label puhul, saab ka TextBox elemendi teksti määrata või laadida atribuudi Text abil.

Vaikimisi loob tööriistaribalt üksuse lohistamine üherealise tekstikasti. Suure hulga teabe kuvamiseks tekstiväljal peate kasutama selle atribuute Multiline ja ScrollBars. Kui määrate atribuudi Mitmikrea väärtuseks Tõene, murtakse kõik üleliigsed märgid, mis jäävad veerist välja, uuele reale.

Saate panna ka tekstikasti kerima, määrates selle atribuudi ScrollBars ühele järgmistest väärtustest.

    Puudub: kerimine puudub (vaikimisi)

    Horisontaalne : loob horisontaalse kerimise, kui rea pikkus on suurem kui tekstivälja laius

    Vertikaalne : loob vertikaalse kerimise, kui read tekstiväljale ei mahu

    Mõlemad: loob vertikaalse ja horisontaalse kerimise

TextBox elemendil on piisavalt jõudu automaatse täitmise välja loomiseks. Selleks peame kinnisasja siduma AutoCompleteCustomSource elemendist TextBox mõnele kogule, millest välja täitmiseks andmed võetakse.

Niisiis, lisame vormile tekstivälja ja kirjutame laadimissündmuse koodi järgmised read:

Avalik osaklass Vorm1: Vorm ( public Form1() ( InitializeComponent(); AutoCompleteStringCollection allikas = new AutoCompleteStringCollection() ( "Kuznetsov", "Ivanov", "Petrov", "Kustov" ); textBox1.AutoCompleteCustomSource = allikas; textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; ) )

Automaatse täitmise režiimil, mida esindab atribuut AutoCompleteMode, on mitu võimalikku väärtust.

    Puudub: automaatne lõpetamine puudub

    Soovita : soovitab soovitusi sisestamiseks, kuid ei vii lõpule

    append : lisab sisestatud väärtuse loendis olevale stringile, kuid ei paku valikuvõimalusi

    SuggestAppend: mõlemad soovitavad automaatse täitmise soovitusi ja täidavad kasutaja sisestatud väärtuse

Sõna murdmine

Selleks, et elemendis TextBox olev tekst sõnu murtaks, peate määrama atribuudi sõnamurdmine seatud tõeseks. See tähendab, et kui üks sõna reale ei mahu, kantakse see üle järgmisele. See atribuut töötab ainult mitmerealiste tekstiväljade puhul.

Parooli sisestamine

Samuti on sellel elemendil atribuudid, mis võimaldavad teil muuta selle parooli sisestamise väljaks. Selleks peate kasutama PasswordChar ja UseSystemPasswordChar .

Atribuudil PasswordChar pole vaikimisi väärtust, kui paneme selle suvalisele märgile, siis see märk kuvatakse tekstiväljale mis tahes tähemärgi sisestamisel.

Atribuudil UseSystemPasswordChar on sarnane mõju. Kui seame selle väärtuseks true , siis kuvatakse tekstiväljale sisestatud märkide asemel süsteemis aktsepteeritud parooli märk, näiteks punkt.

Kõigist elemendi TextBox sündmustest tuleb ära märkida sündmus TextChanged, mis käivitub, kui elemendis tekst muutub. Näiteks paneme vormile lisaks tekstiväljale ka sildi ja teeme selle nii, et tekstiväljal oleva teksti muutumisel muutub ka tekst sildil:

Avalik osaklass Vorm1: Vorm ( public Form1() ( InitializeComponent(); textBox1.TextChanged += textBox1_TextChanged; ) private void textBox1_TextChanged(objekti saatja, EventArgs e) ( silt1.Tekst = tekstikast1.)Tekst;

See näide kasutab Dialoogiaken- UserForm1 ja juhtnupud Tekstiväli- TextBox1, TextBox2, TextBox3, mille jaoks luuakse kontekstimenüü. Pange tähele, et kontekstimenüü nimi, mis on sama, mis vormi nimi (valikuline), peab olema kordumatu. kui samanimeline tööriistariba on juba olemas, kuvatakse uue tööriistariba loomisel veateade. Seda viga saab vältida, kontrollides enne paneeli loomist, kas selle nimega paneel on olemas, või kui mitte kasutada meetodi.Add valikulist argumenti Name (vt sarnast näidet2)

II variant. Kui a varem laadige alla juhtelement iemenu.ocx (IE hüpikmenüü) ja lisage see saadaolevate linkide loendisse, seejärel saate selle juhtelemendi abil luua kontekstimenüü (vt näide 3)

  • Vastus:

    Variant I

    Tähelepanu:
  • MultiLine ja ScrollBars atribuutide väärtusi saab määrata käsitsi
  • Vastus:
    Lahtrite täitmiseks tekstivälja andmetega, mille atribuudi MultiLine väärtuseks on määratud True , saate kasutada ridade kaupa lugemist. Kui lahtrid on juba täidetud, kustutage nende lahtrite (veeru) sisu ja vormingud pärast seda, kui olete kontrollinud, kas need on kaitstud

    Variant I(rea haaval lugemine)

    Märge:
  • Nullidega numbrite sisestamiseks peate lisama vastava kontrolli.
  • Kui tekstiväljal on palju ridu, on mõttekas ekraani värskendamine keelata [KKK43]

    II variant.(ei ole rida-realt lugemist)

  • Vastus:

    Kui on vaja tekstiväljale sisestada ainult unikaalsed (varem mittekorduvad) märgid. Teisisõnu peate keelama tekstis juba esinevate märkide sisestamise, seejärel kasutage allolevat valikut, kus duplikaatide (korduste) sisestamise keelamiseks kasutatakse sündmust TextBox1_KeyPress ja sisestamise keelamiseks sündmust TextBox1_KeyDown kopeeritud andmetest, mis võivad sisaldada duplikaate (kordusi)

    Variant I

  • Vastus:

    Saate kasutada järgmist suvandit, et vältida tarbetute märkide sisestamist, näiteks selliseid, mida ei saa failinimes kasutada. Kui sündmust TextBox1_KeyPress kasutatakse tarbetute märkide sisestamise vältimiseks ja sündmust TextBox1_KeyDown kasutatakse kopeeritud andmete sisestamise vältimiseks, mis võivad sisaldada keelatud märke.

  • Vastus:

    Selleks, et määrata, milliseid klahve SHIFT, CTRL, ALT vajutati tekstinimega TextBox1 töötades, saate kasutada järgmist suvandit. Info kuvamist selle kasutajavormi päises, millel tekstiväli asub, kasutatakse ainult selguse huvides ja loomulikult pole see kohustuslik.

    Märge: Sarnaselt saab muuta ka teiste juhtelementide fonti, sh. RefEdit, Label, Combobox, Listbox ...
  • Vastus:

    Kui töö käigus on vaja näiteks standardse dialoogiboksi abil valida vajalikke töövihikuid ja hankida ka valitud töövihiku tee (või lihtsalt failinimi) ning seda avamata, seejärel looge lihtsalt tekstikast nimega TextBox1 ja kasutage vastavalt vajadusele parempoolset nuppu (nupp ilmub ilma teie osaluseta)



  • Toeta projekti – jaga linki, aitäh!
    Loe ka
    kukevõitlus mängureeglid kukevõitlus mängureeglid Modifikatsioon minecraft 1.7 jaoks 10 vaatamise retsepti.  Retseptid esemete meisterdamiseks Minecraftis.  Relvad Minecraftis Modifikatsioon minecraft 1.7 jaoks 10 vaatamise retsepti. Retseptid esemete meisterdamiseks Minecraftis. Relvad Minecraftis Šilling ja naelsterling – sõnade päritolu Šilling ja naelsterling – sõnade päritolu