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

Selektie

Status
Niet open voor verdere reacties.

jarre

Gebruiker
Lid geworden
4 jul 2007
Berichten
38
Hallo,

Sub Knop104_BijKlikken()

Application.ScreenUpdating = False

If Not IsNumeric(Range("a2").Value) Then
MsgBox "Er is geen nummer geselekteerd om te printen."
Else

Sheets("Naw").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Invoer").Select

Range("A" & Cells(2, 1) + 2).Value = ""
Range("A1").Select

Application.ScreenUpdating = True
End If
End Sub


Door in kolom A (van invoer) willekeurig aantal keren een S te zetten, zal elke keer als op de printmacro gedrukt wordt de bewuste rij in het Blad Naw worden afgedrukt.
Steeds als een rij in NAW is afgedrukt, verdwijnt in kolom A van invoer de S (van selektie).Voor elke afdruk moet dus steeds op de printmacro gedrukt worden.

Zou het mogelijk zijn om met één druk op de printmacro ALLE geselekteerde S jes (rijen) in één af te drukken?
 

Bijlagen

Denk dat het aardig gelukt is.
Bedoelde je dit?

Cotje

Wat een super snelle reactie!
Direct uitgeprobeerd, maar hij werkt bij mij hij niet, de S en blijven geselecteerd staan. Mogelijk nog een kleine oneffenheid.
Verder ziet het er prima uit.
Gr.
Jarre
 
Vreemd, bij mij print die zowel en de S en worden ook nog eens weggehaald. Heb het gemaakt in Office 2003, weet niet welke versie jij heb?
 
Vreemd, bij mij print die zowel en de S en worden ook nog eens weggehaald. Heb het gemaakt in Office 2003, weet niet welke versie jij heb?

Ik werk ook met office 2003.
Laat morgen wat van me horen.
Jarre
 
Jarre, de code werkt prima maar vermijd zoveel mogelijk het gebruik van Select in je macros. Het is onnodig,werkt vertragend en zorgt enkel voor problemen. Volgende doet hetzelfde werk en zonder Select.
Code:
Sub Knop104_BijKlikken()
    Dim i As Integer
    If Not IsNumeric([A2].Value) Then
        MsgBox "Er is geen nummer geselekteerd om te printen."
    Else
        i = 3
        temp = "rij"
        While temp <> ""
            If Range("A" & CStr(i)).Value = "S" Then
                Application.ScreenUpdating = False
                    Sheets("Naw").PrintOut Copies:=1, Collate:=True
                    Range("A" & Cells(2, 1) + 2).Value = ""
                Application.ScreenUpdating = True
            End If
            i = i + 1
            temp = Range("C" & CStr(i)).Value
        Wend
    End If
    [A1].Select
End Sub

Mvg

Rudi
 
Vreemd, bij mij print die zowel en de S en worden ook nog eens weggehaald. Heb het gemaakt in Office 2003, weet niet welke versie jij heb?

Cotje,
Je code werkt perfect, in eerste instantie had ik niet in de gaten dat de letter "S" hoofdletter gevoelig is.
Ik ben hiermee enorm geholpen, nogmaals dank hiervoor.
Jarre
 
Jarre, de code werkt prima maar vermijd zoveel mogelijk het gebruik van Select in je macros. Het is onnodig,werkt vertragend en zorgt enkel voor problemen. Volgende doet hetzelfde werk en zonder Select.
Code:
Sub Knop104_BijKlikken()
    Dim i As Integer
    If Not IsNumeric([A2].Value) Then
        MsgBox "Er is geen nummer geselekteerd om te printen."
    Else
        i = 3
        temp = "rij"
        While temp <> ""
            If Range("A" & CStr(i)).Value = "S" Then
                Application.ScreenUpdating = False
                    Sheets("Naw").PrintOut Copies:=1, Collate:=True
                    Range("A" & Cells(2, 1) + 2).Value = ""
                Application.ScreenUpdating = True
            End If
            i = i + 1
            temp = Range("C" & CStr(i)).Value
        Wend
    End If
    [A1].Select
End Sub

Mvg

Rudi

Rudi,
Ook hartelijk dank voor de aanvullingen, zoals gezegd; het werkt perfect. De reden waarom het niet werkte was dat er geen hoofdletter "S" werd ingegeven. Mogelijk is dat nog aan te passen.
Jarre
 
Jarre, plaats volgende code achter blad Invoer. Elke kleine letter wordt dan automatisch omgezet in een hoofdletter
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Intersect(Target, Range("A3:A22")) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        Target = UCase(Target)
        Application.EnableEvents = True
End Sub

Mvg

Rudi
 
De reden waarom het niet werkte was dat er geen hoofdletter "S" werd ingegeven. Mogelijk is dat nog aan te passen.
Als je programmatuur afhankelijk is van menselijke invoer moet je dit soort zaken inderdaad altijd afvangen. Dit kan je doen door gebruik te maken van de functionaliteit Validatie (Data > Validatie > Lijst) zodat de gebruiker alleen DAT aan kan geven wat JIJ wilt. Of je vangt het af in de code door volledig met óf kleine óf met hoofdletters te werken. Je If-statement wordt dan
Code:
If UCase(Range("A" & i).Value) = "S" Then

Het converteren van je variabele 'i' naar een string in het Range-object heeft trouwens geen enkele zin en mag dus achterwege blijven.

Groet, Leo

EDIT: @Warme Bakkertje... Had niet gezien dat jij ook al had gereageerd. Je oplossing kan zeker, maar persoonlijk vind ik 'm te 'zwaar' voor deze aanpassing.
 
Laatst bewerkt:
Jarre, plaats volgende code achter blad Invoer. Elke kleine letter wordt dan automatisch omgezet in een hoofdletter
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Intersect(Target, Range("A3:A22")) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        Target = UCase(Target)
        Application.EnableEvents = True
End Sub

Mvg

Rudi

Rudi,
Wederom dank voor deze aanvulling. Je hulp was onmisbaar!
Jarre
 
Als je programmatuur afhankelijk is van menselijke invoer moet je dit soort zaken inderdaad altijd afvangen. Dit kan je doen door gebruik te maken van de functionaliteit Validatie (Data > Validatie > Lijst) zodat de gebruiker alleen DAT aan kan geven wat JIJ wilt. Of je vangt het af in de code door volledig met óf kleine óf met hoofdletters te werken. Je If-statement wordt dan
Code:
If UCase(Range("A" & i).Value) = "S" Then

Het converteren van je variabele 'i' naar een string in het Range-object heeft trouwens geen enkele zin en mag dus achterwege blijven.

Groet, Leo

Ginger

Is het soms Ginger Baker voormalig drummer van Eric Clapton?
Goed, ook dank voor deze code, er zijn meerdere wegen die naar een oplossing leiden.
Dit forum is goed platform hiervoor.
Jarre


EDIT: @Warme Bakkertje... Had niet gezien dat jij ook al had gereageerd. Je oplossing kan zeker, maar persoonlijk vind ik 'm te 'zwaar' voor deze aanpassing.
 
De oplossing van Ginger is eenvoudiger.
Maar in de lijn van Rudi kan het korter met

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Intersect(Target, Range("A3:A22")) Is Not Nothing Then Target = UCase(Target)
End Sub

PS. In
Code:
If Range("A" & CStr(i)).Value = "S" Then
is CStr() overbodig, omdat & een concatenatie operator is, die alle elementen automatisch naar een tekstreeks converteert. (bijv. ook c0="A" & Date)
 
Het converteren van je variabele 'i' naar een string in het Range-object heeft trouwens geen enkele zin en mag dus achterwege blijven.

Kijk, weer wat geleerd :)

Had inderdaad zoals gemeld de kleine letter s moeten ondervangen, ook weer een leer voor de volgende keer.
 
De oplossing van Ginger is eenvoudiger.
Maar in de lijn van Rudi kan het korter met

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Intersect(Target, Range("A3:A22")) Is Not Nothing Then Target = UCase(Target)
End Sub

PS. In
Code:
If Range("A" & CStr(i)).Value = "S" Then
is CStr() overbodig, omdat & een concatenatie operator is, die alle elementen automatisch naar een tekstreeks converteert. (bijv. ook c0="A" & Date)

Ook bedankt voor het meedenken, weer wat geleerd.
Jarre
 
De oplossing van Ginger is eenvoudiger.
Maar in de lijn van Rudi kan het korter met

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Intersect(Target, Range("A3:A22")) Is Not Nothing Then Target = UCase(Target)
End Sub

PS. In
Code:
If Range("A" & CStr(i)).Value = "S" Then
is CStr() overbodig, omdat & een concatenatie operator is, die alle elementen automatisch naar een tekstreeks converteert. (bijv. ook c0="A" & Date)

Dank voor deze aanvulling.
Jarre
 
De oplossing van Ginger is eenvoudiger.
Maar in de lijn van Rudi kan het korter met

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Intersect(Target, Range("A3:A22")) Is Not Nothing Then Target = UCase(Target)
End Sub

PS. In
Code:
If Range("A" & CStr(i)).Value = "S" Then
is CStr() overbodig, omdat & een concatenatie operator is, die alle elementen automatisch naar een tekstreeks converteert. (bijv. ook c0="A" & Date)

Weer wat wijzer, bedankt.
Jarre
 
De oplossing van Ginger is eenvoudiger.
Maar in de lijn van Rudi kan het korter met

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Intersect(Target, Range("A3:A22")) Is Not Nothing Then Target = UCase(Target)
End Sub

PS. In
Code:
If Range("A" & CStr(i)).Value = "S" Then
is CStr() overbodig, omdat & een concatenatie operator is, die alle elementen automatisch naar een tekstreeks converteert. (bijv. ook c0="A" & Date)

Bedankt voor deze aanvulling.
Jarre
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan