Just nu i M3-nätverket
Gå till innehåll

Excel - Addera 1 vid musklick


U-nas

Rekommendera Poster

Håller på med en stor undersökning på mitt sommarjobb. Vi ska föra in vad ca 6000 kunder tycker om företaget.

Detta gör vi i Excel. Som läget e nu så måste vi ersätta tal genom att treycka på dem, och sedan skriva in ett nytt tal.

 

Frågan; Skulle underlätta arbetet ofantligt mkt om man kan fixa så att man bara trycker på cellen med musen, och vips! så adderas (+) det på talet 1 till summan som redan finns i denna cell....

 

Vet att detta är möjligt och den som ger mig ett svar blir årets favorit! Tack på förhand!

/Jonas

 

Länk till kommentar
Dela på andra webbplatser

Ett litet ”simpelt” makro kan fixa det som du önskar. Namnge tre celler, ”målcell” som är den cell som skall räknas upp med talet 1 och skall ha formeln =räknare, cellen ”räknare” skall ha formeln: =uppdatering+1 och cellen ”uppdatering ” är den cell som räknaren hämtar värde ifrån.

 

Makrot kan se ut så här:

 

Sub Uppräkning()

   Application.ScreenUpdating = False
   Application.Goto Reference:="målcell"
   Selection.Copy
   Application.Goto Reference:="uppdatering"
   Selection.PasteSpecial Paste:=xlValues
   Range("A1").Select
   Application.CutCopyMode = False
   Application.ScreenUpdating = True

End Sub

 

Sedan är det ju bara att koppla makrot till en knapp från verktygsfältet Formulär.

 

Vill du ha något bättre rekommenderar jag dig ett besök hos http://www.xldennis.com

 

Lycka till!

 

/CW

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

Min bästa "lärobok" i EXCEL:

http://www.xldennis.com/

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

 

Länk till kommentar
Dela på andra webbplatser

Mmh, tog ett tag innan jag förstod din lösning...

 

En lösning för om du vill klicka i en specifik cell, är att nyttja Events-funktionerna.

 

Antingen SelectionChange eller BeforeDoubleClick

Den första om du vill klicka en gång i cellen, den andra om du vill dubbelklicka. Du kan även nyttja funktion BeforeRightClick om hellre högerklickar på cellen. Kanske för att räkna ned om så behövs...

 

Två enkla exempel med dessa

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   On Error GoTo ErrorHandler
   Select Case Target
   Case Range("b2")
       Range("b2").Value = Range("b2").Value + 1
       range("a1").select
   End Select

Exit Sub
ErrorHandler:


End Sub

 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)


 Select Case Target
   Case Range("b1")
       Range("b1").Value = Range("b1").Value + 1
       Range("a1").Select
   End Select

End Sub

 

Utvidga Case-satserna med de celler du önskar räkna, du förstår nog.

 

Dessa funktioner kan dock vara lite bångstyriga om du har andra makron/VBA program som kör och ändrar på bladet. Kan då vara bra att infoga raderna

applictaion.enableevents = True/false

i övriga funktioner för att tillfälligt deaktivera Events-funktionerna.

 

testa vilken funktion som fungerar bäst för dig. Återkom gärna med fler frågor.

 

/T

 

Länk till kommentar
Dela på andra webbplatser

Tack så mkt folk's! Har mixtrat lite med det och det ser ljust ut! hehe, sista dagen imorrn på jobbet, så jag ska dra dit vid 05:00 och fixa det =)

 

Stort tack!

 

Länk till kommentar
Dela på andra webbplatser

Monshi

Som fullständig nyböjare vad gäller VBA har din lösning tillfört mig inspiration att gå vidare och försöka lära mig att ta vara på den kraft och flexibilitet som tydligen finns inbyggt i Excel.

Tack

 

/CW

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

Min bästa "lärobok" i EXCEL:

http://www.xldennis.com/

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

 

Länk till kommentar
Dela på andra webbplatser

:thumbsup:

 

 

..och jag tackar XL-Dennis för den kunskap hans svar givit mig och för den utmärkta webbplats om Excel han har skapat.

 

Sörjer fortfarande hans frånfälle från detta forum.

 

/T

 

Länk till kommentar
Dela på andra webbplatser

Vad har hänt Monshi. Jag trodde att du hade gått med i ant-VBA klubben, särskilt när det gäller events.

/m

 

Länk till kommentar
Dela på andra webbplatser

Nja, i vissa lägen kan Events-funktioneran vara användbara, men de bör användas med försiktighet. Och man bör bygga in felhantering i funktionerna, så att de inte hänger sig eller dylikt. Likt jag gjorde i SelectionChange. Ta bort felhanteringen, OK, den gör inget egentligen, ur den funktionen och testa att markera flera celler...

 

En annan lösning om man nu inte vill nyttja Events-funktionerna borde jag kanske presenterat också. Nåja, gör det nu istället. Kommer tyvärr inte på något sätt att utföra det utan VBA...

 

Men om man nu inte vill nyttja Events, skapa då en CommandButton.

Ge den följande kodrad

 

range("a2").value = range("a2").value +1

 

Och sedan är det bara att klicka på knappen...

 

man bör dock ta det lite lugnt vid klickandet, den verkar inte hinna med om man klickar för snabbt. Man får rent av inte klicka mer än en gång per sekund. Kanske det går att ordna på något sätt?

 

Ett sätt att snabba upp det - koppla funktionen/knappen till en tangentbordskombination, exempelvis "1" för fält 1..

Då är det bara att trycka "alt+1" så räknas fält 1 upp.

 

Ni förstå?

 

/T

 

Länk till kommentar
Dela på andra webbplatser

Och min kod ser ut såhär:

 

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

On Error GoTo Errorhandler

Select Case Target

Case Range("b2")

Range("b2").Value = Range("b2").Value + 1

End Select

 

Select Case Target

Case Range("b3")

Range("b3").Value = Range("b3").Value + 1

End Select

 

Select Case Target

Case Range("b4")

Range("b4").Value = Range("b4").Value + 1

End Select

 

Exit Sub

Errorhandler:

 

 

End Sub

 

Problemet är att rutan som är längst ner, dvs b4 "drar med sig" de andra såfort denna cell får ett högre värde än de andra som ligger över.

de som är över en annan cell kan lungt få mer värde än de som är under, utan att de "drar med sig" dem... hur och varför blir det så? och framförallt, hur motverkar man detta?

 

Länk till kommentar
Dela på andra webbplatser

går det att ge samtliga celler denna +1 vid klick-egenskap UTAn att lägga in den en och en som jag har gjort i mitt förra exempel på koden..?

 

OM det går så vill jag gärna göra HELA blad1 med denna egenskap =)

 

 

tack så mkt!

 

Länk till kommentar
Dela på andra webbplatser

Ok, jag uppdaterar koden lite. Vet varför den bråkade se längst ned, men lite bättre kodad fungerar det bättre. Tre olika exempel på hur man kan göra

 

Du verkade inte riktigt ha koll på hur en Select case fungerar...

 

Fall ett - nyttja Select Case

Select Case Target.Address
   Case Range("b2").Address
       Target.Value = Target.Value + 1

   Case Range("b3").Address
       Target.Value = Target.Value + 1

   Case Range("b4").Address
       Target.Value = Target.Value + 1

End Select

 

Nyttja Intersect (område 1 genomskär område 2)

If Application.Intersect(Target, Range("a1:a5")) Is Nothing Then
   Else
       Target = Target + 1
   End If

Intersect är nog den som är enklast att använda, bara att ändra området i Range("xx:xx")

 

Och till sist - du ville ha räknare över helt blad?

If Target.Cells.Count = 1 Then
   Target = Target + 1
End If

If-satsen kollar helt enkelt om det bara är en cell du markerat. Borde egentligen kollas i alla de små kodsnuttarna.

 

Byt bara ut de gamla Select case satserna med den kod du föredrar.

 

Och som sagt - events-funktionerna är lite luriga...

 

[tillägg]: Vet varför det bråkade, det var jag som inte tänkte.

Range("a1") ensamt returnerar värdet i cellen A2.

Range("a1").Adress ska det stå.

Oops - ändrar i koden ovan oxo...

/T

(hoppas det fungerar nu)

 

[inlägget ändrat 2003-06-27 17:53:01 av Monshi]

[inlägget ändrat 2003-06-27 18:15:46 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Den sista blev nästan för enkel :-). Gör den lite krångligare med någon msgbox, t.ex

 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iSvar As Integer
If Target.Cells.Count = 1 Then
If IsNumeric(Target.Value) = False Then Exit Sub
iSvar = MsgBox("Vill du öka cell " & Target.Address & " med 1?", vbYesNo)
If iSvar = 7 Then Exit Sub
Target = Target + 1
End If
End Sub

 

 

Eller en riktig macintosh

 

 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iSvar As Integer
If Target.Cells.Count = 1 Then
If IsNumeric(Target.Value) = False Then Exit Sub
iSvar = MsgBox("Vill du öka cell " & Target.Address & " med 1?", vbYesNo)
If iSvar = 7 Then Exit Sub
iSvar = MsgBox("Är du helt säker på det", vbYesNo)
If iSvar = 7 Then Exit Sub
iSvar = MsgBox("Ingen tvekan? Det här är sista chansen att ändra dig.", vbYesNo)
If iSvar = 7 Then Exit Sub
Target = Target + 1
End If
End Sub

 

/m

som behöver semester

woops, glömde något slags datatypshantering

[inlägget ändrat 2003-06-27 19:07:46 av MH]

Länk till kommentar
Dela på andra webbplatser

:thumbsup:

 

du kan det där med användarvänliga system

 

Min lösning - Unix - du gör något, då händer det

 

Din första lösning - Windows - du gör något, Win. frågar om du är säker.

 

Sista lösning - ja du sade det.

 

/T

 

Länk till kommentar
Dela på andra webbplatser

Synd att man har avinstallerat assistenten, misstänker att man skulle kunna göra ett riktigt irriterande (förlåt användarvänligt) macro med hjälp av Assistant.någonting

<galet skratt>

 

Länk till kommentar
Dela på andra webbplatser

Detta var det ultimata för just undersökningen:

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim iSvar As Integer

If Target.Cells.Count = 1 Then

Target = Target + 1

End If

End Sub

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

Tack så hemskt mycket för hjälpen! Någon sådan här hjälp, samt trevligt bemötande är sjukt sällsynt tycker jag. Särskilt på forum och liknande.

Du e ju nästan förtjänt att få halva min lön för detta ;-)

 

Tack!

 

Länk till kommentar
Dela på andra webbplatser

stryk:

Dim iSvar As Integer

 

Det gör ingen skada, mend et är onödigt, det var bara till för mitt löjliga tjat-tillägg till Monsihs kod (den du använder)

/mh

 

Länk till kommentar
Dela på andra webbplatser

Kul att det fungerade.

 

Ett tillägg så att koden blir superoptimal :) kan man göra...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Cells.Count = 1 Then
Target = Target + 1
End If
Cancel = True
End Sub

 

satsen

 

cancel = true

 

gör att det normala beteendet vid dubbelkick ej sker.

Mao kommer du ej i "editeringsläge" vilket gör att du kan dubbelklicka på cellen i all tid och evighet.

 

Lägg dock märke till vad som sker om du dubbelklickar på kanten av en cell ett antal gånger...

 

Och sådan hjälp, det är vad du får när du frågar på E-forum :thumbsup:

 

 

/T

 

Länk till kommentar
Dela på andra webbplatser

Ooooo! Denna sista koden va ännu bättre!

Gör inget att man "hoppar upp" om man prickar kanten.. hehe, det får man tåla..!

 

 

tack än en gång!

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...