Vba 测试变量是否大于0

Vba 测试变量是否大于0,vba,excel,Vba,Excel,我试图测试变量(excel单元格中的数字)是否大于0。我有两个变量相互测试,然后测试它是否大于0。两个变量之间的测试是有效的,但是当我测试它是否大于或小于0时,它会跳过它。我相信这就是我定义它们的方式?但当我尝试将它们定义为整数时,或者它们也不起作用。有人能帮我弥补我所缺少的吗?提前感谢您的帮助。。。我很感激 Sub BA() Dim Sh As Worksheet Dim Skill As Range Dim Allocation As Range Dim Selection As Range

我试图测试变量(excel单元格中的数字)是否大于0。我有两个变量相互测试,然后测试它是否大于0。两个变量之间的测试是有效的,但是当我测试它是否大于或小于0时,它会跳过它。我相信这就是我定义它们的方式?但当我尝试将它们定义为整数时,或者它们也不起作用。有人能帮我弥补我所缺少的吗?提前感谢您的帮助。。。我很感激

Sub BA()
Dim Sh As Worksheet
Dim Skill As Range
Dim Allocation As Range
Dim Selection As Range
Dim SelectionText As String
Dim AllocationText As String
Dim AllocationDetract As String
Dim SelectionDetract As String
Dim SelectionLess As String
Dim AllocationLess As String
Dim AllocationContr As Double
Dim SkillContr As Double





SelectionText = " Text 1 "
AllocationText = " Text 2 "
SelectionLess = " Text 3"
SelectionDetract = "Text 4"
AllocationDetract = "Text 5."
AllocationLess = " Text 6"



    For Each Sh In ThisWorkbook.Worksheets
        With Sh.UsedRange
    Set Skill = .Cells.Find(What:="Skill")

Set Allocation = Skill.Offset(15, 1)
Set Selection = Skill.Offset(15, 0)

AllocationContr = CDbl(Allocation)
SkillContr = CDbl(Selection)

    If AllocationContr > SkillContr Then
        If SkillContr > 0 Then
            Range("B1").Value = Range("B1") & AllocationText & 
SelectionLess
                ElseIf SkillContr < Test Then
                    Range("B1").Value = Range("B1") & AllocationText & 
SelectionDetract
        End If
    End If
    If AllocationContr < SkillContr Then
        If AllocationContr > 0 Then
            Range("B1").Value = Range("B1") & SelectionText & 
AllocationLess
                ElseIf AllocationContr < 0 Then
                    Range("B1").Value = Range("B1") & SelectionText & 
AllocationDetract
        End If
    End If

End With
Set Skill = Nothing
Next

End Sub
Sub-BA()
将Sh设置为工作表
像射程一样暗淡的技能
作为范围的Dim分配
变暗选择作为范围
Dim SelectionText作为字符串
Dim AllocationText作为字符串
Dim AllocationDetract作为字符串
Dim SelectionDetract作为字符串
Dim SelectionLess作为字符串
Dim AllocationLess As字符串
Dim分配控制为双精度
暗淡的技巧控制为双重
SelectionText=“Text 1”
AllocationText=“文本2”
SelectionLess=“Text 3”
选择Detract=“文本4”
AllocationDetract=“文本5。”
AllocationLess=“Text 6”
用于此工作簿中的每个Sh。工作表
和Sh.UsedRange在一起
设置技能=.Cells.Find(什么:=“技能”)
设置分配=技能补偿(15,1)
设置选择=技能偏移(15,0)
AllocationContr=CDbl(分配)
SkillContr=CDbl(选择)
如果AllocationContr>SkillContr,则
如果SkillContr>0,则
范围(“B1”)。值=范围(“B1”)&AllocationText&
无选择
ElseIf SkillContr<然后测试
范围(“B1”)。值=范围(“B1”)&AllocationText&
选择性减损
如果结束
如果结束
如果AllocationContr0,则
范围(“B1”)。值=范围(“B1”)&选择文本
无配置
如果分配控制小于0,则
范围(“B1”)。值=范围(“B1”)&选择文本
分配减损
如果结束
如果结束
以
设置技能=无
下一个
端接头

答案围绕偏移的定义。偏移量获取的值不正确,因此当我转换它时,它将变量转换为0。因此0>0对代码没有意义。我更改了代码查找“选择”而不是技能的锚点,并更改了偏移量。我已经发布了下面更正的完整答案

Sub BA()

    Dim Sh As Worksheet
    Dim Skill As Range
    Dim Allocation As Range
    Dim Selection As Range
    Dim SelectionText As String
    Dim AllocationText As String
    Dim AllocationDetract As String
    Dim SelectionDetract As String
    Dim SelectionLess As String
    Dim AllocationLess As String
    Dim AllocationContr As Double
    Dim SkillContr As Double


    SelectionText = " Text 1 "
    AllocationText = " Text 2 "
    SelectionLess = " Text 3"
    SelectionDetract = "Text 4"
    AllocationDetract = "Text 5."
    AllocationLess = " Text 6"


    For Each Sh In ThisWorkbook.Worksheets
        With Sh.UsedRange
            Set Skill = .Cells.Find(What:="Selection")

            Set Allocation = Skill.Offset(14, 0)
            Set Selection = Skill.Offset(14, -1)

            AllocationContr = CDbl(Allocation)
            SkillContr = CDbl(Selection)

            If AllocationContr > SkillContr Then
                If SkillContr > 0 Then
                    Range("B1").Value = Range("B1") & AllocationText &
                    SelectionLess
                ElseIf SkillContr < Test Then
                    Range("B1").Value = Range("B1") & AllocationText &
                    SelectionDetract
                End If
            End If

            If AllocationContr < SkillContr Then
                If AllocationContr > 0 Then
                    Range("B1").Value = Range("B1") & SelectionText &
                    AllocationLess
                ElseIf AllocationContr < 0 Then
                    Range("B1").Value = Range("B1") & SelectionText &
                    AllocationDetract
                End If
            End If

        End With
        Set Skill = Nothing
    Next

End Sub
Sub-BA()
将Sh设置为工作表
像射程一样暗淡的技能
作为范围的Dim分配
变暗选择作为范围
Dim SelectionText作为字符串
Dim AllocationText作为字符串
Dim AllocationDetract作为字符串
Dim SelectionDetract作为字符串
Dim SelectionLess作为字符串
Dim AllocationLess As字符串
Dim分配控制为双精度
暗淡的技巧控制为双重
SelectionText=“Text 1”
AllocationText=“文本2”
SelectionLess=“Text 3”
选择Detract=“文本4”
AllocationDetract=“文本5。”
AllocationLess=“Text 6”
用于此工作簿中的每个Sh。工作表
和Sh.UsedRange在一起
设置技能=.Cells.Find(内容:=“选择”)
设置分配=技能补偿(14,0)
设置选择=技能偏移(14,-1)
AllocationContr=CDbl(分配)
SkillContr=CDbl(选择)
如果AllocationContr>SkillContr,则
如果SkillContr>0,则
范围(“B1”)。值=范围(“B1”)&分配文本&
无选择
ElseIf SkillContr<然后测试
范围(“B1”)。值=范围(“B1”)&分配文本&
选择性减损
如果结束
如果结束
如果AllocationContr0,则
范围(“B1”)。值=范围(“B1”)&选择文本&
无配置
如果分配控制小于0,则
范围(“B1”)。值=范围(“B1”)&选择文本&
分配减损
如果结束
如果结束
以
设置技能=无
下一个
端接头

AllocationContr=SkillContr时您想做什么?您所说的“跳过它”是什么意思?如果变量为,请给出一个可再现的示例,说明与0的比较在何处意外发生。上面的代码有很多无关的细节,以及外部依赖性,这些外部依赖性使我们无法在没有过度努力的情况下运行它。如果
分配
选择
的值是非数字字符串,转换为double将导致
0
不大于
0
。您应该尝试使用“即时”窗口中的
Debug.Print“String”
w/或单步执行代码来检查变量的值……谢谢大家提供的信息。我的意思是,如果我说跳过,就跳到底。分配或选择都是整数,而不是字符串。但是,我在格式更改时使用了转换。当我一步一步地调试代码时,变量是正确的,这就是为什么AllocationContr>SkillContr的第一个测试可以工作的原因。