18. maj 2005 - 18:05Der er
21 kommentarer og 1 løsning
vælge celle ud fra navn på kollone og række
Jeg har et program, som skal vælge en celle i et excel ark. Som en hver anden tabel, ønsker jeg ud fra et navn i en række og et navn i en kollone at vælge en celle. Fx. hvis jeg ønsker at se målscoren for Randers i Superligaen, så skal jeg finde den celle hvor målscoren står :)
Jeg tror at jeg har forstået det.. du har en værdi, som du ønsker at finde positionen (kolonne + række) på?
Så skal du lave 2 loops.. en til kolonner, og en til rækker.. og så skal du "teste" indholdet af cellen, og hoppe ud, hvis den har fundet det du ønsker..
thesurfer> Det lige nøjagtig jeg mener, men jeg er bare i tvivl om hvordan jeg laver det.... Et af problemer er bla hvordan jeg gemmer værdierne for kolonner og rækker, og derefter "sammenkæder" dem så man finder den ønskede celle og læser værdien deri.
Teoretisk, er det ment: - række 1, kolonne 1, check cellens indhold - række 1, kolonne 2, check cellens indhold - række 1, kolonne 3, check cellens indhold -- når der ikke er flere kolonner i rækken, går man videre til næste række. - række 2, kolonne 1, check cellens indhold - række 2, kolonne 2, check cellens indhold - række 2, kolonne 3, check cellens indhold
thesurfer> Det er lige præcis hvad jeg mener. Et af problemer er som jeg siger at "sammenkæde" værdier, fx. hvis "Superlige" findes i F1 og "randers" findes i A8, så skal jeg læse i cellen F8.
thesurfer> Ja...du har til dels ret. Problemet er bare at jeg har en VB-program som skal opdatere excel. Om den kan gøre det direkte (læs: udenom VBA) ved jeg ikke, men det er bla det jeg ønsker svar på. Ellers kan jeg ikke se hvordan det kan lade sig gøre, kan VB evt. kalde til VBA med argumenter? Kan du følge mig?
Jeg har lavet et lille eksempel.. følg instruktionerne og se om det var det du mente:
Option Explicit Dim i As Integer Dim j As Integer Dim fundet As Boolean
' ---------------------------------------------------------- ' ' Indsæt følgende controls (control, controlnavn på formen): ' ' CommandButton, "Command1" ' Label, "Label1" ' TextBox, "txtFind" ' ' Hold CTRL nede og tryk på T-tasten. ' Vælg "Microsoft FlexGrid Control 6.0". ' Indsæt en MSFlexGrid (gult ikon) på formen, ' og giv den navnet "g1". ' ' ----------------------------------------------------------
Private Sub Command1_Click() If txtFind.Text <> "" Then
' nulstil: g1.Row = 0: g1.Col = 0 fundet = False
For i = 0 To g1.Rows - 1 g1.Row = i For j = 0 To g1.Cols - 1 g1.Col = j If g1.Text = txtFind.Text Then fundet = True Exit For End If Next
If g1.Text = txtFind.Text Or fundet = True Then Exit For Next
If fundet = True Then MsgBox "Fundet '" & txtFind.Text & "' i: Række " & g1.Row & ", kolonne " & g1.Col Else MsgBox "'" & txtFind.Text & "' blev ikke fundet!" End If End If End Sub
Det minder meget godt om det jeg har brug for..... Men da jeg er newbie på området, kan jeg stadig ikke få det til at køre, jeg mangler vist at "oprette" forbindelse til excelarket....,
Jeg har smidt et ark her: test.coutbound.dk/Morten_Kasper/temp.xls
Det jeg ønsker er at opdatere cellen B2 på baggrund af navnene mjc og wla.
Jeg ved godt det er lidt anderledes end det første eksempel jeg gav, men jeg var ikke sikker på at folk kunne forstå det hvis jeg brugte det jeg virkeligt skulle bruge.
Jeg beklager at jeg ikke har svaret, før nu.. Pga mail-problemet her på Eksperten, skal jeg dagligt checke ca 200 spørgsmål, for at se om der er kommet nye indlæg.. jeg må have overset dit spørgsmål..
Jeg har downloadet xls-filen, og vil kigge på det, i løbet af den næste par dage..
Det må du meget undskylde.. har været igang med at sortere mails (omkring 700 stks), og glemte at vende tilbage til dig..
Her er koden:
Option Explicit Dim r As Integer Dim c As Integer Dim rowid As Integer, colid As Integer Dim fundet As Boolean
' ---------------------------------------------------------- ' ' Indsæt følgende controls (control, controlnavn på formen): ' ' CommandButton, "Command1" ' Label, "Label1" ' TextBox, "txtFind" ' ' Hold CTRL nede og tryk på T-tasten. ' Vælg "Microsoft FlexGrid Control 6.0". ' Indsæt en MSFlexGrid (gult ikon) på formen, ' og giv den navnet "g1". ' ' ----------------------------------------------------------
Private Sub cmdExecute_Click() If txtPM.Text = "" Or IsNumeric(txtPM.Text) = False Then ' værdien der skal lægges til/trækkes fra, mangler: MsgBox "Fejl i +/- værdien!" Exit Sub End If
If txtRow.Text <> "" And txtCol.Text <> "" Then ' der står noget i begge felter.. fortsæt..
' nulstil: fundet = False rowid = -1 colid = -1
g1.Row = 0: g1.Col = 0 ' gå til felt 0,0 For r = 1 To g1.Rows - 1 ' start ved 1 og gå felterne igennem til max g1.Row = r ' gå til feltet-værdien, der er i "r" If LCase(g1.Text) = LCase(txtRow.Text) Then ' sammenlign med textboks med grid-felt (små bogstaver) rowid = r ' søgeordet er fundet, noter felt-tallet fra "r" Exit For ' hop ud af For-Next løkken End If Next
g1.Row = 0: g1.Col = 0 ' gå til felt 0,0 For c = 1 To g1.Cols ' start ved 1 og gå felterne igennem til max g1.Col = c ' gå til feltet-værdien, der er i "c" If LCase(g1.Text) = LCase(txtCol.Text) Then ' sammenlign med textboks med grid-felt (små bogstaver) colid = c ' søgeordet er fundet, noter felt-tallet fra "c" Exit For ' hop ud af For-Next løkken End If Next
If colid = -1 Or rowid = -1 Then ' undersøg om begge felter er fundet ' et/begge felter blev IKKE fundet! MsgBox "Kombinationen '" & txtCol.Text & "' og '" & txtRow.Text & "' blev ikke fundet!" Else ' begge felter BLEV fundet...
g1.Row = rowid: g1.Col = colid ' gå til de fundne felter
If cboPM.ListIndex = 0 Then ' check om det er "+" der er valgt g1.Text = CDbl(g1.Text) + CDbl(txtPM.Text) ' "+" er valgt, læg til Else g1.Text = CDbl(g1.Text) - CDbl(txtPM.Text) ' "-" er valgt, træk fra End If End If
Else ' Der er ikke skrevet noget i begge søgefelter.. enten ingen felter, eller kun 1 MsgBox "Du skal skrive både bynavn og gruppe!" End If End Sub
' vælg "+" som standard cboPM.Text = cboPM.List(0) End Sub
Private Sub g1_Click() MsgBox g1.Row & ", " & g1.Col End Sub
/theSurfer
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.