Macro copiando células em branco

0

Eu tenho esta macro:

Na planilha 1, ele seleciona todos os valores da Coluna A, seleciona apenas as constantes, seleciona o filtro e copia os valores filtrados na coluna A e os cola em outra lista. Então, novamente, mas com a próxima coluna.

O problema é quando a coluna filtrada fica vazia. Quando existem alguns valores, não há problema, mas quando a coluna filtrada está vazia, estou recebendo erro de execução. Como posso resolver isso por favor?

AquiomeuMacrocopiaapenasaColunaAeaColunaB,equandocheganaColunaCeurecebooerroeelenãocontinua.

ATUALIZADO:

1:

'PODC2OSheets("Celkový harmonogram").Select
ActiveWorkbook.SlicerCaches("Průřez_dispečer32111").ClearManualFilter
Range("Tabulka141121518[13]").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
With ActiveWorkbook.SlicerCaches("Průřez_dispečer32111")
    .SlicerItems("Bodnariucová Renáta").Selected = False
    .SlicerItems("Kajer Roman").Selected = True
End With

If Application.CountIf(Selection, "<>0") < 1 Then GoTo Line442
Application.CutCopyMode = False
Selection.Copy
Sheets("jednotlivci").Select
Range("Y6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

'   UT DC2 R
Line442:
Sheets("Celkový harmonogram").Select
ActiveWorkbook.SlicerCaches("Průřez_dispečer32111").ClearManualFilter
Range("Tabulka141121518[14]").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
With ActiveWorkbook.SlicerCaches("Průřez_dispečer32111")
...

2: (erro com células vazias)

If Application.CountIf(myRange, "<>0") > 0 Then
Application.CutCopyMode = False
Selection.Copy
Sheets("jednotlivci").Select
Range("Y6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Else: GoTo Line442
End If

3: (erro de incompatibilidade de tipo na linha "If ..")

If Application.CountIf(Selection, "<>0") < 1 Then GoTo Line442

Application.CutCopyMode = False
Selection.Copy
Sheets("jednotlivci").Select
Range("Y6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    
por Roman Žydyk 12.04.2017 / 16:22

1 resposta

0

Eu adicionei três linhas ao seu código. Eles verificam se sua seleção / intervalo está vazia e, em seguida, sair do sub em caso afirmativo. Você precisa executar este código e talvez remover a declaração if que você já adicionou ( .Value não faz muito sentido para mim). Além disso, você precisa verificar qual if-statement que eu adicionei resolve o erro original que você mencionou primeiro em sua pergunta (provavelmente você acabará tendo apenas o terceiro).

Sheets("Celkový harmonogram").Select
ActiveWorkbook.SlicerCaches("Průřez_dispečer32111").ClearManualFilter
Range("Tabulka141121518[13]").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select

'This is the part added (if you get the error in the following lines):
If Application.CountIf(Selection, "<>0") < 1 Then Exit Sub
'This will exit the sub; you can also "GoTo" a line as error handler or _
'Skip one step of a loop as you mentioned you are doing this for number of columns.

With ActiveWorkbook.SlicerCaches("Průřez_dispečer32111")
    .SlicerItems("Bodnariucová Renáta").Selected = False
    .SlicerItems("Kajer Roman").Selected = True
End With

'Also this cause it's not clear where you exactly get the error:
If Application.CountIf(Selection, "<>0") < 1 Then Exit Sub
'OR
If Application.CountIf(Sheets("Celkový harmonogram").Range("Tabulka141121518[13]") _
 , "<>0") < 1 Then Exit Sub


If Sheets("Celkový harmonogram").Range("Tabulka141121518[13]").Value <> "" Then
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("jednotlivci").Select
    Range("Y6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End If

Em vez de Exit Sub , você pode ir para outra linha como esta:

If Criteria Then 
isError = True
GoTo ErrorHandler
End If

'Rest of the code in case of no error
'...

ErrorHandler:
If IsError Then
'Code you want to be performed in case of error
End If

Aviso: A segunda instrução if é adicionada para evitar a execução do manipulador de erros em caso de nenhum erro (o VBA executa tudo e não ignora o bloco ErrorHandler).

    
por 12.04.2017 / 18:50