在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了范围。)取消注释该行允许代码正常运行。
笔记:
- 在写入范围之后,我正在重新设置表格保护。 我假设你想要做到这一点,如果你有第一个保护表。 如果您在进一步处理后重新设置保护,则需要删除该行。
- 我删除了error handling程序。 Excel错误信息给你比Err.number更多的细节。 一旦你得到你的代码工作,你可以把它放回去,并显示任何你想要的。 显然你也可以使用Err.Description。
-
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