我正在尝试将值写入“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
编辑:如果我点击警告图标后出现错误,然后选择显示计算步骤,则其工作正常
答案 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.(假设我已经保护了工作表并锁定了范围。)取消注释该行允许代码运行正常
注意:
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 强>
也许文件已损坏 - 这种情况以前曾多次发生在我身上,唯一的解决办法是将所有内容复制到新文件中。
请试试以下内容:
这会运行吗?
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