Marjatta Postad 5 december, 2013 Share Postad 5 december, 2013 Hej alla proffs Jag har ett problem som jag inte hittar lösning på. Det jag försöker göra är att i ett excelblad markera en cell som har ett siffervärde. Det värdet ska användas i makrot för att räkna upp värdet i de celler som sedan markeras. Man ska kunna markera åt alla håll, höger, vänster, upp och ner. Har inte så stora kunskaper i VBA, har fått cellerna i markeringen att räkna upp om jag hårdkodar siffran som egentligen ska hämtas från bladet och bara markerar nedåt. Koden fungerar haltande minst sagt Skulle verkligen uppskatta lite hjälp på traven! Sub valjSiffra() Dim tnr As Integer MsgBox ("Välj siffra") tnr = ActiveCell /* Hur får jag tnr vidare till Private Sub? MsgBox ("Markera") End SubPrivate Sub Worksheet_SelectionChange(ByVal Target As Range) Dim x As Long Dim i As Integer Dim tnr As Integer x = Target.Cells.Count For i = 0 To x - 1 If ActiveCell = "Klar" Then Exit Sub MsgBox (x) ActiveCell.Offset(i) = (i + 1) * tnr /* Här är tnr tomt, men jag får rätt antal nollor iaf Next i End Sub Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 5 december, 2013 Share Postad 5 december, 2013 Jag skulle nog rekommendera dig att 1: Sätt tnr som en global variabel, dvs definiera den först av alla i modulen. 2: I SelectionChange, gör en första koll på tnr-värdet, om tnr = 0 avsluta. Så lite kod som möjligt för att terminera exekveringen. 3: i SelectionChange, använd Target, inte ActiveCell. Ja skriv helt enkelt Dim tnr as Interger Sub valjSiffra() tnr = 0 On Error Resume Next 'om cellen inte har ett talvärde MsgBox ("Välj siffra") tnr = ActiveCell.Value If tnr = 0 Then Exit sub MsgBox ("Markera") End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim x As Long Dim i As Integer Dim myCell As Range On Error Resume Next 'du vill inte få fel i denna funktion If tnr = 0 Then Exit Sub For Each Mycell in Target If MyCell = "Klar" Then tnr = 0 Exit Sub End If Target = Target + tnr Next myCell End Sub Om jag nu förstod vad du önskar korrekt. dvs att du markerar en cell med ett värde i. Detta värde ska sedan läggas till alla celler du markerar fram till att du markerar med värdet Klar i. Det finns bättre sätt att göra detta på tror jag nog, man ska helst undvika händelsefunktionerna. Länk till kommentar Dela på andra webbplatser More sharing options...
Tune Postad 5 december, 2013 Share Postad 5 december, 2013 Eventmacro är svåra. Lätt att dem körs av misstag och när det gäller macro så går det inte att backa med ångra-knappen. Om du inte tvunget skall använda macro så kan du göra enligt nedan. 1. Markera cellen som du ska kopiera till andra celler. 2. Kopiera 3. Markera cellområdet som du ska kopiera till. 3. Klistra in special och välj addera. 4. Klart. Länk till kommentar Dela på andra webbplatser More sharing options...
Marjatta Postad 5 december, 2013 Trådskapare Share Postad 5 december, 2013 Jag skulle nog rekommendera dig att 1: Sätt tnr som en global variabel, dvs definiera den först av alla i modulen. 2: I SelectionChange, gör en första koll på tnr-värdet, om tnr = 0 avsluta. Så lite kod som möjligt för att terminera exekveringen. 3: i SelectionChange, använd Target, inte ActiveCell. Ja skriv helt enkelt Dim tnr as Interger Sub valjSiffra() tnr = 0 On Error Resume Next 'om cellen inte har ett talvärde MsgBox ("Välj siffra") tnr = ActiveCell.Value If tnr = 0 Then Exit sub MsgBox ("Markera") End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim x As Long Dim i As Integer Dim myCell As Range On Error Resume Next 'du vill inte få fel i denna funktion If tnr = 0 Then Exit Sub For Each Mycell in Target If MyCell = "Klar" Then tnr = 0 Exit Sub End If Target = Target + tnr Next myCell End Sub Om jag nu förstod vad du önskar korrekt. dvs att du markerar en cell med ett värde i. Detta värde ska sedan läggas till alla celler du markerar fram till att du markerar med värdet Klar i. Det finns bättre sätt att göra detta på tror jag nog, man ska helst undvika händelsefunktionerna. Tack för ett snabbt svar men jag har fortfarande problem. Värdet i tnr följer inte med till Private Sub (har testat i direktfönstret) och jag får bara den övre suben att exekvera, dvs välja siffra och markera sen händer inget mer... Deklarerade tnr som public men det hjälpte inte. Jag måste ha detta i ett makro för användaren kan inte excel. Detta är bara en del av programmet. Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 5 december, 2013 Share Postad 5 december, 2013 Ett stavfel av mig. Dim tnr As Integerska det stå på första raden. Inget annat. Och denna kod, allt detta, ska ligga på det blad som koden ska köras på. Fungerar, ivartfall för mig. men som sagt, man bör undvika händelsefunktionerna om man kan. Länk till kommentar Dela på andra webbplatser More sharing options...
Marjatta Postad 14 januari, 2014 Trådskapare Share Postad 14 januari, 2014 Tack för hjälpen! Har fått det att fungera. Finns det något enkelt sätt att kontrollera om intilliggande cell, kan vara ovanför eller till höger eller vänster om min markering, har ett siffervärde? Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 14 januari, 2014 Share Postad 14 januari, 2014 Ett sätt är IsNumeric(.Offset(, -1)) And .Offset(, -1) <> "" för att kolla till vänster om given referens. tom cell, dvs "", betraktar excel som nollvärde därav andra kontrollen. Länk till kommentar Dela på andra webbplatser More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.