2012-07-19 50 views
9

我想寫一個值「A1」單元格,但我得到以下錯誤:寫入字符串到細胞中的Excel

Application-defined or object-defined error '1004'

我已經在網絡上嘗試了多種解決方案,但沒有在工作中。我使用的是Excel 2007,文件擴展名是.xlsm。

我的代碼如下:

Sub varchanger() 
On Error GoTo Whoa 
Dim TxtRng As Range 

Worksheets("Game").Activate 
ActiveSheet.Unprotect 

Set TxtRng = ActiveWorkbook.Sheets("Game").Cells(1, 1) 
TxtRng.Value = "SubTotal" 

'Worksheets("Game").Range("A1") = "Asdf" 

LetsContinue: 
    Exit Sub 
Whoa: 
    MsgBox Err.number 
    Resume LetsContinue 
End Sub 

編輯:之後我得到錯誤,如果我點擊警告圖標,然後選擇顯示計算步驟其正常工作

+7

如果我是不是出票,我會+1'( 「A1」)= 「ASDF」 與 範圍( 「A1」)。價值= 「ASDF」 On Error Goto Whoa' – LittleBobbyTables 2012-07-19 19:59:16

+0

@LittleBobbyTables謝謝。這個錯誤真的嚇壞了我 – knightrider 2012-07-19 20:01:25

+0

我試着執行你的*精確*代碼,它在我的Excel 2003和Excel 2010上都沒有任何問題運行。對不起,我沒有Excel 2007嘗試。 – 2012-07-19 20:10:37

回答

12

我認爲你可能會被絆倒在板材保護上。我簡化了代碼,並明確地設置了對工作簿和工作表對象的引用。在您的示例中,您在設置TxtRng對象時顯式引用工作簿和工作表,但在取消保護工作表時不能。

試試這個:

Sub varchanger() 

    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim TxtRng As Range 

    Set wb = ActiveWorkbook 
    Set ws = wb.Sheets("Sheet1") 
    'or ws.Unprotect Password:="yourpass" 
    ws.Unprotect 

    Set TxtRng = ws.Range("A1") 
    TxtRng.Value = "SubTotal" 
    'http://stackoverflow.com/questions/8253776/worksheet-protection-set-using-ws-protect-but-doesnt-unprotect-using-the-menu 
    ' or ws.Protect Password:="yourpass" 
    ws.Protect 

End Sub 

如果我運行ws.Unprotect子註釋掉,我得到一個運行時錯誤1004取消註釋(假設我保護片,並有範圍鎖定。)行允許代碼運行正常。

注:

  1. 我寫範圍之後再設置工作表保護。我假設你想要這樣做,如果你有第一個保護表。如果您在進一步處理後重新設置保護,則需要刪除該行。
  2. 我刪除了錯誤處理程序。 Excel錯誤信息給你比Err.number更多的細節。一旦你得到你的代碼工作並顯示你想要的任何東西,你就可以將它放回去。顯然你也可以使用Err.Description。
  3. Cells(1, 1)符號會導致大量的悲傷。小心使用它。 Range("A1")對於人類來說更容易解析並且傾向於防止前額拍擊錯誤。
+0

這也不起作用 – knightrider 2012-07-21 06:25:16

+0

錯誤描述是什麼? (完整的錯誤消息,不只是1004) – 2012-07-21 13:52:51

+0

應用程序定義的或對象定義的 – knightrider 2012-07-21 16:47:10

0

試試這個,而不是

Set TxtRng = ActiveWorkbook.Sheets("Game").Range("A1")

ADDITION

也許文件已損壞 - 這在我以前發生過幾次,唯一的解決辦法是將所有內容複製到一個新文件中。

請您可以嘗試以下方法:

  • 保存新文件XLSM並將其命名爲「MyFullyQualified.xlsm」
  • 添加紙張無保護並稱之爲「MySheet的工作」
  • 添加模塊添加到工作簿並添加以下過程

這是否運行?

Sub varchanger() 

With Excel.Application 
    .ScreenUpdating = True 
    .Calculation = Excel.xlCalculationAutomatic 
    .EnableEvents = True 
End With 

On Error GoTo Whoa: 

    Dim myBook As Excel.Workbook 
    Dim mySheet As Excel.Worksheet 
    Dim Rng As Excel.Range 

    Set myBook = Excel.Workbooks("MyFullyQualified.xlsm") 
    Set mySheet = myBook.Worksheets("mySheet") 
    Set Rng = mySheet.Range("A1") 

    'ActiveSheet.Unprotect 


    Rng.Value = "SubTotal" 

    Excel.Workbooks("MyFullyQualified.xlsm").Worksheets("mySheet").Range("A1").Value = "Asdf" 

LetsContinue: 
     Exit Sub 
Whoa: 
     MsgBox Err.Number 
     GoTo LetsContinue 

End Sub 
+0

同樣的錯誤!錯誤1004 – knightrider 2012-07-19 20:20:56

+0

經典 - 請關閉和重新打開Excel;甚至可能重新啓動你的機器。 – whytheq 2012-07-19 20:24:39

+0

關閉excel沒有幫助。我將嘗試重新啓動 – knightrider 2012-07-19 20:28:00

0

我已經有了一些蔓越莓伏特加今晚,所以我可能會錯過一些東西...設置範圍必要?爲什麼不使用:

Activeworkbook.Sheets("Game").Range("A1").value = "Subtotal" 

這是否也失敗了?

看起來你試過類似的東西:

'Worksheets("Game").Range("A1") = "Asdf" 

然而,工作表是一個集合,所以你不能引用「遊戲」。我認爲你需要使用Sheets對象。

+0

@UberNublsTrue這也返回相同的錯誤 – knightrider 2012-07-21 06:29:11

1

更換 範圍