在VBA中2位数字大于3位数的问题

Jcm*_*010 0 csv vba access-vba

在构建VBA程序时,我遇到了一个奇怪的问题.该程序接收CSV文件,并在将其吐出之前进行一些重新格式化.我遇到了程序的问题,认为两位数字大于3位数字.例如,它认为60大于120,但认识到60小于80,而100小于120.以下是我的代码片段:

if Rate < Miles and (Miles > 60 and Miles <=80) then
   Rate = 80
elseif Rate < Miles and (Miles > 80 and Miles <=120) then
   Rate = 120
End if 
Run Code Online (Sandbox Code Playgroud)

我的文件是CSV设置如下:

90210,90201,60,61
90201,90210,60,100
Run Code Online (Sandbox Code Playgroud)

在CSV文件中,每行中的最后两个数字是我关注的内容.60s是Rate,61和100是Miles.当我运行这个程序时,它将通过第一行并将Rate从60改为80,这是正确的.问题是,当它运行第二行时,它将60作为60而不是将其更改为120.

我在这部分代码上设置了一个断点,并且变量正确读取,Rate等于60,而Miles等于100,但它跳过了该Rate = 120部分.作为一个测试我改变Rate < MilesRate > Miles,并且确定它读取了rate = 120线,因为它现在认为60小于100.当然,进行这种改变导致运行3位数时的其他问题,因此不是一个好的整体解决方案.有人有主意吗?

And*_*dre 7

它们被比较为字符串,而不是数字.

"100" < "120" < "60" < "80"
Run Code Online (Sandbox Code Playgroud)

你是如何声明和分配变量的?

如果你没有声明它们,它们是Variants,可以是字符串或数字.Dim他们是Long.

并放在Option Explicit每个模块的顶部.它强制执行变量声明,并在编译时报告未声明或拼写错误的变量/常量.要在新模块中自动执行此操作,请在VBA编辑器中设置" 需要变量声明"选项.这对于VBA开发来说确实是必须的.