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,執行時就會...