在Excel 2010中,为自定义VBA函数debugging错误的数据types错误时出现问题

我一直在努力学习更多关于excel(特别是如何很好地利用VBA),并且在excel中制作了一个简单的RPG。

我试图做一个相对简单的function,但我遇到了一个我似乎无法识别的错误。 代码本身似乎没有任何错误,但我的目标是在Excel的普通视图中使用该函数,并检查一个string是否等于另一个表中的string。

基本上,= CheckMonster(A1)或类似的东西。 然而,每当我尝试input它,我得到一个types错误。

Function CheckMonster(mon As String) Dim n As Integer For n = 1 To 100 If mon = Worksheets("monsterdatabase").Cells(1, n).Value Then ActiveSheet.Range("G2").Value = Worksheets("monsterdatabase").Cells(2, n).Value ActiveSheet.Range("G3").Value = Worksheets("monsterdatabase").Cells(3, n).Value ActiveSheet.Range("G4").Value = Worksheets("monsterdatabase").Cells(4, n).Value ActiveSheet.Range("G5").Value = Worksheets("monsterdatabase").Cells(5, n).Value Else: mon = "" End If Next End Function 

理想情况下,如果我可以这样做,那么只要改变给定的单元格,数字就会自动更新。 但是,我不确定如何在暴力破坏之外强制所有可能的string。

尝试这样的事情:

  • 避免一个循环find你的string(我用strIn )在一个单一的镜头从感兴趣的范围向后看
  • 使用Sub来更新单元格不是一个Function (不会工作,因为你有它)

 Sub Test() Dim strIn As String strIn = "fred" Call UpdateMe(strIn) End Sub Sub UpdateMe(ByVal strIn) Dim rng1 As Range Dim ws As Worksheet Set ws = Sheets("monsterdatabase") Set rng1 = ws.Range("A1:CV1").Find(strIn, ws.[a1], xlValues, xlWhole, xlByColumns, xlPrevious) If Not rng1 Is Nothing Then ActiveSheet.Range("G2:G5").Value = rng1.Offset(1, 0).Resize(4, 1).Value End If End Sub