• 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.

bepaalde range aanwijzen in VBA

Status
Niet open voor verdere reacties.

Revdutchie

Gebruiker
Lid geworden
29 nov 2009
Berichten
645
Hallo iedereen,

Allereerst prettige dagen gewenst.

Vraag, ik wil in VBA een macro uitvoeren als bepaalde cellen een `X` bevatten, alleen deze
cellen zijn niet opeenvolgend in kolommen en rijen, er zit namelijk steeds 1 lege cel tussen.

Wat ik wil is dat als de cellen

F10, H10, J10
F12, H12, J12
etc t/m
F32, H32, J32

een "X" bevatten er een JaNee msgbox komt.

Ik kom er niet uit hoe ik nou die range moet aanwijzen ?

Alvast bedankt
Groeten,
Jacques
 
Ik zou een naam hangen aan die cellen. Deze naam kan je vervolgens gebruiken in excel (en VBA).
 
Ok, maar ik kan toch niet 2 cellen (of meer) dezelfde naam geven ?
Dan moet ik ze toch alsnog 1 voor 1 gaan benoemen, of snap ik nu iets niet.

Groeten,
Jacques
 
Houd de Ctrl toets ingedrukt bij het creëren van de bereiken.
 
De test zal dubbel moeten zijn:

zowel
Code:
If ActiveCell.Value = "X" Then
    '...
End If

als
Code:
If Not Intersect(ActiveCell, Range("DieGroteRangeMetCellen")) Is Nothing Then
   '...
End If
 
Laatst bewerkt:
Ok, maar je bedoelt daarmee dus inderdaad elke cel noemen in de macro ?

Groeten,
Jacques
Selecteer (met CTRL) alle cellen van het bereik >> typ in het naamvak: gebied >> ENTER.
Vervolgens kan je dit bereik in VBA selecteren met:
range("gebied").select
 
De test zal dubbel moeten zijn:

zowel
Code:
If ActiveCell.Value = "X" Then
    '...
End If

als
Code:
If Not Intersect(ActiveCell, Range("DieGroteRangeMetCellen")) Is Nothing Then
   '...
End If

Wigi, ik bedoel niet bij active cel, maar als ALLE cellen een X bevatten een msgbog, en bij ja op de msgbox worden al die cellen ook weer gewist. Ik wil deze macro dus ook in
Private Sub Worksheet_SelectionChange(ByVal Target As Range) zetten.

Groeten,
Jacques
 
Ok, maar je bedoelt daarmee dus inderdaad elke cel noemen in de macro ?

Nope... Wat Wigi ongetwijfeld wil zeggen is dat je éérst in je sheet je gewenste cellen moet selecteren. En DAT doe je met de Control-toets ingedrukt. Dus met de muis klik je die cellen aan die je in dat bereik wilt hebben en door het ingedrukt houden van de Ctrl wordt iedere nieuwe cel aan het bereik toegevoegd. Als je dan in de 'Name box' dat bereik een naam geeft, kan je die via VBA aanspreken met (ligt er trouwens wel ff aan welk event je gaat kiezen)
Code:
If Not Intersect(Target, Range("de naam van jouw bereik")) Is Nothing then
      Msgbox "ja/nee", vbYesNo
End If
(code uit de losse pols!)

Kan je er zo iets mee?

{EDIT} DIT is wat je noemt een behoorlijk gevalletje 'mosterd na de maaltijd"... :)

Groet, Leo
 
Laatst bewerkt:
Selecteer (met CTRL) alle cellen van het bereik >> typ in het naamvak: gebied >> ENTER.
Vervolgens kan je dit bereik in VBA selecteren met:
range("gebied").select

Ok, dat ga ik nu proberen, dat moet lukken denk ik. Moet nu eerst eten, resultaat over een uurtje denk ik.

Alvast bedankt
 
Jongens TOP
:thumb::thumb::thumb:

EDIT: Het werkt niet. Ik heb de Range aan kunnen maken en een naam gegeven, maar hij kijkt nu alleen of er in de eerste cel van die range een X staat.
Hij mag de macro pas uitvoeren als in ALLE cellen van de range een X staat en die cellen worden willekeurig ingevult. Dus de laatse X kan in elk willekeurige cel staan.

als code heb ik nu
Code:
If Range("tacticsthuis") = "X" And [C6] > [T6] Then
vWeetzeker = MsgBox("Heeft GROEN deze Tactics gewonnen?", vbInformation + vbYesNo, "Bevestiging")
  End If


Groeten,
Jacques
 
Laatst bewerkt:
EDIT: Het werkt niet. Ik heb de Range aan kunnen maken en een naam gegeven, maar hij kijkt nu alleen of er in de eerste cel van die range een X staat.
Hij mag de macro pas uitvoeren als in ALLE cellen van de range een X staat en die cellen worden willekeurig ingevult. Dus de laatse X kan in elk willekeurige cel staan.

als code heb ik nu
Code:
If Range("tacticsthuis") = "X" And [C6] > [T6] Then
vWeetzeker = MsgBox("Heeft GROEN deze Tactics gewonnen?", vbInformation + vbYesNo, "Bevestiging")
  End If

Groeten,
Jacques
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    'Vul ipv de 30 het aantal cellen in dat bij jou gevuld moet zijn
    If WorksheetFunction.CountIf(Range("tacticsthuis"), "X") = 30 Then
    vWeetzeker = MsgBox("Heeft GROEN deze Tactics gewonnen?", _
                            vbInformation + vbYesNo, "Bevestiging")
    End If
End Sub
 
Rudi,

Sorry was vergeten te melden dat die macro inmiddels aan een button hangt, dus dan is het toch geen worksheet function ? Daarnaast heb ik nog een AND statement ?

Dus het lukt nog niet helemaal

Groeten,
Jacques
 
Code:
Sub tst()
    'Vul ipv de 30 het aantal cellen in dat bij jou gevuld moet zijn
    If WorksheetFunction.CountIf(Range("tacticsthuis"), "X") = 30 And [C6] > [T6] Then
    vWeetzeker = MsgBox("Heeft GROEN deze Tactics gewonnen?", _
                            vbInformation + vbYesNo, "Bevestiging")
    End If
End Sub
 
Rudi gaat nog niet goed,

Ik krijg countif van klasse worksheet function kan niet worden opgehaald.

Hieronder voor alle zekerheid de hele code die aan die button hangt.

Code:
Private Sub TTBull_Click()
If [P8] >= "0" Then
[P6] = [P8]
[P8] = ""

End If

If [J32] = "" Then
[J32] = "X"

ElseIf [H32] = "" Then
[H32] = "X"

ElseIf [F32] = "" Then
[F32] = "X"

ElseIf [t32] = "" Then
[C6] = [C6] + 25
[J8] = [J8] + 25
End If
 
 If WorksheetFunction.CountIf(Range("tacticsthuis"), "X") = 36 And [C6] > [T6] Then
    vWeetzeker = MsgBox("Heeft GROEN deze Tactics gewonnen?", _
                            vbInformation + vbYesNo, "Bevestiging")
    End If

If vWeetzeker = vbYes Then
[L6] = [L6] + 1
[C6] = "0"
[T6] = "0"
[J6] = "0"
[J8] = "0"
[P6] = "0"
[P8] = "0"
Range("tacticsthuis") = ""
Range("tacticsuit") = ""
End If

If vWeetzeker = vbYes And [J4] = 1 Then
[TT1T] = [TT1T] + 1
ElseIf vWeetzeker = vbYes And [J4] = 2 Then
[TT2T] = [TT2T] + 1
ElseIf vWeetzeker = vbYes And [J4] = 3 Then
[TT3T] = [TT3T] + 1
ElseIf vWeetzeker = vbYes And [J4] = 4 Then
[TT4T] = [TT4T] + 1
End If

If [L6] = [N4] Then
[L6] = "0"
[N6] = "0"
Sheets("Cstats").Select
End If
End Sub
 
Maak ipv allemaal aparte cellen in je bereik tacticsthuis dit een aansluitend bereik dus
tacticsthuis = F10:J32 en probeer het dan nog eens. Ik veronderstel dat Countif enkel met een aaneengesloten bereik werkt en niet met aparte cellen
 
Maak ipv allemaal aparte cellen in je bereik tacticsthuis dit een aansluitend bereik dus
tacticsthuis = F10:J32 en probeer het dan nog eens. Ik veronderstel dat Countif enkel met een aaneengesloten bereik werkt en niet met aparte cellen
\

Lolz, zo even snel op het eerste gezicht lijkt dat idd te werken. Ik had dus ook de hele range tactics thuis niet hoeven aanmaken.

Ik test nog even verder, maar tot zover TOP :thumb:

Groeten,
Jacques
 
Rudi,

SUPER. Het was de oplossing mega thx man :thumb::thumb:

Groeten,
Jacques
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan