Vba 测试变量是否大于0
我试图测试变量(excel单元格中的数字)是否大于0。我有两个变量相互测试,然后测试它是否大于0。两个变量之间的测试是有效的,但是当我测试它是否大于或小于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
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的第一个测试可以工作的原因。