2016-11-19 85 views
0

构建VBA程序时,我遇到了一个奇怪的问题。该程序需要一个CSV文件并进行一些重新格式化,然后再将其吐出。我遇到的问题是程序认为两位数字大于3位数字。例如,它认为60大于120,但承认60小于80,而100小于120下面是我的代码片段:VBA中2位数字大于3位数字的问题

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 

我的文件AA CSV建立这样的:

90210,90201,60,61 
90201,90210,60,100 

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

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

回答

7

他们被比较为字符串,而不是数字。

"100" < "120" < "60" < "80" 

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

如果您没有声明它们,它们是变体,可以是字符串或数字。 Dim他们为Long

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