2015-04-22 64 views
-1

對於一般的VBA函數和大多數編程我明白髮生這樣的事情一般程序執行中移動...被執行的代碼執行時不會一個excel VBA函數

子過程內,如果調用函數(它應該返回一個值),在這種情況下,它會返回一個值給變量num。

擴大,這意味着執行到哪裏調用該函數的行,然後應該跳過跌到哪裏函數編寫,並經過執行該函數中的每一行。

這是它以前的工作原理,我以前使用F8鍵突出顯示並按行逐行執行代碼。

問題 問題是,當執行到其中函數調用的函數只是跳過和執行不下去的函數內部並運行裏面的每一行的子過程中的線。

(我應該說這種情況發生時我有一個工作計劃的95%,我嘗試了重寫的功能,調用等功能)。

但每當一個函數被調用的代碼執行不進入函數本身它只是跳過它,並保存功能,因此保留爲空的結果的變量。

我試圖在函數的開始,當函數被調用的子過程中但是這沒有奏效創建斷點。

至少,執行應該得到的功能(功能FIRSTROW()等)的定義,並拋出和錯誤,但它沒有這樣做。

Sub Main 

    Dim num as double 

    Dim sheet_name as string 

    num = FirstRow(sheet_name) 

End Sub 

Function FirstRow(sheet as string) as double 

    select case sheet '<<----- execution never gets inside the function 

    case "sheet" 
     FirstRow = 8 
    case "sheet2" 
     FirstRow = 12 

    end select 

End Function 
+0

對不起但你的問題是不可重複的。當我運行你的子程序時,我會在沒有問題的情況下進入函數。你能否添加一個可重複的測試用例? –

+0

我試過在函數中只放一個字符串,所以有一個代替表名的值。兩者都不起作用。它只是跳過功能。我無法提供示例工作簿。 – yoshiserry

+0

如果你不能提供一個可重複的例子,我認爲你不能在這裏得到很多幫助,因爲你的代碼應該按照你的預期工作,這就是它實際上在我的計算機上所做的。所以無論是你的機器的問題(嘗試另一個),或者你正在省略代碼的相關部分。 –

回答

0

將一個值放在sheet_name中,然後重試。

+0

'sheet_name'被聲明爲字符串,這意味着它自編譯以來具有''「''的defalut值。即使沒有分配,也沒有理由不進入函數(實際上,上面的代碼直接在我的計算機中運行)。 –

+0

我同意我沒有看到爲什麼執行不應該在我難過的函數中移動。 – yoshiserry

+0

@yoshiserry同一個標準模塊中的* Sub *和*函數*都是? –

0

什麼導致一些函數停止工作(並且執行代碼以達不到函數定義或在其中移動)正在卸載該表單。

所有功能和子程序都是在作爲表格一部分的模塊中定義的。

因此,您只能通過單擊窗體上的控件來訪問此模塊。

這意味着,我只用了一個文件夾窗體 - 其中有一個形式裏面,並沒有這通常會出現在VBA項目部分中的模塊文件夾。

因此我可以: 1)等待,直到所有的數據處理已在最後一分鐘卸載窗體右之前已經完成

2)移動的功能,以一個新的模塊(外部到MODULES文件夾中的表單),所以當功能和子程序被調用時,它們不依賴於打開的表單。