Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 获得;运行时错误:1004,应用程序定义或对象错误;在表中输入字符串时_Excel_Vba - Fatal编程技术网

Excel 获得;运行时错误:1004,应用程序定义或对象错误;在表中输入字符串时

Excel 获得;运行时错误:1004,应用程序定义或对象错误;在表中输入字符串时,excel,vba,Excel,Vba,我最近开始了一项新工作,并被要求对前一位员工编写的宏进行更新。宏大约有250行代码,但更新只与它的一小部分相关 宏的相关部分将公式输入到表中。这些公式在代码中定义,并作为字符串输入(我觉得这很奇怪,但我的vba经验非常有限。你不能为单元格定义实际公式吗?) 我被要求添加12个新的公式列,通过定义12个字符串并将可接受的n值范围更改为新的列数,我做到了这一点。但是,我现在得到运行时错误1004 注意:我已经用一个数字列表(“=FormulaX”)替换了实际的公式,以便更容易地查看我的代码,因为它似

我最近开始了一项新工作,并被要求对前一位员工编写的宏进行更新。宏大约有250行代码,但更新只与它的一小部分相关

宏的相关部分将公式输入到表中。这些公式在代码中定义,并作为字符串输入(我觉得这很奇怪,但我的vba经验非常有限。你不能为单元格定义实际公式吗?)

我被要求添加12个新的公式列,通过定义12个字符串并将可接受的n值范围更改为新的列数,我做到了这一点。但是,我现在得到运行时错误1004

注意:我已经用一个数字列表(“=FormulaX”)替换了实际的公式,以便更容易地查看我的代码,因为它似乎与问题无关,因为它们只是字符串。有些字符串的长度超过255个字符,但在我对其进行任何操作之前,它们的长度就更长了,并且在当时起作用

错误:我用星号标记了错误发生的位置。出现错误时,n等于23

Dim FormulaArr(4 To 34) As String

    FormulaArr(4) = "=Formula1"
    FormulaArr(5) = "=Formula2"
    FormulaArr(6) = "=Formula3"
    FormulaArr(7) = "=Formula4"
    FormulaArr(8) = "=Formula5"
    FormulaArr(9) = "=Formaul6"
    FormulaArr(10) = "=Formula7"
    FormulaArr(11) = "=Formula8"
    FormulaArr(12) = "=Formula9"
    FormulaArr(13) = "=Formula10"
    FormulaArr(14) = "=Formula11"
    FormulaArr(15) = "=Formula12"
    FormulaArr(16) = "=Formula13"
    FormulaArr(17) = "=Formaula14"
    FormulaArr(18) = "=Formula15"
    FormulaArr(19) = "=Formula16"
    FormulaArr(20) = "=Formula17"
    FormulaArr(21) = "=Formula18"
    FormulaArr(22) = "=Formula19"
    FormulaArr(24) = "=Formula20"
    FormulaArr(25) = "=Formula21"
    FormulaArr(26) = "=Formaula22"
    FormulaArr(27) = "=Formula23"
    FormulaArr(28) = "=Formula24"
    FormulaArr(29) = "=Formula25"
    FormulaArr(30) = "=Formula26"
    FormulaArr(31) = "=Formula27"
    FormulaArr(32) = "=Formula28"
    FormulaArr(33) = "=Formula29"
    FormulaArr(34) = "=Formula30"

Dim n As Integer
For n = 4 To 34
    ****wbin.Sheets("Metrics").Cells(2, n).Value = FormulaArr(n)****
Next n

Set keys = wbin.Sheets("Metrics").ListObjects("MetricsTable").DataBodyRange
For Each rng In keys.Cells
    If rng.Column() <> 1 And rng.Column() <> 2 And rng.Column() <> 3 Then
        rng.Value = FormulaArr(rng.Column)
    End If
Next rng
Dim FormulaArr(4到34)作为字符串
公式arr(4)=“=公式1”
公式arr(5)=“公式2”
公式arr(6)=“公式3”
公式arr(7)=“公式4”
公式arr(8)=“公式5”
公式arr(9)=“形式6”
公式arr(10)=“公式7”
公式arr(11)=“公式8”
公式arr(12)=“公式9”
公式arr(13)=“公式10”
公式arr(14)=“=公式11”
公式arr(15)=“=公式12”
公式arr(16)=“公式13”
公式arr(17)=“公式14”
公式arr(18)=“公式15”
公式arr(19)=“公式16”
公式arr(20)=“公式17”
公式arr(21)=“公式18”
公式arr(22)=“=公式19”
公式arr(24)=“公式20”
公式arr(25)=“公式21”
公式arr(26)=“公式22”
公式arr(27)=“公式23”
公式arr(28)=“=公式24”
公式arr(29)=“公式25”
公式arr(30)=“公式26”
公式arr(31)=“公式27”
公式arr(32)=“=公式28”
公式arr(33)=“公式29”
公式arr(34)=“公式30”
作为整数的Dim n
对于n=4到34
****wbin.Sheets(“度量”)单元格(2,n)。值=公式arr(n)****
下一个
Set keys=wbin.Sheets(“Metrics”).ListObjects(“MetricsTable”).DataBodyRange
对于键中的每个rng。单元格
如果rng.Column()1和rng.Column()2以及rng.Column()3,则
rng.Value=FormulaArr(rng.Column)
如果结束
下一个rng

编辑:我已经对错误进行了一些研究,但这些错误似乎与我未使用的.Formula属性有关。

如果我尝试写入一个不存在或不可用的公式,我可以复制错误

例如:

'test to see if I can write to the sheet
Sheet1.Cells("A1").Value = "a"

'write a formula which is valid:
Sheet1.Cells("A1").Value = "=Sum(1,2,3)"

'write a formula which will not work:
Sheet1.Cells("A1").Value = "=Sum(1,2,3"

导致错误的可能原因是一些新构造的公式字符串中的键入错误。

工作表是否受到保护?不,没有,我只是使用宏进行了检查。如果运行示例代码(使用短/假公式),是否会发生错误?这行得通!大卫,我真的很敬畏你能在我的代码中找到错误,而我甚至没有在帖子中包含错误。非常感谢你。非常感谢。非常感谢。我错误地认为,因为我只是输入了一个字符串,所以这个错误不可能是一个错误的公式。我认为它实际上只是将文本转储到单元格中,但我猜excel仍然意识到这是一个公式,不允许使用错误的公式。如果公式以
=
开头,它会识别出一个公式。要输入原始字符串,必须在其前面加上
(单引号)。我只是试着做一些类似于
=公式(1)
的事情,然后我得到了相同的错误,所以我认为最有可能的错误是错误的公式构造。干杯