Gå til innhold

ComboBox: oppretting og lesing.


Anbefalte innlegg

Holder på å tester litt med ComboBoxer i word 2003.

 

Møtte på ett irriterende problem med at jeg kjører AddItem flere ganger, slik at listen blir lengre og lengre.

 

With ComboBox1
   .Clear
   .AddItem "First Item"
   .AddItem "Second Item"
   .AddItem "Third Item"
End With

 

Så jeg gjorde det bare slik, men det må jo være en dum måte å gjøre det på. Hvordan lager jeg sånn at kodesnutten bare kjøres ved oppstart av dokumentet?

 

 

EDIT:

 

Prøvde litt mer og støtte på flere problemer. Denne koden fungerer ikke?

Private Sub CommandButton1_Click()

Dim Price As Integer
Dim Cost As Integer

If ComboBox1.Value = "First Item" Then
Price = 100
End If

If ComoBox1.Value = "Second Item" Then
Price = 150
End If

If ComoBox1.Value = "Third Item" Then
Price = 175
End If

Cost = Price * ComboBox2.Value 'Multiplisere det valge produktets pris med antall enheter
MsgBox ("Summen er" + Cost)

End Sub

 

Hva har jeg gjort feil? Får ikke til å kompilere (F5).

 

Type mismatch (Error 13). Regner med at det MsgBox syntaxen min som er på trynet.

 

Kan jeg kvitte meg med Commandknapp og velge ett punkt i dokumentet som viser variabelen Cost. Og at den oppdateres så fort comboboxene forandrer seg?

Endret av arnizzz
Lenke til kommentar
Videoannonse
Annonse

With ComboBox1
  .Clear
  .AddItem "First Item"
  .AddItem "Second Item"
  .AddItem "Third Item"
End With

 

Jeg vil ikke si den ovennevte koden er en særlig dum fremgangsmåte, men den kan kanskje optimaliseres med å kjøre den i Document_Open - hendelsen som kjøres etter dokumentet har blitt initialisert:

 

Private Sub Document_Open()

   ' Din kode her

End Sub

 

Når det gjelder ditt andre problem, tror jeg du like så greit kan plassere kjøringen av koden i Change() og Click() hendelsene til kombinasjonsboksen:

 

Private Sub ComboBox1_Change()

   Dim Price As Integer
   Dim Cost As Integer
   
   ' I dette tilfellet er det bedre å benytte Select-Case
   Select Case ComboBox1.Value
   Case "First Item": Price = 100
   Case "Second Item": Price = 150
   Case "Third Item": Price = 175
   End Select
   
   Cost = Price * ComboBox2.Value 'Multiplisere det valge produktets pris med antall enheter
   MsgBox ("Summen er" & Cost) ' Du kan ikke bruke pluss-operatøren på en streng og en tallvariabel.

End Sub

Private Sub ComboBox1_Click()

   ' Kjør koden ovenfor, idet en klikking på et element kun kjører denne hendelsen
   ComboBox1_Change

End Sub

 

Jeg fikset for øvrig koden, slik at den ikke lenger genererer en feilmelding.

Lenke til kommentar

okey. jeg skjønner. har et annet problem.

Når jeg bruker Selection.Text, istedet for MsgBox så lever den på en måte sitt eget lille liv..Hvordan skal jeg få kontroll over hvor teksten skal plasseres? Den må også kunne oppdateres der. uff

Lenke til kommentar

Bruk heller en label (finnes på verktøylinjen som en stor A) for å gi tilbakemeldinger til brukeren gjennom tekst på dokumentet. Dette er meget lettere å kontrollere, og gir heller ikke uante bivirkninger når dokumentoppsettet endres.

 

Dersom du eksempelvis legger inn en label ved navn "Label1", kan du endre teksten i denne som følger:

 

Label1.Caption = "[Din tekst her]"

Lenke til kommentar

Hva om jeg har lyst å lage litt mer avansert?

 

F.eks

 

Antall: Produkt: Sum:

----- --------- -------

20 A 20000

For hver gang du er fyller ut en linje kommer det en ny. Til slutt legger programmet sammen summen fra alle linjene. Produktene er i en drop down meny,.

 

Er det i det hele tatt mulig i word?

Lenke til kommentar

Til dette formålet ville jeg heller ha benyttet Excel - det blir enklere da. Men dette er naturligvis ikke umulig å frembringe i Word.

 

For å tidvis inkludere variabel tekst til et dokument, er det svært fordelaktig at du inndeler det i flere atskilte seksjoner. Ved dette tilfellet, anbefaler jeg å benytte en tabell med tre kolonner.

 

Dersom dette ble den første tabellen du har lagt til dokumentet, skulle det være mulig å inkludere celler til denne tabellen ved hjelp av følgende funksjon:

 

Public Function AddRow(lngAmout As Long, sProduct As String, lngSum As Long)

   Dim objRow As Row

   ' Legg til den nye rekken
   Set objRow = ActiveDocument.Tables(1).Rows.Add
   
   ' Sett informasjonen i de respektive cellene
   objRow.Cells(1).Range.Text = lngAmout ' Antall
   objRow.Cells(2).Range.Text = sProduct ' Produkt
   objRow.Cells(3).Range.Text = lngSum ' Sum

End Function

 

Da kan du eksempelvis legge til produkter slik:

 

AddRow 1, "Servise", 780

Endret av aadnk
Lenke til kommentar

Konge;) .

 

Hvordan leser jeg Cellene?

F.eks så skal jeg lese alle cellene som befinner seg på plass 3 bortsett fra row(1). Mer spesifikt, summere disse.

 

Tenkte på noe i disse baner:

 

for (int i = 2; i < antallRows; i++)

Set objRow = ActiveDocument.Tables(1).Row(i)

Sum = Sum + objRow.Cells(3).value

end for

 

Forslag?

 

Edit:

Public Function SumCells(intCell As Integer)

Dim num As Integer

Dim i As Integer

Dim objRow As Row

 

num = ActiveDocument.Cells(intCell).Rows.Count

 

For i = 2 To num Step 1

Set objRow = ActiveDocument.Tables(1).Row(i)

TotalSum = TotalSum + objRow.Cells(3).Range.Text 'Totalsum er deklarert globalt

Next

 

End Function

 

Kommet så langt, men får det ikke til å fungere.

Endret av arnizzz
Lenke til kommentar

Jeg ser at du skriver til en variabel deklarert globalt direkte i selve funksjonen, men det er bedre om du heller lar funksjonen returnere verdien, før du dernest evetuelt skriver til en global variabel:

 

Public Function SumCells(lngCell As Long) As Double

   Dim num As Long, i As Long
   Dim objRow As Row
   
   num = ActiveDocument.Tables(1).Rows.Count
   
   For i = 2 To num
       
       Set objRow = ActiveDocument.Tables(1).Rows(i)
   
       ' Summer innholdet
       SumCells = SumCells + Val(objRow.Cells(lngCell).Range.Text)
   
   Next

End Function

 

Dersom du ønsker å skrive summen av rekke 3 til variabelen TotalSum, må det gjøres som følger:

 

TotalSum = SumCells(3)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...