Excel VBA-声明为整数的变量未保存整数值(运行时错误1004)

时间:2018-07-11 21:48:44

标签: excel vba variables integer save

我已经尝试调试了好几个小时,发现运行时错误'1004':应用程序定义的错误或对象定义的错误。我已找到导致我认为的错误的原因,无法找出原因。

我正在用相同的代码处理两张纸。
bSheet1 = True'如果代码是从sheet1运行的
bSheet2 = True',如果代码是从sheet2运行的)

两个布尔变量均被赋予False的初始值。

如果bSheet1 = True,则iRowYear = iRowYear_Sheet1'在代码中更早地分配了值,irowYear_Sheet1 = 4
如果bSheet2 = True,则iRowYear = c1.Row-2

iRowYear与常规变量一样声明为整数。 Sheet1的行号将相同。我已经将iRowYear_Sheet1声明为整数,并在代码中更早地为其赋值为4(“ iRowYear_Sheet1 = 4)。 “ c1”是单元格范围,声明为范围。代码使用它遍历每个单元格,从第一个项目名称到最后一个项目。
在Sheet2中,年份总是比项目名称高两行。

在调试时,计算和布尔值都正确显示...当我将鼠标悬停在“ c1.Row-1”上时行号正确显示,但是iRowYear继续显示“ 0”。尽管“ If”语句为true,并且在逐步执行时会读取代码。

在处理Sheet1时,代码工作正常,但是对于表单2,计算值“ c1.Row-1”根本不会保存在iRowYear变量中,并且稍后在代码中引发错误。

有些时候,通常是第一次运行时,它实际上处理Sheet2的数据,但是随机卡住,一旦卡住,它将继续引发错误,每次都指示iRowYear为“ 0”。

----------其他信息------------ 各种各样的调用都有很多代码,因此无法粘贴所有内容...我还在这里简化变量名。这是立即循环开始的地方。代码继续关闭循环并结束If语句...,并且对于sheet1来说运行良好。适用于Sheet2,下面的最后一条语句有错误。稍后,错误有时会在代码中针对相同变量(iRowYear)显示为零:

显式选项

全局c1作为范围
全球iRowYear整数形式
全局常量iRowYear_Sheet1 = 4'行#对于sheet1相同,对于sheet2有所不同

... “在此之前有循环和条件...仅粘贴立即循环的开始...循环和条件可以正常工作

对于wsSchedule.Range(Cells(iRowFirst,iCol_Status),Cells(iRowLast,iCol_Status))中的每个c1

如果c1.Value2 =“ GO”然后

    If bSheet1 = True Then iRowYear = iRowYear_Sheet1    
    If bSheet2 = True Then iRowYear = (c1.Row - 2)    

    iColLast = wsSchedule.Cells(iRowYear, 130).End(xlToLeft).Column    

'等...

在最后一行显示iRowYear为零的错误,即使“ c1.Row-2”在鼠标悬停时显示正确的整数值。鼠标悬停时,bSheet1显示为false,bSheet2显示为True。代码正确执行,但是iRowYear没有存储“ c1.Row-2”的输出...它保持为零。

1 个答案:

答案 0 :(得分:0)

通过修改“ If”语句解决了问题。
在我的实际代码中,我在If语句中为两个变量赋值:

If bSheet2 = True Then iRowYear = (c1.Row-2) AND (iRowMonth=c1.Row-1)

我愚蠢地在我的问题中省略了iRowMonth以节省时间。 将If语句更改为:

后,代码似乎运行良好
If bSheet2 = True Then  
    iRowYear = c1.Row-2  
    iRowMonth = c1.Row-1  
End If

仍然有些困惑,因为有时候对于Sheet1来说代码仍然可以正常运行。

感谢大家的投入,对于不完整的问题,我深表歉意。