Gå til innhold

Anders Hole

Medlemmer
  • Innlegg

    16
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av Anders Hole

  1. Det er ikke mulig så lenge du initierer med 0, og ikke 5.

    Om du har 2 celler med 5 og bruker else if og ikke if, så vil siste være 0.

     

    Private Sub CommandButton1_Click()

     

    Dim selectRange

    Dim selectRange_rows As Integer, Counter As Integer, testNumber As Integer

    Dim resultArray(3) As Integer

    resultArray(0) = 0

    resultArray(1) = 0

    resultArray(2) = 0

     

    Set selectRange = Range("K5:K21")

    selectRange_rows = selectRange.Rows.Count

    For Counter = 1 To selectRange.Rows.Count

    Dim bool As Boolean

     

    bool = IsNumeric(selectRange.Cells(Counter, 1).Value)

    If (bool = True) Then

    testNumber = selectRange.Cells(Counter, 1).Value

    If testNumber > resultArray(0) Then

    resultArray(2) = resultArray(1)

    resultArray(1) = resultArray(0)

    resultArray(0) = testNumber

    ElseIf testNumber > resultArray(1) Then

    resultArray(2) = resultArray(1)

    resultArray(1) = testNumber

    ElseIf testNumber > resultArray(2) Then

    resultArray(2) = testNumber

    End If

    Else

     

    End If

    Next

    MsgBox ("nr 1: " & resultArray(0) & "nr 2: " & resultArray(1) & "nr3: " & resultArray(2))

    End Sub

  2. Takk for hjelpen Anders :)

     

    Men jeg får opp en feilmld på linje:

    testNumber = selectRange.Cells(Counter, 1).Value

     

    Run-time error 13

    Type missmatch.

     

    Har satt inn

    on error resume next

     

    Men da blir alle "svarene" 0

     

     

    Hilsen

     

    Torbjørn

     

     

    Har du noe tekst i disse cellene(range)? Prøv å formater cellene til tall i workbook. Den skal funke fint. Kjør en test isnumeric, og prøve å konverter til tall om du fremdeles får problemer.

  3. Anbefaler å bruke en ferdig sorteringsalgoritme(biblioteksfunksjon)

     

    Du må i minste fall gjøre noe slikt:

     

    Private Sub CommandButton2_Click()
    Dim selectRange
    Dim selectRange_rows As Integer, Counter As Integer, testNumber As Integer
    Dim resultArray(3) As Integer
    resultArray(0) = 0
    resultArray(1) = 0
    resultArray(2) = 0
    
    Set selectRange = Range("K5:K21")
    selectRange_rows = selectRange.Rows.Count
    For Counter = 1 To selectRange.Rows.Count
    testNumber = selectRange.Cells(Counter, 1).Value
    If testNumber > resultArray(0) Then
    resultArray(2) = resultArray(1)
    resultArray(1) = resultArray(0)
    resultArray(0) = testNumber
    ElseIf testNumber > resultArray(1) Then
    resultArray(2) = resultArray(1)
    resultArray(1) = testNumber
    ElseIf testNumber > resultArray(2) Then
    resultArray(2) = testNumber
    End If
    Next
    MsgBox ("nr 1: " & resultArray(0) & "nr 2: " & resultArray(1) & "nr3: " & resultArray(2))
    End Sub
    

     

     

    Hei. igjen..

     

    jeg kan ikke vba så godt at jeg klarer og lage en kode for dette selv.

    Men sånn jeg ser det for meg blir det noe sånt som dette

       Dim x As Integer
       Dim x2 As Integer
       Dim x3 As Integer
    
    With Range("g3:g8")
    'for x = det største tallet mellom 1 og 100
           'for x2 = det nest største tallet mellom 1 og 100
               'for x3 = det tredjestørste tallet mellom 1 og 100
               'nxt x3
           'Next x2
       'next x
    
    'range("a1") = en kolonne til venstre for x
    'range("b1") = x
    'range("c1") = en kolonne til høyre for x
    

     

    hvis jeg er på riktig spor i det hele tatt, er det noen som kan "oversette" dette til kode?

     

    Hilsen

     

    Torbjørn

  4. Er jo 2 tastetrykk dette..:)

     

    I Excel, gå på meny Data, Sort, og sorter etter largest number. Øverste 3 verdier i resultatet er de verdiene du er ute etter. Merk alle kolonnene og sorter etter verdi.

     

    Isåfall kan du alltid anta at data er sortert, og at de 3 første radene i kolonnen er også de høyeste verdiene.

  5. Lag en 2 dimensjonell tabell som inneholder index til butikk(tall), og salgsresultat(tall). Sorter denne via en standard biblioteksfunksjon, på salgsresultat, tror disse heter bubble o.l.[kolonne2] Søk i google etter Sorting Array vba. Da vil de 3 første indeksene i tabellen inneholde høyeste verdier.

    Men du må også ha en oversikt over indekser til butikker, så du ikke glemmer hvilken indeks hver butikk har.

     

    Men du kan også enkelt lage en macro for sortering, dette har excel innebygd. Under Data, Sort. Du kan da bruke innebygd macro bygger for å gjøre dette på en kolonne. Det vil gi samme resultat.

  6. Hei.

     

    Jeg har en kode for legge inn en formel.

     

        ActiveCell.FormulaR1C1 = "=IF(ISERROR(RC[-1]/R19C3*100),"""",RC[-1]/R19C3*100)"
    

     

    Men jeg lurer på om det går ann og gjøre noe sånt som

     

    x =R19C3
        ActiveCell.FormulaR1C1 = "=IF(ISERROR(RC[-1]/x*100),"""",RC[-1]/x*100)"
    

     

    Hilsen

     

    Torbjørn

     

    Om du tenker på C3:R19 så er svaret ja, dette er mulig med å hente inn range i et array, og kjøre en løkke igjennom alle cellene og legge inn formelen på denne måten.

  7. Velding enkelt, i hovedprogrammet opprettes en klasse som inneholder variablene, du skal ta vare på.

     

    Så lager du et array av en range.

    Deretter går du igjennom hele arrayet, fra element 0 til max element i range. Eller rad.

     

    Så sender du hvert eneste celleverdi, til klasse funksjonen som akkumelerer antall treff.

    Mulig jeg misforstod og at du skulle ha selve index til cellen?

     

    Isåfall kan du glemme klassen også, og bare kjøre switch/select, da vil du kunne skrive

    selectRange(counter + 2, 1), som er offset du ønsker.

     

    Men du kan også lagre index til selve elementet i array om du vil. Men da bør du også sende hele array til klassen. Om du forklarer litt mer helt hva du er ute etter så kan jeg lage dette til.

     

    Om dokumentet er alltid likt, template, så kan du også navngi en celle(gi et custom name). Isåfall blir det mye enklere

  8. Hvilken database server kjøres? Kan du ikke gå inn i terminalen og se hvilke råverdier som ligger der? Eller har ikke du tilgang?

     

    Det skal være kolonn inne i " ;" så det må være med når du kjører

     

    <?php 
    function erstatt($tekst) { 
    $convert = array("æ" => "æ", "ø" => "ø"); 
    return (strtr($tekst, $convert)); 
    } 
    ?>

     

    http://www.korrekturavdelingen.no/K4SpesialtegnNorskeTegn.htm

  9. Private Sub CommandButton1_Click()
    
    Dim selectRange
    Dim selectRange_rows, counter As Integer
    Dim testcelle As String
    testcelle = ""
    Set selectRange = Range("B1:B102")
    selectRange_rows = selectRange.Rows.Count
    For counter = 1 To selectRange_rows
    testcelle = selectRange.Cells(counter, 1).Value
    If (testcelle = "Oslo") Then
    selectRange.Cells(counter, 1).Value = "Bergen"
    'gjøre noe her
    'Beste er å lage en funksjon som kalles og da kan du gjøre hva som helst med 
    ' resultatet i akkurat den cellen du søker gjennom
    'du kan også gjøre dette uten å hente range fra worksheet med å bruke cell().Value
    End If
    Next
    End Sub
    

     

    Høyreklikk Class Modules, og insert -> new Class Module, bruk Class1

     

    Private Sub CommandButton1_Click()
    Dim selectRange
    Dim selectRange_rows, counter As Integer
    Dim testcelle As String
    Dim newOversikt As Class1
    Set newOversikt = New Class1
    newOversikt.init
    testcelle = ""
    Set selectRange = Range("B1:B102")
    selectRange_rows = selectRange.Rows.Count
    For counter = 1 To selectRange_rows
    testcelle = selectRange.Cells(counter, 1).Value
    newOversikt.setAntall (testcelle)
    Next
    MsgBox (newOversikt.antallKiwii)
    End Sub
    
    
    Private xSpar, xMeny, xKiwii, xKiwio, xJoker, xUltra, xCentra, xRingen, xAssosierte, x7Assosierte, xtotal As Integer
    Public Sub init()
    xSpar = 0
    xMeny = 0
    xKiwii = 0
    xKiwio = 0
    xJoker = 0
    xUltra = 0
    xCentra = 0
    xRingen = 0
    xAssosierte = 0
    x7Assosierte = 0
    xtotal = 0
    End Sub
    Public Property Get antallSpar() As Integer
    antallSpar = xSpar
    End Property
    Public Property Get antallMeny() As Integer
    antallMeny = xMeny
    End Property
    Public Property Get antallKiwii() As Integer
    antallKiwii = xKiwii
    End Property
    Public Sub setAntall(temp As String)
    Select Case temp
    Case "Spar"
    xSpar = xSpar + 1
    xtotal = xtotal + 1
    Case "Meny"
    xMeny = xMeny + 1
    xtotal = xtotal + 1
    Case "Kiwii"
    xKiwii = xKiwii + 1
    xtotal = xtotal + 1
    Case "Joker"
    xJoker = xJoker + 1
    xtotal = xtotal + 1
    Case "Ultra"
    xUltra = xUltra + 1
    xtotal = xtotal
    Case Else
    'do nothing
    End Select
    
    End Sub
    
    
    

  10. Private Sub CommandButton1_Click()
    
    Dim selectRange
    Dim selectRange_rows, counter As Integer
    Dim testcelle As String
    testcelle = ""
    Set selectRange = Range("B1:B102")
    selectRange_rows = selectRange.Rows.Count
    For counter = 1 To selectRange_rows
    testcelle = selectRange.Cells(counter, 1).Value
    If (testcelle = "Oslo") Then
    selectRange.Cells(counter, 1).Value = "Bergen"
    'gjøre noe her
    'Beste er å lage en funksjon som kalles og da kan du gjøre hva som helst med 
    ' resultatet i akkurat den cellen du søker gjennom
    'du kan også gjøre dette uten å hente range fra worksheet med å bruke cell().Value
    End If
    Next
    End Sub
    

  11. Du kan evt lage en return funksjon for form 1, som returnerer den valgte linken til form 2 ved lukking(evt ved trykking på en knapp). Deretter kan du behandle resultatet og legge dette i tekstbox i form 2. Det finnes en del onclose funksjoner som du kan legge til i form1.

     

    Men vet ikke om du ønsker å ha form1 åpent? Du har ikke sett på ulike containere, f.eks? Slik at du slipper å jobbe via mange vinduer.

     

    Evt kan du lage en klasse som håndterer url, med type:

     

    string url_back;

    string url_next;

    string url_current;

     

    sende en pointer til klassen i form2 og returnere direkte linken til klassen.

     

    Du bruker samme metod for favorites som tidligere, og returnerer bare url til form2 fra favorites om det var dette du ville?

     

    Videre kan du ha en onchange i textboksen som sender url til webleser hver gang den har en gyldig url, dette kan du sjekke via at formatet er www.etellerannet.com/no/org o.l

     

    Men iom at dette er favoritter er sikkert linkene lagret på et allerede godkjent format.

  12. Prøv noe sånt:

    #include <iostream> 
    #include <vector> 
    
    using namespace std; 
    
    class myClass 
    {
    public: 
    myClass(){}
    void setReal(bool val) { amIReal = val; } 
    bool getReal(void) { return amIReal; } 
    
    private:
    bool amIReal;
    }; 
    
    class myClassCollection { 
    public: 
    myClassCollection()
    {
    myCollection = new vector<myClass> (10);
    }
    void setMyClassReal(int index, bool val) { 
    myCollection->at(index).setReal(val); }
    bool getMyClassReal(int index) {
    return myCollection->at(index).getReal(); }
    private:
    vector<myClass>* myCollection;
    
    }; 
    
    
    
    int main () { 
           vector<myClassCollection> CollectionOfCollections(1); 
    	while(true){
    	CollectionOfCollections.at(0).setMyClassReal(1,true);		
    	cout << CollectionOfCollections.at(0).getMyClassReal(1);
    	}
    
           return 0; 
    } 
    
    

     

    Hei, jeg har i det store og hele en lagt større kode som virker noelunde slik som under.

    Jeg har en klasse, som er en private vector i en annen klasse.

     

    Poenget er at jeg nå trenger å endre en verdi i den "innerste" klassen, og det gjennom en funksjon.

     

    Tanken er å sende samlingen av samlinger inn via pointer eller reference, hva som enn virker mest

    hensiktsmessig (or her er jeg i litt ukjent lende) for så å kunne ha tilgang til, og endre variabler

    i den innerste klassen. Tingen er å endre verdiene i den opprinnelige vektoren, og ikke en i kopi som

    går out of scope når funksjonen returnerer.

     

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    class myClass {
    bool amIReal;
    
    public:
    void setReal(bool val) { amIReal = val; }
    bool getReal(void) { return amIReal; }
    };
    
    class myClassCollection {
    vector<myClass> myCollection;
    
    public:
    void setMyClassReal(int index, bool val) {
    	myCollection[index].setReal(newVal);
    }
    };
    
    int DoStuff(vector<myClassCollection> *);
    
    int main () {
    vector<myClassCollection> CollectionOfCollections;
    
    DoStuff(&CollectionOfCollections);
    
    return 0;
    }
    
    int DoStuff(vector<myClassCollection> *inVector) {
    int first = 3;
    int second = 1;
    myClassCollection *accessToChange;
    
    //Jeg øsnker å endre "amIReal"
    accessToChange = &(inVector->at(first));
    (*accessToChange).setMyClassReal(second, true);
    }
    

     

    Dette er så langt den eneste måten jeg har fått drittet til å kompilere. Problemet er at endringer

    gjort via DoStuff ikke er persistente. Endringene blir tydeligvis utført på en kopi som går out of

    scope.

     

    Så vidt jeg ser blir denne kopien opprettet ved call til inVector->at() (returnerer en kopi av elementet,

    og ikke elementet selv). Men jeg får det ikke til på andre måter og kommer rett og slett ikke på

    noen løsninger på problemet ...

     

    Noen ideer, eller løsninger? Helst noe som ikke innebærer å skrive om hele makkverket.

     

    Mvh,

    Beej80

    • Liker 1
×
×
  • Opprett ny...