VBA程式執行時出現事實錯誤424要求物件是怎麼回事

時間 2021-07-08 20:34:05

1樓:【名臣

ubound(arr, 2),   d(arr(0, y)) 這兩個好象有問題,沒見過這麼寫的

合併成一個巨集試試

sub 生成下拉()

dim sr as string

dim data as new '執行

dim sql as string

dim arr, y

dim d as new dictionary

sql = "select 定額名稱,單價,計價單位,彙報單位,換算係數 from [定額計件$] "

arr = data.篩選結果(sql)

for y = 1 to ubound(arr, 2)

d(arr(0, y)) = arr(1, y) & "-" & arr(2, y) & "-" & arr(3, y) & "-" & arr(4, y)

next y

sr = join(d.keys, ",")

with range("m6:m25").validation

.delete

.add type:=xlvalidatelist, formula1:=sr

end with

end sub

2樓:匿名使用者

dim d as new dictionary  是在 **表存為陣列() 過程裡定義的過程級變數,**表存為陣列()過程執行完了後d就消失。

在 過程 生成下拉() 裡是沒法訪問到 d的。

要解決這個問題

1、你可以把 d 定義為模組級的變數:就是把 dim d as new dictionary 在放到模組的頂部。**如下:

dim d as new dictionary

sub **表存為陣列()

dim data as new 執行

dim sql as string

dim arr, y

sql = "select 定額名稱,單價,計價單位,彙報單位,換算係數 from [定額計件$] "

arr = data.篩選結果(sql)

for y = 1 to ubound(arr, 2)

d(arr(0, y)) = arr(1, y) & "-" & arr(2, y) & "-" & arr(3, y) & "-" & arr(4, y)

next y

end sub

sub 生成下拉()

dim sr as string

call **表存為陣列

sr = join(d.keys, ",")

with range("m6:m25").validation

.delete

.add type:=xlvalidatelist, formula1:=sr

end with

end sub

2、把**表存為陣列()定義為一個函式,並返回一個 字典物件,把d的定義放到了生成下拉()過程裡,**如下:

function **表存為陣列() as dictionary

dim data as new 執行

dim sql as string

dim arr, y

dim d as new dictionary

sql = "select 定額名稱,單價,計價單位,彙報單位,換算係數 from [定額計件$] "

arr = data.篩選結果(sql)

for y = 1 to ubound(arr, 2)

d(arr(0, y)) = arr(1, y) & "-" & arr(2, y) & "-" & arr(3, y) & "-" & arr(4, y)

next y

set **表存為陣列=d

end sub

sub 生成下拉()

dim sr as string

dim d as dictionary    '把d的定義放到了生成下拉()過程裡

set d = **表存為陣列()

sr = join(d.keys, ",")

with range("m6:m25").validation

.delete

.add type:=xlvalidatelist, formula1:=sr

end with

end sub

3、把 過程 **表存為陣列() 定義為一個接收一個 字典物件的過程,把d的定義放到了生成下拉()過程裡,並在生成下拉()過程裡帶引數呼叫 **表存為陣列()  過程。**如下:

sub **表存為陣列(byref d as dictionary)

dim data as new 執行

dim sql as string

dim arr, y

sql = "select 定額名稱,單價,計價單位,彙報單位,換算係數 from [定額計件$] "

arr = data.篩選結果(sql)

if d is nothing then set d = new dictionary  '如果d沒有例項化,則例項化。

for y = 1 to ubound(arr, 2)

d(arr(0, y)) = arr(1, y) & "-" & arr(2, y) & "-" & arr(3, y) & "-" & arr(4, y)

next y

end sub

sub 生成下拉()

dim sr as string

dim d as new dictionary

call **表存為陣列(d)

sr = join(d.keys, ",")

with range("m6:m25").validation

.delete

.add type:=xlvalidatelist, formula1:=sr

end with

end sub

4、把兩個過程合併到一個過程。別的有回答了。這裡就不給出具體**了。

執行vba程式時出現錯誤424要求物件怎麼回事?該怎麼辦?下面是**。請大俠幫忙看下怎麼做了?

3樓:匿名使用者

按你的說法是直接貼上**而已,那就是沒有插入使用者窗體,你這**專第一段是初始化用屬戶窗體的,窗體都沒有,就更不用說上面的textbox1/textbox2等控制元件了。

就**來看,你有兩個文字框控制元件和兩個按鈕控制元件,你插入使用者窗體後,增加這些控制元件即可。你的按鈕改名為一個叫進入系統,一個叫取消退出。

4樓:流雲行水

單純複製**是不行的,你要先插入使用者視窗,再在視窗中插入**。

另外,要注專意**的出現物件的地方要在窗體屬中建立物件,如textbox1 ,textbox2 等都有在窗體上建立

如果沒有建立這些物件,就肯定會出現如上的錯誤!!!!

vba我比較熟悉,有機會交流交流

5樓:匿名使用者

沒有 userform視窗控制元件、textbox1 、textbox2、 ”進入系統“command控制元件、記得加上這些控制元件。

VB小程式,執行時報「3704」錯誤,提示「物件關閉時,不允許操作」怎麼解決

樓上講的dll不能開啟,不對 為保密起見,資料庫檔案可用任意符合規範的字元作副檔名,當然包括dll後面幾句這樣改下就行了 mycon.open mystr ssql select from fundcode where pwd passwd.text myrt.open ssql,mycon,1,3...

伺服電機執行時抖動,伺服電機執行時出現強烈震動,是什麼原因導致的?

hi漫海 伺服電機抖動原因進行的分析 觀點一 當伺服電機在零速時發生抖動,應該是增益設高了,可減小增益值。如果啟動時抖動一下即報警停車了,最大可能是電機相序不正確。觀點二 1 pid增益調節過大的時候,容易引起電機抖動,特別是加上d後,尤其嚴重,所以盡量加大p,減少i,最好不要加d。2 編碼器接線接...

vb程式執行時很卡出現無響應,怎麼辦

我以前也碰到過類似問題,我用乙個笨方法 在耗時較大的迴圈中加入for i 1 to 1000 適當調整to後的值,即是交出足夠的時間給系統做出反應。不過會影響到程式執行的速度。doevents next 這裡不需要sleep,在迴圈中加入doevents就好了。若沒有新增doevents,執行時就會...