worksheet change event in 1 keer in alle tabbladen

Status
Niet open voor verdere reacties.
bedankt voor de uitleg.

zou met deze code dan ook de wijzigingen op ieder tabblad geaktiveerd worden?

ik heb het wel geprobeerd, maar er vinden geen wijzingen plaats (zie bijlage).

of begrijp ik het nu verkeerd?
 

Bijlagen

  • maandoverzicht (oeldere) met code SNB.xls
    50,5 KB · Weergaven: 29
Deze gaat in de bladmodule van CombineSheet
Code:
 Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$C$1" And Target <> "" Then
    For i = 2 To Sheets.Count
        Sheets(i).[C1] = Target
    Next
 End If
End Sub

En deze komt bij in ThisWorkbook
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Range("C3:C7500").AutoFilter 3, Range("C1").Value '& "*" dit toevoegen als het tekst is / field is kolom
End Sub
 
De enige code die je nodig hebt staat in de werkboekmodule (Thisworkbook):

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  If Target.Address = "$C$1" And Target <> "" Then
    With Target.Offset(1).Resize(7500)
      .AutoFilter
      .AutoFilter 1, Target
    End With
  End If
End Sub
 
@ snb

De vraag was door op het eerste blad in C1 een waarde te plaatsen dat deze waarde automatisch op elk blad overgenomen zou worden en alzo op elk blad de filtering te starten.
Dat zie ik met jouw code nog niet direct gebeuren aangezien je op elk blad nog steeds handmatig een waarde moet invullen om de tabel gefilterd te krijgen. ;)
 
@SNB,

ik heb de code geplaatst en getest, maar deze code werkt (volgens mij) alleen voor het eerste werkblad.

als ik het fout heb (gedaan), hoor ik dit graag van je.

@Warm Bakkertje / SNB

ik heb inmiddels de (beide) codes van Warm Bakkertje in een Insert_Procedure gezet en werkend gekregen.

Volgens mij werken de change-event-codes van Warm Bakkertje (op de individuele tabbladen) als je de tabbladen (een voor een) aktiveert.

kan dat ook nog automatisch gedaan worden?

waarom wil ik dit.
ik ga de tabbladen straks (vooralsnog in 1 PDF bestand) printen en dan wil ik graag wel alleen de geselecteerde periode (van cel C1) in de individuele tabbladen zien.

Alle hulp blijft welkom.

"Overvraag" ik jullie, laat dat dan ook gewoon weten.
 
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  If Target.Address = "$C$1" And Target <> "" Then
    for each sn in sheets
      With sn.range(Target.address).Offset(1).Resize(7500)
         .AutoFilter
         .AutoFilter 1, Target
      End With
    next
  End If
End Sub
 
@SNB

de code getest en deze werkt perfect (super goed) :thumb::thumb:

deze code lost ook meteen mijn vorige vraag op (codes worden meteen bijgewerkt).


in D1 laat ik met een macro deze formule plaatsen.
Code:
=RECHTS(CEL("bestandsnaam");LENGTE(CEL("bestandsnaam"))-VIND.SPEC("]";CEL("bestandsnaam")))

de bedoeling hiervan is dat de naam van het tabblad in cel D1 komt te staan.

dit gebeurt nu ook wel, maar (waarschijnlijk) door de change event wordt op alle tabbladen de naam van het laatste tabblad weergegeven.

is dit anders op te lossen?
 
Plaats onderstaande regel tussen de For each ... en de With ... regels
Code:
sn.Range(Target.Address).Offset(, 1) = sn.Name
 
@warm bakkertje,

met jouw toevoeging werkt het zoals ik dit bedoeld heb.

het opnieuw in een Insert_Procedure zetten van de aangepast code van SNB en jouw toevoeging is me nu nog niet gelukt; maar daar ga ik zelf nog even mee aan de slag.
de bevindigen hiervan laat ik nog weten.


nieuwe vraag
ik laat via deze code een tabblad verwijderen

Code:
Sheets("naam").Delete

vervolgens komt onderstaande melding

De bladen zijn geselecteerd om te worden verwijderd, bevatten mogelijk gegevens.
Als u de gegevens permanent wilt verwijderen, klik u op Verwijderen.

verwijderen / annuleren

Op zich is het wel goed dat deze melding komt, maar ik wil deze graag zonder bevestigen afhandelen.

Kan dit en zo ja, hoe dient dit te gebeuren.
 
Code:
Application.DisplayAlerts = False
Sheets("naam").Delete
Application.DisplayAlerts = True
 
@warm bakkertje

bedankt voor de reactie, uiteraard werkt deze.

dit had ik zelf ook wel kunnen bedenken (zelf op kunnen lossen) :eek:
 
@warm bakkertje / @SNB

ter info.
het is me gelukt om de aangepaste code van SNB via een Insert_Procudere op te halen.

Met proberen is leren, is me dit gelukt.

Allebei heel hartelijk dank voor alle hulp en snelle reacties.:thumb::thumb::thumb:
 
En hoeveel voldoening geeft dit nu je de klus zelf geklaard hebt ?:D:thumb::thumb:
 
@warm bakkertje,

ik ben zeer tevreden over mezelf, maar dit was me zonder hulp van jullie echt niet gelukt. :p:thumb:

ik heb de afgelopen dagen veel over / van VBA geleerd (en dat is mooi voor de toekomst).

Ik had onderstaande code gevonden voor het printen van meerdere tabbladen.
de PDF creator is geinstalleerd (en heb ik nu als standaard ingesteld).

toch komt er de volgende foutmelding.

Compileerfout

Een door gebruiker gedefinieerd gegevenstype is niet gedefinieerd.

Hulp is wederom gewenst.

Code:
[COLOR="darkorange"]Sub PrintToPDF_MultiSheet_Early()[/COLOR]'Author       : Ken Puls (www.excelguru.ca)
'Macro Purpose: Print to PDF file using PDFCreator
'   (Download from http://sourceforge.net/projects/pdfcreator/)
'   Designed for early bind, set reference to PDFCreator

    Dim pdfjob As [COLOR="deepskyblue"]PDFCreator.clsPDFCreator[/COLOR]    
   Dim sPDFName As String
    Dim sPDFPath As String
    Dim lSheet As Long
    Dim bRestart As Boolean

    'Activate error handling and turn off screen updates
    On Error GoTo EarlyExit
    Application.ScreenUpdating = False

    Set pdfjob = New PDFCreator.clsPDFCreator
    sPDFPath = ActiveWorkbook.Path & Application.PathSeparator

    'Check if PDFCreator is already running and attempt to kill the process if so
    Do
        bRestart = False
        Set pdfjob = New PDFCreator.clsPDFCreator
        If pdfjob.cStart("/NoProcessingAtStartup") = False Then
            'PDF Creator is already running.  Kill the existing process
            Shell "taskkill /f /im PDFCreator.exe", vbHide
            DoEvents
            Set pdfjob = Nothing
            bRestart = True
        End If
    Loop Until bRestart = False

    For lSheet = 1 To ActiveWorkbook.Sheets.Count
        'Check if worksheet is empty and skip if so
        If Not IsEmpty(Sheets(lSheet).UsedRange) Then
            With pdfjob
                '/// Change the output file name here! ///
                sPDFName = "testPDF" & Sheets(lSheet).Name & ".pdf"
                .cOption("UseAutosave") = 1
                .cOption("UseAutosaveDirectory") = 1
                .cOption("AutosaveDirectory") = sPDFPath
                .cOption("AutosaveFilename") = sPDFName
                .cOption("AutosaveFormat") = 0    ' 0 = PDF
                .cClearCache
            End With
    
            'Delete the PDF if it already exists
            If Dir(sPDFPath & sPDFName) = sPDFName Then Kill (sPDFPath & sPDFName)
    
            'Print the document to PDF
            Worksheets(lSheet).PrintOut copies:=1, ActivePrinter:="PDFCreator"
    
            'Wait until the print job has entered the print queue
            Do Until pdfjob.cCountOfPrintjobs = 1
                DoEvents
            Loop
            pdfjob.cPrinterStop = False
    
            'Wait until the file shows up before moving on
            'Important:  Counter must reach zero or hangs on next iteration
            Do Until pdfjob.cCountOfPrintjobs = 0
                DoEvents
            Loop

        End If
    Next lSheet
    
Cleanup:
    'Release objects and terminate PDFCreator
    Set pdfjob = Nothing
    Shell "taskkill /f /im PDFCreator.exe", vbHide
    On Error GoTo 0
    Application.ScreenUpdating = True
    Exit Sub

EarlyExit:
    'Inform user of error, and go to cleanup section
    MsgBox "There was an error encountered.  PDFCreator has" & vbCrLf & _
           "has been terminated.  Please try again.", _
           vbCritical + vbOKOnly, "Error"
    Resume Cleanup
End Sub

de bovenste code wordt weergegeven in geel.
het 2e gedeelte wordt weergegeven als blauw

P.s. ik werk met excel 2007
 
Laatst bewerkt:
neem een macro op terwijl je met Excel 2007 een bestand print als een PDF. (je hebt geen externe PDF-schrijver nodig). Gebruik per ongeluk ook eens de hulpfunktie van Excel (zit geloof ik onder knop F1 ). Zoek niet (op Internet) wat op je eigen computer staat.
 
PDFCreator moet als verwijzing worden toegevoegd in je VBA project om die code uit te voeren.
dat staat ook in de code.

' Designed for early bind, set reference to PDFCreator

Natuurlijk kun je ook via worksheet.printout je document uitprinten, maar dan moet je per gegenereerd PDF document invullen waar je dat wil laten opslaan.

Als je de pdfCreator macro aanpast kun je dat ook automatisch laten doen.

De macro zet namelijk de pdfcreator autosave optie aan, en vult een autosave pad en bestand in.
Als je dit in de For..Next lust zo aanpast dat per werkblad de autosave bestandsnaam word aangepast, kun je in één keer meerdere pdf's laten opslaan zonder dat je ondertussen gebruikersinput nodig hebt.
 
@Mark xl

met jouw tekst is met dit gelukt.
door het aanvinken van de PDF creator als object werkt de hele code als een zonnetje.

het is wel suf van me (want in #15) krijg ik voor een soortgelijke vraag ook het antwoord van Warm Bakkertje.

zo zie je maar dat ik nog veel van VBA kan leren. :p

@SNB

Code:
Zoek niet (op Internet) wat op je eigen computer staat.

ik ben zelf (nog) niet vaardig genoeg om dergelijke codes zelf te schrijven (bewerken).
als via internet dan een werkende code beschikbaar is, maak ik daar graag gebruik van.
van werkende codes (en aanpassingen hierop maken) krijg je nieuwe vaardigheden, die het schrijven van een macro, in de toekomst, alleen maar makkelijker maken.

Uiteraard ben ik zeer tevreden over je bijdrage in deze vraag.

Alle helpers in deze vraag geweldig bedankt. :thumb::thumb::thumb:

Op deze vraag gaat nu een slotje.
 
Misschien was het je al opgevallen dat ik niet zo kapot ben van de meeste code die op internet gevonden kan worden. De meest oplossingen zitten tussen je oren en op je eigen PC. Nadenken is beter dan (vaak blind) kopiëren (een kruiswoordraadsel probeer je toch ook eerst zoveel mogelijk op te lossen voordat je een puzzelwoordenboek gaat raadplegen ??)
Zo begrijp ik niet dat je gebruik maakt van een externe PDF-schrijver, terwijl die in Office 2007 is ingebouwd .Saveas...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan