Copiar planilha programaticamente causa o erro de tempo de execução 1004 no Excel

Traduções deste artigo Traduções deste artigo
ID do artigo: 210684 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

No Microsoft Excel, você executa uma macro que copia planilhas e, em seguida, coloca as planilhas na mesma pasta de trabalho na qual elas foram originadas. Ao fazer esse procedimento, uma mensagem de erro semelhante às seguintes é exibida:
Erro em tempo de execução '1004':
"O método de cópia da classe de planilhas falhou"
Erro em tempo de execução '1004':
Erro definido por objeto ou definido por aplicativo

Causa

A Microsoft fornece exemplos de programação apenas por questões ilustrativas, sem garantias expressas ou implícitas. Isto inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um determinado propósito. Este artigo pressupõe que você conhece a linguagem de programação demonstrada e também as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudá-lo, fornecendo a explicação da funcionalidade de um determinado procedimento. Mas não modificarão estes exemplos para fornecer funcionalidades adicionais ou construir procedimentos específicos para atender às suas necessidades específicas.

Esse problema pode ocorrer quando você dá um nome definido para a pasta de trabalho e a copia várias vezes sem salvá-la e fechá-la, como no código de exemplo a seguir:
Sub CopySheetTest()
    Dim iTemp As Integer
    Dim oBook As Workbook
    Dim iCounter As Integer
    
    ' Create a new blank workbook:
    iTemp = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Set oBook = Application.Workbooks.Add
    Application.SheetsInNewWorkbook = iTemp
    
    ' Add a defined name to the workbook
    ' that RefersTo a range:
    oBook.Names.Add Name:="tempRange", _
        RefersTo:="=Sheet1!$A$1"
            
    ' Save the workbook:
    oBook.SaveAs "c:\test2.xls"
    
    ' Copy the sheet in a loop. Eventually,
    ' you get error 1004: Copy Method of
    ' Worksheet class failed.
    For iCounter = 1 To 275
        oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)        
    Next
End Sub
				

Resolução

Para resolver esse problema, salve e feche a pasta de trabalho periodicamente enquanto o processo de cópia estiver sendo realizado, como no código de exemplo a seguir:
Sub CopySheetTest()
    Dim iTemp As Integer
    Dim oBook As Workbook
    Dim iCounter As Integer
    
    ' Create a new blank workbook:
    iTemp = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Set oBook = Application.Workbooks.Add
    Application.SheetsInNewWorkbook = iTemp
    
    ' Add a defined name to the workbook
    ' that RefersTo a range:
    oBook.Names.Add Name:="tempRange", _
        RefersTo:="=Sheet1!$A$1"
            
    ' Save the workbook:
    oBook.SaveAs "c:\test2.xls"
    
    ' Copy the sheet in a loop. Eventually,
    ' you get error 1004: Copy Method of
    ' Worksheet class failed.
    For iCounter = 1 To 275
        oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
        'Uncomment this code for the workaround:
        'Save, close, and reopen after every 100 iterations:
        If iCounter Mod 100 = 0 Then
            oBook.Close SaveChanges:=True
            Set oBook = Nothing
            Set oBook = Application.Workbooks.Open("c:\test2.xls")
        End If
    Next
End Sub
				
Observação O número de vezes que você pode copiar uma planilha, antes de salvar a pasta de trabalho, varia de acordo com o tamanho da planilha.

Como Contornar

Para resolver esse problema, insira uma nova planilha a partir de um modelo em vez de copiar uma planilha existente. Para fazer isso, siga essas etapas de acordo com a versão do Excel que está sendo utilizada.

Microsoft Office Excel 2007

  1. Crie uma nova pasta de trabalho, deixe somente uma planilha e exclua todas as outras.
  2. Formate a pasta de trabalho e, em seguida, adicione qualquer texto, dados e gráficos que você precisa ter no modelo por padrão.
  3. Clique no Botão do Microsoft Office e em Salvar como.
  4. Na caixa Nome do arquivo, digite o nome desejado para o modelo do Excel.
  5. Na lista Salvar como tipo, clique em Modelo do Excel (*.xltx) e clique em Salvar.
  6. Para inserir o modelo programaticamente, use o seguinte código:
    Sheets.Add Type:=caminho\nome_do_arquivo
    Nesse código, caminho\nome_do_arquivo é uma seqüência que contém o caminho e o nome de arquivo completo do modelo de planilha.

Microsoft Office Excel 2003 e versões anteriores do Excel

  1. Crie uma nova pasta de trabalho, deixe somente uma planilha e exclua todas as outras.
  2. Formate a pasta de trabalho e, em seguida, adicione qualquer texto, dados e gráficos que você precisa ter no modelo por padrão.
  3. Clique em Arquivo e clique em Salvar como.
  4. Na caixa Nome do arquivo, digite o nome desejado para o modelo do Excel.
  5. Na lista Salvar como tipo, clique em Modelo (*.xlt) e clique em Salvar.
  6. Para inserir o modelo programaticamente, use o seguinte código:
    Sheets.Add Type:=caminho\nome_do_arquivo
    Nesse código, caminho\nome_do_arquivo é uma seqüência que contém o caminho e o nome de arquivo completo do modelo de planilha.

Situação

A Microsoft confirmou que este é um problema nos produtos Microsoft que estão listados na seção "Aplica-se a".

Propriedades

ID do artigo: 210684 - Última revisão: segunda-feira, 3 de dezembro de 2007 - Revisão: 6.3
A informação contida neste artigo aplica-se a:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Palavras-chave: 
kberrmsg kbbug kbmacro kbprogramming kbautomation kbpending kbvba kbexpertiseinter KB210684

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com