2016-11-19 88 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開發來說確實是必須的。