arnizzz Skrevet 4. april 2005 Del Skrevet 4. april 2005 (endret) 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 4. april 2005 av arnizzz Lenke til kommentar
aadnk Skrevet 4. april 2005 Del Skrevet 4. april 2005 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
arnizzz Skrevet 4. april 2005 Forfatter Del Skrevet 4. april 2005 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
aadnk Skrevet 4. april 2005 Del Skrevet 4. april 2005 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
arnizzz Skrevet 4. april 2005 Forfatter Del Skrevet 4. april 2005 ja såklart. det tenkte jeg ikke på. Takk for hjelpen nok en gang. Lenke til kommentar
arnizzz Skrevet 5. april 2005 Forfatter Del Skrevet 5. april 2005 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
aadnk Skrevet 5. april 2005 Del Skrevet 5. april 2005 (endret) 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 5. april 2005 av aadnk Lenke til kommentar
arnizzz Skrevet 6. april 2005 Forfatter Del Skrevet 6. april 2005 (endret) 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 6. april 2005 av arnizzz Lenke til kommentar
aadnk Skrevet 6. april 2005 Del Skrevet 6. april 2005 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå