Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: VB 6.0 taulukoista.

Sivun loppuun

Shogun [14.05.2003 20:17:31]

#

onko tietoa että onko mahdollista luoda tommonen exel-tyyppinen taulukko? OLE-objekti ei kelpaa. Löysin jonkun FlexGrid 6.0 controllin mutta siinä solujen arvot on suljettua eli tietääkö kukaan jotain taulukkoa jossa solujen arvoja pystyisi muuttamaan myös ohjelman ollessa käynnissä? Löytyiskö flexgridiin jotain kohtaa millä solut vois avata?Kiitos etukäteen

eakem [15.05.2003 18:11:16]

#

MsflexGridin solujen arvoja voi muuttaa esim.

MSFlexGrid1.TextMatrix(1, 2) = "oma arvo".

TextMatrix:ssa viitataan ensin riviin(1) ja sitten sarakkeeseen(2). Sekä rivit että sarakkeet alkavat nollasta.
Nollarivi/sarake näkyy harmaana ja sen arvoa voi muuttaa samalla tavalla.

Shogun [15.05.2003 20:23:52]

#

Tiesin tuon. Mutta solun arvoa pitäis pystyä muuttamaan sitten kun ohjelma on käynnissä. Nyt ne on suljettu.

eakem [15.05.2003 21:37:18]

#

Voisi kokeilla keypress eventtiä siihen gridiin:

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
  MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)
End Sub

Periaatteessa pitäis toimia ja tästä voi kehitellä eteenpäin.

Shogun [16.05.2003 11:47:53]

#

Joo mut oon näitä alottelijoita.
Pystytkö suomentamaan tuon lauseen niin et mäkin ymmarran sen?

eakem [16.05.2003 16:48:21]

#

Event(KeyPress) reagoi näppäimen painamiseen. Ohjelman pätkä
ottaa sisään tulevana muuttujana painetun näppäimen ascii koodin.

MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)

Tässä rivissä solussa olevaan tekstiin lisätään (&) ascii koodin mukainen merkki (Chr(KeyAscii)).
Tämä on ainut koodin pätkä joka tarvii itse lisätä.

Antti Laaksonen [16.05.2003 17:11:57]

#

Tuota koodinpätkää kannattaa vielä täydentää ainakin BackSpace-näppäimen tuella:

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
    Case vbKeyBack
        If Len(MSFlexGrid1.Text) > 0 Then
            MSFlexGrid1.Text = Left(MSFlexGrid1.Text, Len(MSFlexGrid1.Text) - 1)
        End If
    Case Else
        MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)
    End Select
End Sub

Olen kyllä jokseenkin varma, että solusta voi tehdä muokattavan jotenkin suoraan. En vain löydä sellaista ominaisuutta millään.

Shogun [16.05.2003 20:04:42]

#

Sitä mieltä minäkin mutta kun kukaan ei tunnu tietävän:(

eakem [16.05.2003 21:09:03]

#

Tuo backspace tuki on ilman muuta hyvä lisä.
Jos joku löytää keinon muokata solua suoraan niin olen kyllä kiinnostunut...

Shogun [16.05.2003 22:33:48]

#

Toi backspace-lisä kun heitin sen sinne suoraan niin rupes toimimaan suurinpiirtein niin kun oli tarkoitus. Kiitos.
Kokeilkaa. Muuten miten mä saan tallennettua ne solujen arvot jokski tiedostoksi ja sit ladattua ne???

Pekka Kauppila [16.05.2003 23:16:20]

#

Löysin sattumalta koneeltani joskus väsäämäni systeemin jossa tekstin muokkaaminen toimii hieman samalla tavalla Excelissä. Kesken se vielä on, mutta kokeilen tässä väsätä sitä ja jos siitä ei valmista tule eikä muuta keinoa tuohon ole niin lähetän sen koodit sitten keskeneräisenä.

eakem [17.05.2003 00:45:33]

#

Tiedostoon tallennuksen voi tehdä vaikka command nappiin:

Private Sub Command1_Click()
Dim solutxt, rivitxt As String
Open "c:\testi.txt" For Output As #1
For x = 0 To Flex.Rows - 1
    rivitxt = ""
    For y = 0 To Flex.Cols - 1
     rivitxt = rivitxt & Flex.TextMatrix(x, y) & ";"
    Next y
    Write #1, rivitxt
Next x
Close #1
End Sub

Tässä esimerkissä MSFlexGrid1 on korvattu Flex:llä.
Tiedosto testi.txt pitää luoda ensin vaikka notepadilla.
Tämä esimerkki ei sitä tee mutta osaa käyttää olemassa olevaa failia.

Tiedostosta luetaan takaisin taulukkoon esim.

Private Sub Command2_Click()

Dim solutxt, rivitxt As String
Dim rivino, ppos As Integer
rivino = 0

Open "c:\testi.txt" For Input As #1

Do While Not EOF(1)
 Input #1, rivitxt
 For x = 0 To Flex.Cols - 1

   ppos = InStr(rivitxt, ";")
   solutxt = Left(rivitxt, ppos - 1)
   Flex.TextMatrix(rivino, x) = solutxt
   rivitxt = Right(rivitxt, Len(rivitxt) - ppos)

 Next x
 rivino = rivino + 1

Loop
Close #1
End Sub

Toivottavasti tämä nyt pelittää jos testaat.

Shogun [19.05.2003 09:53:23]

#

Toimii loistavasti. Tästä on hyvä jatkaa eteenpäin.
Jos tulee jotain kehitys ideoita niin oon kyllä kiinnostunut.


Sivun alkuun

Vastaus

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

Tietoa sivustosta