Macro's in excel

Vragen/antwoorden betreffende computer software.

drumeke
Lid geworden op: 05 feb 2005, 18:24
Locatie: Antwerpen

10 jul 2019, 15:20

Ik heb een probleem met een macro in excel, ik wil namelijk mijn regel van voorwaardelijke opmaaak die in excel staat doorvoeren, kopiëren of aan de volgende rij laten invoegen.
ook op een ander werkblad.
Daar er echter in de macro een Select Range wordt opgenomen werkt dit enkel en alleen op deze rij.
dus deze Range zou moeten vervallen zodat ik op elke rij dit kan uitvoeren.
nu zou ik 500 keer een voorwaardelijke opmaak moeten maken.
ik kan een vb doorsturen van dit excel bestand indien iemand dit kan oplossen.
vb van macro
' Macro5 Macro
' Voorwaardelijke opmaak
'

'
Range("A8:B8").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$R$8=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249946592608417
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("A9:B9").Select
End Sub

Drumeke

Sony
Lid geworden op: 19 feb 2005, 13:45
Locatie: Boom

10 jul 2019, 19:54

drumeke,
Range("A9:B9").Select
probeer eens Range("A9:B500").Select
tenminste als 500 de laatste lijn is die je wilt aanpassen.

Sony
I Afbeelding SeniorenNet

drumeke
Lid geworden op: 05 feb 2005, 18:24
Locatie: Antwerpen

10 jul 2019, 20:52

Neen dat lukt niet maar eigenlijk is het een beetje complexer, ik wil dus eigenlijk de Waarden (teksten) in cel (A4:B4)opmaken met een grijze lettertype. ik gebruik daarvoor een waarde die in (R4 ) staat
als deze waarde 1 is wordt deze gewoon Zwart vet getoond.
als deze waarde 0 is wordt deze via de voorwaardelijke opmaak grijs getoond.
in zo ver geen probleem.
maar ik moet deze voorwaardelijke opmaak wel 500 keer herhalen. (maken)
Dus wou ik een macro maken om dit te versnellen. echter blijft deze macro steeds bij uitvoeren de rij /kolom ($R$4=0) behouden. waar de waarde staat die de voorwaarde bepaald, dit terwijl deze mee zou moeten verhogen naar ($R$5=0) ik heb de $ reeds weggelaten maar dat gaat ook niet.
De geselecteerde ($A$5:$B$5) werkt wel omdat ik daar mijn cursor zet om de macro uit te voeren.
ik kan een Bestand opsturen indien u een mail wilt doorgeven. dat is makkelijker te begrijpen.

franç
Lid geworden op: 10 jul 2003, 12:34

10 jul 2019, 21:00

drumeke schreef:
10 jul 2019, 15:20
ik kan een vb doorsturen van dit excel bestand indien iemand dit kan oplossen.
Dat mag je doen, dan zal ik er eens naar kijken. Ik vermeld op een forum geen e-mailadres, daarom stuurde ik je een privébericht, maar je reageerde daar nog niet op.

Sony
Lid geworden op: 19 feb 2005, 13:45
Locatie: Boom

11 jul 2019, 17:58

drumeke,

hierbij een afbeelding en tekst van een eenvoudige macro
Afbeelding

Code: Selecteer alles

Sub macro1()
For i = 1 To 5
Worksheets("Blad1").Activate
    If Cells(i, 18).Value > 0 Then
        Range(Cells(i, 1), Cells(i, 2)).Font.Color = vbBlack
        Range(Cells(i, 1), Cells(i, 2)).Font.Name = "Arial"
        Range(Cells(i, 1), Cells(i, 2)).Font.FontStyle = "Regular"
        Range(Cells(i, 1), Cells(i, 2)).Font.Bold = True
    Else
        Range(Cells(i, 1), Cells(i, 2)).Font.Color = vbBlue
        Range(Cells(i, 1), Cells(i, 2)).Font.Name = "Arial"
        Range(Cells(i, 1), Cells(i, 2)).Font.FontStyle = "Italic"
    End If
Next i
End Sub
De macro is uiteraard naar believen aan te passen.
Kolom R = 18
Variabele i begint in deze macro met 1 = rij 1
Dat is allemaal eenvoudig te wijzigen.

Sony
I Afbeelding SeniorenNet

franç
Lid geworden op: 10 jul 2003, 12:34

11 jul 2019, 22:13

Dat is geen voorwaardelijke opmaak opmaak Sony.
Voorwaardelijke opmaak past zich automatisch aan (afhankelijk van 1 of meer voorwaarde(n)), dat is bij jouw macro niet het geval.
Om voorwaardelijke opmaak in te stellen kun je wel een macro gebruiken, maar meestal is dat niet nodig. Dat heb ik de vragensteller ook uitgelegd en getoond in het Excelbestand dat hij me inmiddels toestuurde. (Ik kan hier geen Excelbestand toevoegen, anders zouden lezers van dit topic het ook kunnen zien).

Sony
Lid geworden op: 19 feb 2005, 13:45
Locatie: Boom

12 jul 2019, 11:58

franç ,
Ik heb een probleem met een macro in excel
Ik reageer alleen op een probleemstelling van TS.
De voorgestelde macro past bij gebruik de gegevens aan
als er wijzigingen werden aangebracht in kolom R.
Als je in elke cel van kolom R een voorwaardelijk opmaak
plaatst voor de kolommen A en B zal dat inderdaad
automatisch gebeuren er werd echter gevraagd naar een macro.
Ik kan hier geen Excelbestand toevoegen, anders zouden lezers van dit topic het ook kunnen zien
Begrijpelijk, beroeps geheim.

Sony
I Afbeelding SeniorenNet

drumeke
Lid geworden op: 05 feb 2005, 18:24
Locatie: Antwerpen

12 jul 2019, 12:27

Bedankt beide, ik ben ondertussen geholpen en deze is opgelost, niettemin ga ik deze macro opslaan deze kan steeds van pas komen.
Een blijde student, ..; nooit te oud om te leren. :) :D :)

drumeke
Lid geworden op: 05 feb 2005, 18:24
Locatie: Antwerpen

12 jul 2019, 12:54

Deze mag afgesloten worden AUB :D

franç
Lid geworden op: 10 jul 2003, 12:34

12 jul 2019, 15:08

Sony schreef:
12 jul 2019, 11:58
franç ,
Ik heb een probleem met een macro in excel
Ik heb geen probleem met met een macro, de vragensteller in dit topic had dat.
Sony schreef:
12 jul 2019, 11:58
De voorgestelde macro past bij gebruik de gegevens aan als er wijzigingen werden aangebracht in kolom R.
Nee, jouw macro doet dat niet automatisch, wat een vereiste is om van voorwaardelijke opmaak te kunnen spreken. Zoals ik hierboven al schreef is de functie van voorwaardelijke opmaak juist dat cellen automatisch worden aangepast als er in het blad een wijziging plaatsvindt. Jouw macro doet alleen zijn werk als je opdracht geeft tot uitvoering . Dan is er geen sprake van voorwaardelijke opmaak.
Sony schreef:
12 jul 2019, 11:58
Als je in elke cel van kolom R een voorwaardelijk opmaak plaatst voor de kolommen A en B zal dat inderdaad automatisch gebeuren...
Voorwaardelijke opmaak voor 1 of meer cellen en wanneer die wijziging moet plaatsvinden kun je alleen instellen in de cel(len) waarvan de opmaak gewijzigd moet worden. Dus als de wijziging afhankelijk is van een celwaarde in kolom R (zoals bij de vragensteller het geval is), dan moet die voorwaarde ("voer uit als de R-cel wordt gewijzigd" ) in de cel(len) waarin de wijziging moet plaatsvinden ingesteld worden en niet in kolom R !
Sony schreef:
12 jul 2019, 11:58
...er werd echter gevraagd naar een macro.
Er werd gevraagd naar een macro voor het instellen van voorwaardelijke opmaak, er werd niet gevraagd naar een macro voor het (onafhankelijk van welke voorwaarde dan ook) het aanpassen van opmaak. Dat laatste is wat jouw macro doet.
Sony schreef:
12 jul 2019, 11:58
Ik kan hier geen Excelbestand toevoegen, anders zouden lezers van dit topic het ook kunnen zien
Begrijpelijk, beroeps geheim.
Een misplaatste opmerking, want voor zover ik weet kun je op dit forum bij een bericht geen Excelbestand toevoegen. De lezers van dit forum zouden trouwens weinig aan zo'n bestand hebben, want bij de vragensteller heb ik de voorwaardelijke opmaak handmatig ingesteld, omdat dat veel sneller gaat. Als je de voorwaardelijke opmaak voor 1 rij instelt, dan kun je die handmatig snel naar andere rijen kopiëren, daar heb je geen macro voor nodig.
Hóe je voorwaardelijke opmaak kopieert heb ik lang geleden op dit forum al eens uitgelegd, maar die tekst is natuurlijk al lang verdwenen. Voor geïnteresseerden zal ik het nog eens in het kort herhalen:
- Selecteer de cel(len), rij, of kolom waarin je voorwaardelijke opmaak hebt ingesteld.
- Klik op "Kopiëren".
- Selecteer de cel(len) waar de voorw. opmaak naar toe gekopieerd moet worden.
- Kies in het menu: "Plakken Speciaal" - "Opmaak", en klik op "Ok".

Wil je de voorwaardelijke opmaak toch beslist met een macro naar andere rijen kopiëren (bv. van rij 1 naar rij 2 t/m 20), dan kan dat bv. als volgt:
Sub kopieer_vw_opmaak()
Rows(1).Copy
Rows("2:20").PasteSpecial Paste:=xlPasteFormats
End Sub
(best ook in de macro het blad vermelden waar in de actie moet plaatsvinden).

drumeke
Lid geworden op: 05 feb 2005, 18:24
Locatie: Antwerpen

15 jul 2019, 22:44

nog een bijkomende vraag, ik heb nu Wel via een macro een aantal rijen kunnen verbergen.
dit werkt prima.
nu moet ik die wel terugzetten en dan werkt niet meer.
de code voor het verbergen is.
Sub verberg()
'
' verberg Macro
Dim Rng As Range
Dim WorkRng As Range
Dim xNumber As Integer
On Error Resume Next
xTitleId = "verberg_rijen"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Reeks", xTitleId, WorkRng.Address, Type:=8)
xNumber = Application.InputBox("Nul", xTitleId, "", Type:=1)
For Each Rng In WorkRng
Rng.EntireRow.Hidden = Rng.Value = xNumber
Next
End Sub

en de code voor het herstel is
' herstel Macro
'

Dim Rng As Range
Dim WorkRng As Range
Dim xNumber As Integer
On Error Resume Next
xTitleId = "Herstel_rijen"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Reeks", xTitleId, WorkRng.Address, Type:=8)
xNumber = Application.InputBox("Nul", xTitleId, "", Type:=1)
For Each Rng In WorkRng
Rng.EntireRow.unhide = Rng.Value = xNumber
Next
End Sub

er zit iets fout daar hij deze rijen niet teug zichtbaar maakt,
moet ik daar ergens een rij grootte voor tussenvoegen of zet hij die op standaard??
iemand een suggestie??

Sony
Lid geworden op: 19 feb 2005, 13:45
Locatie: Boom

16 jul 2019, 11:49

drumeke,

xTitleId benoemen in elke macro.
dim xTitleId as string
Alleen een enkele letter moet niet benoemd worden.

Sony
I Afbeelding SeniorenNet

drumeke
Lid geworden op: 05 feb 2005, 18:24
Locatie: Antwerpen

16 jul 2019, 12:37

Hallo Sony,
ik heb dit ingevoerd maar dit blijft hetzelfde

drumeke
Lid geworden op: 05 feb 2005, 18:24
Locatie: Antwerpen

16 jul 2019, 13:00

De bedoeling is dat ik in een lijst met speluitslagen de personen die niet aanwezig zijn een 0 waarde mee geef.
Echter bij het sorteren van de uitslagen zit er een waarde in de uitslag van 90 punten tot en met -50 punten
Daar komt dus die 0 waarden tussen. en dan krijg ik dit.
image.png
Dus ik moet voor de sortering de spelers die 0 waarden hebben er uit halen via het verbergen van deze rijen met een 0 waarde. dit lukte via dit systeem wel maar ik krijg ze daarna niet meer zichtbaar.
dus misschien kan dit ook via een simpele macro die de rijen met een nulwaarde in kolom (L4:L90) aanwezig zijn.
ik moet daarvoor 2 macro's hebben
1 om de rijen met 0 te verbergen en
1 om de rijen terug zichtbaar te maken

Sony
Lid geworden op: 19 feb 2005, 13:45
Locatie: Boom

18 jul 2019, 12:43

drumeke

Code: Selecteer alles

Sub verberg()
For i = 4 To 90
    If (Cells(i, 12)) = 0 Then
        Range(Cells(i, 1), Cells(i, 14)).Select
        Selection.EntireRow.Hidden = True
    End If
Next i
End Sub

Code: Selecteer alles

Sub Tonen()
For i = 4 To 90
    If (Cells(i, 12)) = 0 Then
        Range(Cells(i, 1), Cells(i, 14)).Select
        Selection.EntireRow.Hidden = False
    End If
Next i
End Sub
Sony
I Afbeelding SeniorenNet