在excel中将一个string写入一个单元格

我试图写一个值到“A1”单元格,但是得到以下错误:

应用程序定义或对象定义的错误“1004”

我在网上尝试了很多解决scheme,但都没有工作。 我使用的是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 

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

我想你可能会被绊倒保护表格。 我简化了代码,并明确地设置了对工作簿和工作表对象的引用。 在您的示例中,当您设置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注释掉了这个子ws.Unprotect ,我得到了一个1004的运行时错误。(假设我保护了工作表并且locking了范围。)取消注释该行允许代码正常运行。

笔记:

  1. 在写入范围之后,我正在重新设置表格保护。 我假设你想要做到这一点,如果你有第一个保护表。 如果您在进一步处理后重新设置保护,则需要删除该行。
  2. 我删除了error handling程序。 Excel错误信息给你比Err.number更多的细节。 一旦你得到你的代码工作,你可以把它放回去,并显示任何你想要的。 显然你也可以使用Err.Description。
  3. Cells(1, 1)符号会导致大量的悲伤。 小心使用它。 Range("A1")对于人类来说更容易parsing,并且往往可以防止前额拍击的错误。

用Range(“A1”)replaceRange(“A1”)=“Asdf”。value =“Asdf”

我今晚有几个蔓越莓伏特加,所以我可能会错过一些东西…设置范围是必要的吗? 为什么不使用:

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

这是否也失败了?

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

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

但是,工作表是一个集合,所以你不能引用“游戏”。 我认为你需要使用Sheets对象。

试试这个

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