在构建VBA程序时,我遇到了一个奇怪的问题。该程序接收CSV文件,并在将其吐出之前进行一些重新格式化。我遇到了程序的问题,认为两位数字大于3位数字。例如,它认为60大于120,但认识到60小于80,而100小于120.以下是我的代码片段:
Command.Parameters.Add("@folder",SqlDbType.Varchar).Value = folder;
我的文件是这样的CSV设置:
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
在CSV文件中,每行中的最后两个数字是我关注的内容。 60s是Rate,61和100是Miles。当我运行这个程序时,它将通过第一行并将Rate从60改为80,这是正确的。问题是当它运行第二行时它将60作为60而不是将其更改为120.
我在这段代码上设置了一个断点,变量读取正确,Rate等于60,而Miles等于100,但它跳过90210,90201,60,61
90201,90210,60,100
部分。作为测试,我将Rate = 120
更改为Rate < Miles
,当然它已经读取Rate > Miles
行,因为它现在认为60小于100.当然,进行此更改会导致其他问题运行3位数的费率,因此不是一个好的整体解决方案。有人有什么想法吗?
答案 0 :(得分:7)
它们被比较为字符串,而不是数字。
"100" < "120" < "60" < "80"
您是如何声明和分配变量的?
如果您没有声明它们,它们是变体,可以是字符串或数字。 Dim
Long
为if %enemyno%==7 goto enemy7
。
并将Option Explicit
放在每个模块的顶部。
它强制执行变量声明,并在编译时报告未声明或拼写错误的变量/常量。
要在新模块中自动执行此操作,请在VBA编辑器中设置Require Variable Declaration选项。
这对于VBA开发来说确实是必须的。