将字符串写入excel中的单元格

时间:2012-07-19 19:57:49

标签: excel vba excel-vba excel-2007

我正在尝试将值写入“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 个答案:

答案 0 :(得分:13)

我认为你可能会因为纸张保护而被绊倒。我稍微简化了您的代码,并明确设置了对工作簿和工作表对象的引用。在您的示例中,您在设置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")对于人类来说更容易解析,并且可以防止额头拍打错误。

答案 1 :(得分:1)

今晚我有一些蔓越莓伏特加,所以我可能会遗漏一些东西......是否需要设定范围?为什么不使用:

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

这也会失败吗?

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

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

但是,Worksheets是一个集合,因此您无法引用“Game”。我认为您需要使用Sheets对象。

答案 2 :(得分:1)

替换 范围(" A1")=" Asdf" 同 范围(" A1")。值=" Asdf"

答案 3 :(得分: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
相关问题