Você está offline; aguardando reconexão

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

Support for Office 2003 has ended

Microsoft ended support for Office 2003 on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

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)            NextEnd 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    NextEnd 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: 12/03/2007 16:11:00 - Revisão: 6.3

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition

  • kberrmsg kbbug kbmacro kbprogramming kbautomation kbpending kbvba kbexpertiseinter KB210684
Comentários