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



我已经试着调试了几个小时,得到了运行时错误"1004":应用程序定义或对象定义的错误。我已经找到了导致错误的原因,我想,无法找出原因。

我正在处理两张代码相同的纸张
bSheet1=True(如果代码从工作表1运行(
bSheet2=True(代码从工作单2运行(

两个布尔变量的初始值都为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"语句成立,并且在逐步执行时读取代码。

处理Sheet1时,代码运行良好,但对于Sheet2,计算值"c1.Row-1"根本不会保存在iRowYear变量中,并且稍后会在代码中引发错误。

有时,通常是第一次运行左右,它会实际处理Sheet2的数据,但会随机卡住,一旦卡住,它就会继续抛出错误,每次都指示iRowYear为"0"。

----------其他信息------------有很多不同调用的代码,所以不能粘贴所有内容。。。我还在这里简化变量名。这是立即循环的起点。代码继续关闭循环并结束If语句。。。并且它对sheet1运行良好。对于Sheet2,下面的最后一条语句出现错误。错误有时会随机出现在同一变量(iRowYear(的代码后面,显示为零:

选项显式

全局c1作为范围
全局iRowYear作为整数
Global Const iRowYear_Sheet1=4'行#对于表1相同,对于表2 不同

"在此之前存在循环和条件。。。仅粘贴立即循环的开始。。。工作正常的回路和条件

对于wsSchedule.Range中的每个c1(单元格(iRowFirst、iCol_Status(、单元格(iRow Last、iCol_Status((

如果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"的输出……它保持为零。

通过修改"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的代码仍然运行良好。

感谢所有人的意见,我为这个不完整的问题道歉。

相关内容

最新更新