Macro's in excel
-
drumeke - Lid geworden op: 05 feb 2005, 18:24
- Locatie: Antwerpen
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
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
-
drumeke - Lid geworden op: 05 feb 2005, 18:24
- Locatie: Antwerpen
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.
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
-
Sony - Lid geworden op: 19 feb 2005, 13:45
- Locatie: Boom
drumeke,
hierbij een afbeelding en tekst van een eenvoudige macro
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
hierbij een afbeelding en tekst van een eenvoudige macro
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
Kolom R = 18
Variabele i begint in deze macro met 1 = rij 1
Dat is allemaal eenvoudig te wijzigen.
Sony
I SeniorenNet
-
franç - Lid geworden op: 10 jul 2003, 12:34
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).
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
franç ,
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.
Sony
Ik reageer alleen op een probleemstelling van TS.Ik heb een probleem met een macro in excel
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.
Begrijpelijk, beroeps geheim.Ik kan hier geen Excelbestand toevoegen, anders zouden lezers van dit topic het ook kunnen zien
Sony
I SeniorenNet
-
franç - Lid geworden op: 10 jul 2003, 12:34
Ik heb geen probleem met met een macro, de vragensteller in dit topic had dat.
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.
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 !
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.
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
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??
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??
-
drumeke - Lid geworden op: 05 feb 2005, 18:24
- Locatie: Antwerpen
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. 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
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. 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
drumeke
Sony
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
I SeniorenNet