14

我正在尝试向“A1”单元格写入一个值,但出现以下错误:

应用程序定义或对象定义的错误“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

编辑:如果我点击警告图标然后选择显示计算步骤它工作正常,我得到错误后

4

4 回答 4

16

我想你可能会被床单保护绊倒。我稍微简化了您的代码,并明确设置了对工作簿和工作表对象的引用。在您的示例中,您在设置 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如果我在注释掉的情况下运行 sub ,我会得到一个运行时错误 1004。(假设我已经保护了工作表并锁定了范围。)取消注释该行允许代码运行良好。

笔记:

  1. 写入范围后,我正在重新设置工作表保护。如果您首先保护了工作表,我假设您想这样做。如果您稍后在进一步处理后重新设置保护,则需要删除该行。
  2. 我删除了错误处理程序。Excel 错误消息为您提供了比 Err.number 更多的详细信息。一旦您的代码工作并显示您想要的任何内容,您就可以将其放回原处。显然你也可以使用 Err.Description。
  3. 这种Cells(1, 1)符号会引起巨大的悲伤。小心使用它。Range("A1")对人类来说更容易解析,并且倾向于防止前额拍打错误。
于 2012-07-20T12:08:24.283 回答
1

将 Range("A1") = "Asdf" 替换为 Range("A1").value = "Asdf"

于 2015-04-16T20:01:30.580 回答
1

今晚我喝了几杯蔓越莓伏特加,所以我可能会遗漏一些东西……设置范围有必要吗?为什么不使用:

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

这也失败了吗?

看起来你尝试了类似的东西:

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

但是,Worksheets 是一个集合,因此您不能引用“游戏”。我认为您需要改用 Sheets 对象。

于 2012-07-21T01:48:04.103 回答
0

试试这个

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

添加

也许文件已损坏 - 这在我之前已经发生过几次,唯一的解决方案是将所有内容复制到一个新文件中。

请您尝试以下方法:

  • 保存一个新的 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
于 2012-07-19T20:18:33.553 回答