• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro activeren door klikken op cel

Status
Niet open voor verdere reacties.

ronald1986

Gebruiker
Lid geworden
2 apr 2010
Berichten
296
Mensen,

Kan ik ook een macro uitvoeren door te klikken op een cel? En zou dan achter meerdere cellen ook dezelfde macro kunnen zitten?

Mvg, Ronald
 
Ja dat kan.
De code moet je NIET plaatsen in een module of ThisWorkbook, maar achter het blad zelf..
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Plaats hier je macro of
Call 'plaats de naam van je sub hier!
End Sub
 
Laatst bewerkt:
Ok, ik heb dan nog enkele vragen:

1- Waar bepaal ik achter welke cell deze code zit?
2- Wordt de cel ook de "active cell" wanneer je er op klikt?
3- Is dit met een enkele muisklik of met een dubbele muisklik?

Mvg, Ronald
 
1- Dat bepaal je met Target (zie bovenste regel; ByVal Target as Range)
2- Ligt geheel aan je macro of de cel actief wordt of niet
3- Dat staat tevens in de bovenste regel (BeforeDoubleClick) dus in dit geval 2 muisklikken

Voorbeeldje dubbel klik A1
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$A$1" Then
MsgBox "Het is gelukt!!!", vbInformation, "Succes"
End If
End Sub

Voorbeeldje enkele klik A1 (thanks Edmoor)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Het is gelukt!!!", vbInformation, "Succes"
End If
End Sub
 
Laatst bewerkt:
3 - Maak er Private Sub Worksheet_SelectionChange(ByVal Target As Range) van voor een enkel klik.
 
Ok, dan ben ik al een heel eind!

Kan Target ook een range zijn van bijvoorbeeld F7:F5000 ?

En hoe bepaal ik dat de cel waarop geklikt is de active cell wordt?

Mvg, Ronald
 
Ja dat kan door
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("F7:F5000")) Is Nothing Then
MsgBox "Het is gelukt!!!", vbInformation, "Succes"
End If
End Sub

Nogmaals, de cel wordt actief en kan je gewoon typen mits er een verwijzing of dergelijke in je macro staat...
Test gewoon ff en zie dan merk je vanzelf wel wat wel en niet kan...
 
Als je alleen Target gebruik krijg je de waarde van de cel.
Als je wilt weten om welke cel het gaat gebruik je Target.Address
 
Nog een mooiere optie, mits je het ook als invulveld gaat gebruiken (aangezien je wilt dat ie actief wordt)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
waarde = Application.InputBox("Geef waarde in", "Invulveld", , , , , 2)
If waarde = "" Then Exit Sub
ActiveCell = waarde
End If
End Sub
 
Ok, veel informatie in één keer, ik ga er even mee stoeien...

Mijn uiteindelijke doel is het volgende:

Stel, in de cel waar op geklikt wordt staat 14546. Dan wil ik dat een macro checkt of "G:\mapje\folder\14546" bestaat. Bestaat deze niet, dan moet er een melding komen: deze folder bestaat nog niet. Bestaat deze folder wel, dan wil ik dat de inhoud van de folder weergegeven wordt.

Via =HYPERLINK heb ik al wel een variabele hyperlink kunnen maken maar die geeft gewoon een foutmelding als de folder nog niet bestaat.

Dus ik dacht, via een macro checken of de folder bestaat, zo niet macro beeindigen met een melding, zo wel, dan voer ik de hyperlink uit naar de folder.

Mvg, Ronald
 
Ff gespeeld voor je ;)
Plaats deze in een module
Code:
Public Function FileFolderExists(strFullPath As String) As Boolean
If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True
On Error GoTo 0
End Function
Public Sub Spaarie()
Dim ch_folder As String
Dim root As String
root = "G:Mapje\" 'pas hier de mappenstructuur aan
ch_folder = ActiveCell.Value
If FileFolderExists(root & ch_folder) Then
Call Shell("explorer.exe " & root & ch_folder, vbNormalFocus)
Else
MsgBox "De map bestaat niet, wilt u dat deze wordt aangemaakt?", vbYesNo
If vbYes Then
MkDir root & ch_folder
MsgBox "De map is aangemaakt!", vbInformation
Call Shell("explorer.exe " & root & ch_folder, vbNormalFocus)
If vbNo Then
Exit Sub
End If
End If
End If
End Sub
Plaats deze achter het werkblad
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("F7:F5000")) Is Nothing Then
Spaarie
End If
End Sub

Met deze UDF wordt er zodra je klikt in bereik F7:F5000 gekeken of dit mapje bestaat. Zo ja, wordt deze geopend. Zo niet dan maakt ie hem aan als je dat wilt....
 
Laatst bewerkt:
WOW! werkt perfect zeg!!

Nog één vraagje...

Als ik nu met de pijltjestoetsen over de cellen navigeer en ik ga over een cell in kolom F heen wordt de macro ook geactiveerd. Kan het ook zo dat hij alleen geactiveerd wordt met een "echte" muisklik en niet wanneer je met de pijltjes over een cel in kolom F heen gaat?

Mvg, Ronald

iid heel erg bedankt!!
 
Dat klopt, omdat je ook als je met je cursor van cel verspringt dan veranderd je selectie.

Volgens kan dat niet, dan zou je over moeten stappen naar Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean), want dan moet je 2x klikken en gebeurt er niks als je met de cursor overgaat.
 
Het werkt echt helemaal super!!! Ontzettend bedankt!!

Alleen 1 puntje... Als de map niet bestaat wordt gevraagd of ik hem wil maken... als ik op ja klik wordt de map gemaakt en dat is helemaal goed! maar als ik op nee klik wordt de map ook gemaakt. Dit zou toch niet moeten?
Weet iemand hoe ik dit kan aanpassen?

Mvg, Ronald
 
Laatst bewerkt:
Heb het inmiddels zelf aangepast met een userform. Als de map niet bestaat wordt een userform weergegeven. Wanneer er op ja wordt geklikt wordt de map aangemaakt. Wanneer er in het userform op nee wordt geklikt gebeurt er niets... vraag opgelost, superbedankt allemaal!!!
 
Had deze geen eens gezien !?!?!?!

Maar volgens mij had ik dat hiermee opgevangen
Code:
MsgBox "De map bestaat niet, wilt u dat deze wordt aangemaakt?", vbYesNo
If vbYes Then
MkDir root & ch_folder
MsgBox "De map is aangemaakt!", vbInformation
Call Shell("explorer.exe " & root & ch_folder, vbNormalFocus)
[B][COLOR="#FF0000"]If vbNo Then
Exit Sub[/COLOR][/B]

Hoe heb je het nu staan dan?
 
Heb het nu zo staan:

Gewoon in een module heb ik dit gezet:

Code:
Public Function FileFolderExists(strFullPath As String) As Boolean
If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True
On Error GoTo 0
End Function

Public Sub KPImap()
Dim ch_folder As String
Dim root As String
root = "\\Opslag actie"
ch_folder = ActiveCell.Value
If FileFolderExists(root & ch_folder) Then
Call Shell("explorer.exe " & root & ch_folder, vbNormalFocus)
Else
UserForm7.Show
End If
Range("A7").Select
End Sub

En in userform 7 staat achter de knop ja het volgende:

Code:
Private Sub CommandButton1_Click()

Dim ch_folder As String
Dim root As String
root = "\\Opslag actie\"
ch_folder = ActiveCell.Value

MkDir root & ch_folder
MsgBox "De map is aangemaakt", vbInformation
Call Shell("explorer.exe " & root & ch_folder, vbNormalFocus)

Unload Me

Range("L1").Select
Range("A7").Select

End Sub

Is wel iets omslachtiger maar werkt wel en ziet er nog strak uit ook....

Maar wel ontzettend bedankt, spaarie!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan