Você está entendo bem as coisas. Com o VBA, você consegue fazer coisas que não conseguiria fazer normalmente só no Excel. Você pode copiar dados de uma planilha que não esteja ativa para outra, por exemplo. Então, minha recomendação é que você não use o
método Select, seja para células, planilhas ou pastas de trabalho. No entanto, vou explicar por que você está tendo esse erro com o método Select. ele pode acontecer por 3 motivos principais:
1 - O objeto que você tentou selecionar não existe.
2 - Se você tentar selecionar a planilha de uma pasta de trabalho que não esteja ativa, obterá erro. (esse foi o seu caso)
3 - Se você tentar selecionar uma célula ou intervalo de uma planiliha que não esteja ativa, obterá erro.
Minha sugestão para seu código seria algo como:
Sub Main()
Dim wsDados As Worksheet
Dim wsPonto As Worksheet
Set wsDados = Workbooks("dados").Worksheets("sheet1")
Set wsPonto = Workbooks("cartao ponto").Worksheets("sheet1")
wsDados.Range("A1").AutoFilter 4, "<>"
wsDados.Range("A1").CurrentRegion.Copy
wsPonto.Range("A1").PasteSpecial Paste:=xlPasteValues
wsDados.AutoFilterMode = False
wsPonto.Activate
End Sub
Nesse exemplo, colo o resultado do filtro na célula A1 da planilha de cartão de ponto. Vocêpode mudar isso, se quiser. Note que uso o método Activate só no final da rotina de propósito, para dar foco na planilha "que interessa" ao usuário ao final da rotina.
Ola Felipe, mais uma vez obrigado pelo suporte e apoio que esta me dispensando.
Quanto ao codigo que voce postou, roda redondo, mas como eu tinha dito antes, o que eu escrevi nao rodava porque resumidamente em vez de copy, para nao ficar muito complicado a pergunta , substitui por Select que eh como copy um metodo, certo. Mas se substituir
o copy com select no seu codigo, da erro de numero 1004, porque sera?
Na verdade o que estou tentando fazer e copiar dados de horas trabalhadas do arquivo dados de varios funcionarios que vem da fabrica todos os dias e ir colocando um atraz do outro para fazer um Banco de Dados no arquivo cartao ponto.Para nao copiar o cabecario
o codigo seria
wsDados.Range("A1").CurrentRegion.Offset(1).Copy
Fazendo o codigo acima, ela deixa de copiar os cabecarios do arquivo dados para poder ir ajuntando um abaixo do outro como desejado, porem como usei o Offset(1), desloca a regiao selecionada ,uma linha para baixo
ficando a ultima linha em branco que seria copiando junto tambem, e para evitar isso escrevi
wsDados.Range("A1").CurrentRegion.Offset(1).Resize(Range("A1").CurrentRegion.Rows.Count-1).Copy
.......dai deu Zebra....nao copia toda regiao dos dados, mas se nao usar o filtro, ou seja nao tiver lacuna na coluna 4 funciona normal.Nao sei se estou sendo muito perfeccionista, mas sera que tem alguma maneira
de sanar isso?
Nao expliquei porque estou usando o Filtro, mas e o seguinte, a planilha do arquivo dados que recebo, esta configurado para dar um visual melhor para fins de utilizacao da fabrica e ela contem alem do cabecalho os subcabecalhos que para mim nao nos interessa,
como exemplo na coluna 1 os setores que os funcionarios sao distribuidos.Como na linha que tem os setores nao tem horas de entrada, que fica na coluna 4 filtrei a coluna 4 para obter todos os registros e depois aplicar o copy.
Tadao