Artigo: 210684 - Última revisão: segunda-feira, 2 de Abril de 2007 - Revisão: 6.4

Copiar a folha de cálculo programaticamente causa erro de tempo de execução 1004 no Excel

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

No Microsoft Excel, executar uma macro que copia folhas de cálculo e, em seguida, coloca as folhas de cálculo no mesmo livro a partir do qual que teve origem. Quando o fizer, poderá receber uma mensagem de erro semelhante uma das seguintes mensagens de erro:
Run-time error '1004':
Falha na cópia método de classe de folha de cálculo
Run-time error '1004':
Erro definido pela aplicação ou definido pelo objecto

Causa

A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento. No entanto, não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.

Este problema pode ocorrer quando dê um nome definido ao livro e, em seguida, copiar a folha de cálculo várias vezes sem guardar e fechar o livro, como no seguinte código de exemplo:
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 este problema, guarde e feche o livro periodicamente durante o processo de cópia está a ocorrer, tal como no seguinte código de exemplo:
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
				
NOTA: O número de vezes que pode copiar uma folha de cálculo antes tem de guardar o livro varia com o tamanho da folha de cálculo.

Como contornar

Para contornar este problema, insira uma nova folha de cálculo a partir de um modelo em vez de copiar uma folha de cálculo existente. Para o fazer, siga estes passos, conforme apropriado para a versão do Excel que estiver a executar.

Microsoft Office Excel 2007

  1. Criar um novo livro e elimine todas as folhas de cálculo, excepto para um.
  2. Formate o livro e, em seguida, adicione qualquer texto, dados e gráficos que tem de ter no modelo por predefinição.
  3. Clique no Botão do Microsoft Office e, em seguida, clique em Guardar como .
  4. Na caixa nome do ficheiro , escreva o nome que pretende para o modelo do Excel.
  5. Na lista Guardar com o tipo , clique em modelo (*.xltx) e, em seguida, clique em Guardar .
  6. Para inserir o modelo de programação, utilize o seguinte código:
    Tipo de Sheets.Add: = path \ filename
    Este código, path \ filename é uma cadeia que contém o caminho e nome completo para o modelo de folha.

Microsoft Office Excel 2003 e versões anteriores do Excel

  1. Criar um novo livro e elimine todas as folhas de cálculo, excepto para um.
  2. Formate o livro e, em seguida, adicione qualquer texto, dados e gráficos que tem de ter no modelo por predefinição.
  3. Clique em ficheiro e, em seguida, clique em Guardar como .
  4. Na caixa nome do ficheiro , escreva o nome que pretende para o modelo do Excel.
  5. Na lista Guardar com o tipo , clique em modelo (*.xlt) e, em seguida, clique em Guardar .
  6. Para inserir o modelo de programação, utilize o seguinte código:
    Tipo de Sheets.Add: = path \ filename
    Este código, path \ filename é uma cadeia que contém o caminho e nome completo para o modelo de folha.

Ponto Da Situação

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

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: 
kbmt kbprogramming kbmacro kbautomation kbvba kbexpertiseinter kbbug kberrmsg kbpending KB210684 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 210684  (http://support.microsoft.com/kb/210684/en-us/ )