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

VBA, waarschuwing en niet printen bij leeg blad/tabel

Status
Niet open voor verdere reacties.

Frankell87

Gebruiker
Lid geworden
7 mei 2015
Berichten
141
Hallo heren en dames,

Wij gebruiken op het werk een Excel bestand om schoonmaak/inspectie werkzaamheden te plannen. Sommigen moeten elke 2 weken, andere elke 4 weken bijvoorbeeld.
Er wordt gewerkt met meerdere Excel bestanden, in 1 (het hoofdbestand) zijn knoppen gemaakt die de mbv een macro de schoonmaak/inspectie lijsten naar voren halen uit de andere Excel betanden (bron bestanden). Het bronbestand bestaan uit een tabel met (buiten het printbereik) een weekverdeling en daaronder een 'X' als de taak moet worden uitvoerd.
De macro kijkt welke week het is, filtert dit uit in het tabel en print dan de pagina af.

Nu komt het wel eens voor dat er in die week geen werkzaamheden hoeven worden uitgevoerd en dan print hij alleen de titels van de pagina (bovenkant tabel) af. Dit vinden we erg slordig en zouden graag willen dat hij zijn printopdracht dan staakt en met een MsgBox komt met iets als: "Deze week zijn er geen schoonmaak/inspectie taken."

Onderstaand de huidige macro en een schreenshot van het Bron bestand.
Siks screenshot.PNG

Code:
Sub Printen_Kalibratie_Dry_End()
' Copy_Open_Select_Plak_Filter_Print_Close Macro
    UserForm1.Show 0

    Dim nummer As Integer
    nummer = Range("i22").Value + 11
            
    Application.ScreenUpdating = False
    
    Range("i22").Select
    Selection.Copy
        
    Workbooks.Open Filename:= _
        "C:\Schoonmaak.xls"
    Worksheets("Agenda I-K").Activate
    Range("J2:J3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    Worksheets("Agenda I-K").Range("L5:BL5").AutoFilter _
    field:=nummer, _
    Criteria1:="x", _
    VisibleDropDown:=True
          
    ActiveSheet.Range("$M$5:$BL$307").AutoFilter field:=nummer, Criteria1:="x"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    
   
    ActiveWindow.Close Saved = True
    Unload UserForm1
    Application.ScreenUpdating = False
    
End Sub
 
Bepaal wanneer voor jou zo'n blad "leeg" is, controleer dat, toon dan een MsgBox en doe een Exit Sub.
 
Yes helemaal goed, maar hoe schrijf ik dat in VBA...

moet er dan zoiets tussen?

Code:
If .... = "" GoTo LeegTabel

LeegTabel:

MsgBox  "Deze week zijn er geen schoonmaak/inspectie taken.", vbOkOnly, "Geen gegevens gevonden."
End sub
 
Nee.
Code:
If JouwControle = "" Then
    MsgBox  "Deze week zijn er geen schoonmaak/inspectie taken.", vbOkOnly, "Geen gegevens gevonden."
    Exit Sub
End If
 
pff kom er niet uit wat ik nou op JouwControle moet zetten hoor....
aardig aan het googlen geweest maar kan niet vinden wat ik moet hebben. Dacht het gevonden te hebben met

Code:
If Range("6:8").Rows.Hidden = True Then

maar ook was dat hem niet, hiermee kun je ze wel verbergen maar dat is niet wat ik zoek.

heb jij een idee?
 
pff kom er niet uit wat ik nou op JouwControle moet zetten hoor....
aardig aan het googlen geweest maar kan niet vinden wat ik moet hebben. Dacht het gevonden te hebben met

Code:
If Range("6:8").Rows.Hidden = True Then

maar ook was dat hem niet, hiermee kun je ze wel verbergen maar dat is niet wat ik zoek.

heb jij een idee?

deze formule slaat aan als er ook maar 1 tussenzit die is verborgen
 
IF Range("A2")="" Then
Dit b.v.b. Denk ik.

nope, het kan best zijn dat daar wat staat, maar dat de rij is verborgen. zoals in het plaatje is te zien gaat hij filteren op de laatste kolommen. misschien zoeken in iets van HiddenRow of EmptyTable of zo.... althans in die hoek lijkt me logisch
 
Dit is maar een voorbeeld.
Dan neem je een andere cel waar normaal wel wat staat.
 
Dit is maar een voorbeeld.
Dan neem je een andere cel waar normaal wel wat staat.

ja ok, dan moet ik in de kolom kijken of er een "X" in staat. er kan namelijk ook een andere tekst in staan.

hoe zet ik er dan neer:
Code:
IF Range ("D4:D999") [I]'bevat geen X'[/I] Then...
 
Zo:
Code:
If ActiveSheet.Range("D4:D999").Find("X", LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then
    MsgBox "X niet gevonden"
    Exit Sub
End If
 
Laatst bewerkt:
Zo:
Code:
If ActiveSheet.Range("D4:D999").Find("X", LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then
    MsgBox "X niet gevonden"
    Exit Sub
End If

Top volgens mij is dit wat ik moet hebben!!
Bedankt ExcelAmateur voor de richting en edmoor (alweer) voor de finishing!:thumb:
 
en dan voor de puntjes op de ï....

nu hebben we kolom D erin staan maar deze veranderd natuurlijk elke week.
het kolom-nummer heb ik in principe al opgeslagen onder 'nummer'
 
Zoiets:
Code:
If ActiveSheet.Columns(nummer).Find("X", LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then
    MsgBox "X niet gevonden"
    Exit Sub
End If
 
Het quoten is niet nodig. Het plaatsen van een bestand is wenselijk. Met VBA zou het zoiets kunnen worden.
Code:
Sub VenA()
  nummer = Range("I22") + 11
  With Workbooks.Open("C:\Schoonmaak.xls")
    .Range("J2") = nummer - 11
    With .Range("A5:BL307")
      .AutoFilter nummer, "x"
      If .Cells.SpecialCells(12).Count > .Columns.Count Then .Parent.PrintPreview Else MsgBox "Deze week zijn er geen schoonmaak/inspectie taken.", vbOKOnly, "Geen gegevens gevonden."
    End With
    .Parent.Close True
  End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan