VBA:使用一张纸上的数据来定位另一张纸

时间:2018-06-09 18:58:21

标签: excel vba excel-vba

我正在使用Excel创建一个工具来帮助我制作D& D广告系列,目前正在制作一个施法系统。我的目标是能够单击一个工作表上的按钮(“战斗”),这将减少不同工作表中的一个法术位(数值)(目标工作表的名称来自“战斗”中的文本值)工作表),对应于给定的法术等级。这些值由“战斗”表中的单元格引用,该单元格将随另一个工作表中的单元格值而变化。 我的代码是:

Private Sub CastSpell_Click()
    SpellAction "CastSpell"
End Sub


Sub SpellAction(ByVal action As String)
    Dim Combat As Worksheet
    Set Combat = ThisWorkbook.Sheets("Combat")
    Dim Player As Worksheet
    Set Player = ThisWorkbook.Sheets(Cells(5, 12).Text)

    Dim foundCell As Range
    Set foundCell = Player.Range("Z31", "Z39").Find(Left(Combat.Cells(18, 12).Text, 3))

    If Not (foundCell Is Nothing) Then
        r = foundCell.Row
    Else
        MsgBox "Couldn't find the current selection."
        Exit Sub
    End If

    Select Case LCase(action)
        Case "CastSpell"
            If Not (Player.Cells(r, 28) = 0) Then
                Cells(r, 28) = Cells(r, 28) - 1
            Else
                MsgBox "No remaining spell slots of this level."
                Exit Sub
            End If
    End Select
End Sub

其中 Cells(5, 12)是指从下拉列表中选取的文字字符串,Range("Z31", "Z39")是指包含值(1)到(9)的列,Cells(18, 12)是指该咒语的名称,(例如:(1)治愈伤口),Cells(r, 28)中引用的数字28指的是AB列,它是我希望减少其值的单元格的列。

目前,当我点击按钮(名为“CastSpell”并位于“战斗”表格中)时,它会运行SpellAction代码,找到Player的正确值,{{1 }}和foundCell没有错误消息,但不执行r中的代码。我哪里错了?

1 个答案:

答案 0 :(得分:0)

我声明范围是“Z31:Z39”。目前你只是指z31& z39,而不是其间的所有细胞。逗号是指如何不按顺序包含多个范围。然而,这可能不是它失败的原因,它值得指出你错过了大部分选择..它看起来你在小写字符串上使用select case然后检查一个字符串有大写字母,这很可能是因为你将字符串转换为“xxxxx”但检查“XxxxxXxx”时失败了。转换它,然后检查字符串的小写版本,或根本不打扰转换。

这有帮助吗?