首页 > 解决方案 > 对象变量或块变量未在 excel 宏 vba 上设置

问题描述

我尝试创建按钮以在最后一行循环添加数据,但是代码“对象变量或未设置块变量”出现错误

这是我的代码

Sub Add_Click2()

Application.ScreenUpdating = False

Dim emptyRow1 As Long
Dim Celltujuan2 As Range

Set Menu = Sheets("Interface")
Set Db2 = Sheets("Database CMMS")

'DB Power
Db2.Activate
RCNumberCMMS = Menu.Range("D20").Value
Set Celltujuan2 = Db2.Range("A:A").Find(What:=RCNumberCMMS)

If RCNumberCMMS = "" Then
MsgBox ("Silakan isi RC Number terlebih Dahulu!")
Exit Sub
End If


Celltujuan2 = Db2.Range("A99999").End(xlUp).Row + 1

'Info
For i = 25 To 35
Cells(Celltujuan2, Menu.Range("E" & i).Value) = Menu.Range("D" & i).Value
Next i

'DOP & Approval
For i = 25 To 34
Cells(Celltujuan2, Menu.Range("I" & i).Value) = Menu.Range("H" & i).Value
Next i


'Install & Material Eks
For i = 25 To 33
Cells(Celltujuan2, Menu.Range("M" & i).Value) = Menu.Range("L" & i).Value
Next i

'Write Off
For i = 25 To 26
Cells(Celltujuan2, Menu.Range("Q" & i).Value) = Menu.Range("P" & i).Value
Next i

MsgBox ("Data Telah Terupdate")


Menu.Activate
Menu.Range("D20").Select

End Sub

我为其他工作表执行相同的代码并且运行良好,我在同一个工作簿中创建此代码但在 diffren 模块中,这是问题吗?

标签: excelvba

解决方案


使用后,Find您需要检查是否发现了什么。

Set Celltujuan2 = Db2.Range("A:A").Find(What:=RCNumberCMMS)
If Celltujuan2 Is Nothing Then
    MsgBox """" & RCNumberCMMS & """ was not found."
    Exit Sub
End If

如果您阅读Range.Find 方法的文档,它会说:

每次使用此方法时都会保存LookInLookAtSearchOrder和的设置。MatchByte如果下次调用该方法时没有为这些参数指定值,则使用保存的值。设置这些参数会更改“查找”对话框中的设置,而更改“查找”对话框中的设置会更改在省略参数时使用的保存值。为避免出现问题,请在每次使用此方法时显式设置这些参数。

所以你至少需要指定那些参数或使用随机的东西(没有默认值)。

Set Celltujuan2 = Db2.Range("A:A").Find(What:=RCNumberCMMS, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, MatchByte:=False)
If Celltujuan2 Is Nothing Then
    MsgBox """" & RCNumberCMMS & """ was not found."
    Exit Sub
End If

推荐阅读