Gå till innehåll

Recommended Posts

Borde kanske ligga i forumkategorin "Överkurs / tråkigt på jobbet" men jag hittar den inte, igen.

I min CAD-miljö kan jag aktivera ett skript där jag kan peka/klicka på en text och sedan peka/klicka på annan text och då kopieras texten från källan till målet och detta upprepas tills man avbryter, källa, mål, källa, mål osv.

Nu undrar jag om man kan göra något liknande i Excel och/men då gällande cellinnehåll, att man inte ersätter en text med en annan utan man kan ersätta ett cellvärde, som kan vara tomt, med ett annat.

Ja givetvis kan man använda Ctrl+C & Ctrl-V (vilka jag har lagt in på mitt makrotangentbord) men jag tänker att jag triggar makrot och sedan kan jag klicka på en cell där värdet hämtas, klicka på annan cell där värdet klistras in, klicka på cell där värdet hämtas osv. ända tills jag avbryter makrot eller hellre att makrot avbryts om jag försöker hämta ett icke existerande cellvärde.

 

Redigerad av Mikael63
justerat bakgrundsinfon
Länk till kommentar
Dela på andra webbplatser

Jag antar att du är ute efter samma sak som man kan göra med format-penseln? Dvs om man markerar en cell/område med önskat format och dubbelklickar på pensel-ikonen så får alla celler man markerar på det formatet, ända tills man stänger av funktionen genom att klickar på penseln igen.

Så vitt jag vet kan man inte göra något liknande för innehåll i excel. Och ett makro skulle bli väldigt svårskrivet - i princip måste du ha ett "vanligt" makro som aktiverar en händelsehanterare som klistrar in så fot du aktiverar en cell osv. Sen skall händelse-makrot dödas/avaktiveras när du är färdig. Eller också ligger det aktivt hela tiden och körs varje gång du markerar en cell, men inklistringen aktiveras bara om villkor x är uppfyllt.

Du kan få nästan samma funktion genom att kopiera din källcell. Sen aktiverar du alla målceller innan du klistrar in (håll inne Ctrl  och klicka på alla målceller innan du kör Ctrl+V).

Det borde duga rätt långt.

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

Okej, ja det fungerar om jag vill lägga in texten A på flera ställen. Tackar för tipset jag ska precis nu i skrivande stund göra det skarpt!

Det jag vill göra är att ta A, klicka på B så att där blir ett A, ta 1, klicka på 2 så att dör blir 1, klicka på BIL, klicka på BANAN så att där BIL osv..

Länk till kommentar
Dela på andra webbplatser

Ok. Men då hamnar du i den besvärliga situationen att du måste (?) använda något slags händelsehanterare för att upptäcka att någon klickat. Exempel för dubbelklick:

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

'kopiera ibland, klistra in ibland

End Sub

Och då måste du veta om du verkligen är i "klipp och klistra läge" samt om du vill kopiera eller klistra in

om di deklarerar en räknare (i) utanför själva händelsehanteraren och lägger till en etta varje gång den körs så kan du kolla om du är i udda (kopieringsläget) eller klistra in (jämt).  I exemplet kör jag en tilldelning eftersom VBA och klipp/klistra aldrig blir som jag vill.

Dim i As Integer
Dim källa As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If i Mod 2 = 0 Then
        Set källa = Target
   Else
        Target.Value = källa.Value
End If
i = i + 1
End Sub

Men då är det aktivt så fort du dubbelklickar på bladet och du måste komma på något sätt att koppla på/av händelsebevakningen.

Om du kör ett "vanligt" makro så vet jag i stället inte hur du skall känna av klick.

 

Exempel där du har två start/stopmakron som du kanske styr via knappar eller liknande. 

Option Explicit

Dim i As Integer
Dim bKör As Boolean
Dim källa As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If bKör = False Then Exit Sub
Target.Activate
If i Mod 2 = 1 Then
        Set källa = Target
        Else
        Target.Value = källa.Value
End If
i = i + 1
End Sub

Sub starta()
bKör = True
i = 1
End Sub


Sub sluta()
bKör = False
End Sub

men om du kör det här ett par gånger så märker du att jag är snäll när jag påstår att det funkar "så där".

i princip fins det inget som förhindrar att du kör "Worksheet_SelectionChange" istället. så slipper du dubbelklickandet

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If bKör = False Then Exit Sub
Target.Activate
If i Mod 2 = 1 Then
        Set källa = Target
        Else
        Target.Value = källa.Value
End If
i = i + 1
End Sub

men då är det ännu mer som kan gå snett. 

 

Den stora nackdelen är väl att de här är bundet till ett blad. Du kan inte lägg ain makrot i någon masterbook. Även om du kan få dubbelklicksvarianten att funka för ett helt blad med

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
...
End Sub

Nej. Det kräver nog mer jobb än du har nytta.

 

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

Delta i dialogen

Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Only 75 emoji are allowed.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...