彰化一整天的論壇

 找回密碼
 立即註冊
樓主: cool_fan

表單控制項 的 下拉式方塊諮詢

[複製鏈接]
 樓主| 發表於 2020-2-17 09:44:47 | 顯示全部樓層
本帖最後由 cool_fan 於 2020-2-17 09:53 編輯

老師您好, 附上截圖說明。
問題描述:在工作表2, 使用下拉式選單後,針對值change後,會去搜尋工作表1的時間,不過在trace code時,
發現時間有找到, 但未找到此時間的列,不清楚是不是語法上有疏漏?


     'Ex:假設工作表2, 選取時間08:57:03,則應該尋找工作表1的對應的時間
     '以下a為取的列,應該a=36, 但看程式碼這邊a=1

擷取111.PNG
回復 支持 反對

使用道具 舉報

發表於 2020-2-17 11:08:01 | 顯示全部樓層
cool_fan 發表於 2020-2-17 09:44
老師您好, 附上截圖說明。
問題描述:在工作表2, 使用下拉式選單後,針對值change後,會去搜尋工作表1的時間 ...

因為您是工作表2要去執行工作表1的查詢,要用完整物件表示,否則會變成在工作表1查詢
下次您要貼程式碼可以參考

如何在discuz張貼程式碼
http://discuz.bestdaylong.com/fo ... 30239&fromuid=2
(出處: 彰化一整天的論壇)



  1. Private Sub ComboBox1_Change()
  2.     x1 = ComboBox1.Value
  3.    
  4.     Sheets("工作表1").Activate
  5.     'Range("O:O").Select

  6.     Set x2 = Sheets("工作表1").Cells.Find(What:=x1, _
  7.         After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
  8.         SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
  9.         False)
  10.      '此處需要在工作表1找尋對應時間的列
  11.      a = x2.Row
  12.      MsgBox (a)
  13.      
  14. End Sub
複製代碼



複製貼上20200216a.xlsm

33.9 KB, 下載次數: 3

售價: 1 金錢  [記錄]

回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 2020-2-17 17:34:34 | 顯示全部樓層
老師您好,
我原以為在code上面切換 Sheets("工作表1").Activate,這樣它在此工作表就可以針對其物件去做判斷。
我懂您的意思了,謝謝~
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2020-2-18 11:58:29 | 顯示全部樓層
本帖最後由 cool_fan 於 2020-2-18 12:01 編輯
imingho 發表於 2020-2-13 20:14
您好,
     忘了跟您說設定方式,請用底下的方式操作。

老師您好,另外想請教下ListFillRange是否能針對該行的資料量做動態調整。

假設原本 ListFillRange:工作表3!$B1: $ B$6 ,如果今天有新的資料量進來ListFillRange:工作表3!$B1: $ B$50
這樣新的資料進來,下拉的時候可以看每次不一樣的資料。

目前做法:ListFillRange:工作表3!$B1: $ B$1000 ->這樣雖然資料都有在裡頭,不過空白也也一堆

謝謝老師耐心地回覆~
回復 支持 反對

使用道具 舉報

發表於 2020-2-18 19:11:35 | 顯示全部樓層
cool_fan 發表於 2020-2-17 17:34
老師您好,
我原以為在code上面切換 Sheets("工作表1").Activate,這樣它在此工作表就可以針對其物件去做判 ...

錄了一段觀念說明,請看了就知道原因.
【ExcelVBA教學】為什麼使用Activate後無法用range取得值
http://discuz.bestdaylong.com/fo ... 38745&fromuid=2
(出處: 彰化一整天的論壇)
回復 支持 反對

使用道具 舉報

發表於 2020-2-18 20:00:27 | 顯示全部樓層
cool_fan 發表於 2020-2-18 11:58
老師您好,另外想請教下ListFillRange是否能針對該行的資料量做動態調整。

假設原本 ListFillRange:工作 ...
  1. Private Sub Worksheet_Activate()
  2.     ComboBox1.ListFillRange = "工作表6!C1:C" & Excel.WorksheetFunction.CountA(工作表6.Range("C1:C100"))
  3. End Sub
複製代碼
excel_combobox_01.jpg



複製貼上20200218a.xlsm

35.34 KB, 下載次數: 1

售價: 1 金錢  [記錄]

回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 2020-2-19 14:39:34 | 顯示全部樓層
老師您好,有個下拉選取方塊延伸問題想請教
Q1: 假設First:Combobox1 選一個時間,能否讓Second:Combobox2裡的時間自動跳選到First時間點的下一個time嗎?
ex: 假設First選08:56:32 =>second時間點能自動跳08:57:03
  假設First選08:57:03 =>second時間點能自動跳08:57:15

不確定是否能做到這樣自動化,詳細如附檔

複製貼上20200218ab.xlsm

45.46 KB, 下載次數: 1

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2020-2-19 18:14:59 | 顯示全部樓層

老師您好,我重新做好幾次,重新拉下拉式方塊會一直報錯。(不確定是不是跟儲存格有關西)
看CODE宣告看起來應該沒錯

ComboBox3.ListFillRange = "工作表3!B2:B" & Excel.WorksheetFunction.CountA(工作表3.Range("B2:B100"))
ComboBox4.ListFillRange = "工作表3!B2:B" & Excel.WorksheetFunction.CountA(工作表3.Range("B2:B100"))

不過,還是會報此處需要物件的ERROR
如附件。

下拉wired.xlsm

113.16 KB, 下載次數: 1

回復 支持 反對

使用道具 舉報

發表於 2020-2-20 11:21:51 | 顯示全部樓層
cool_fan 發表於 2020-2-19 14:39
老師您好,有個下拉選取方塊延伸問題想請教
Q1: 假設First:Combobox1 選一個時間,能否讓Second:Combobox2 ...
  1. Private Sub ComboBox1_Change()
  2.     x1 = ComboBox1.Value
  3.    
  4.     Sheets("工作表1").Activate
  5.     'Range("O:O").Select

  6.     Set x2 = Sheets("工作表1").Cells.Find(What:=x1, _
  7.         After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
  8.         SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
  9.         False)
  10.      '此處需要在工作表1找尋對應時間的列
  11.      a = x2.Row
  12.      'MsgBox (a)
  13.      
  14.      
  15.      '設定第2個下拉選單的值
  16.      ComboBox2.Value = ComboBox1.Value
  17.      
  18.      Sheets("工作表2").Activate
  19. End Sub
複製代碼

複製貼上20200218ab.xlsm

41.52 KB, 下載次數: 1

售價: 1 金錢  [記錄]

回復 支持 反對

使用道具 舉報

發表於 2020-2-20 11:41:28 | 顯示全部樓層
cool_fan 發表於 2020-2-19 18:14
老師您好,我重新做好幾次,重新拉下拉式方塊會一直報錯。(不確定是不是跟儲存格有關西)
看CODE宣 ...

您是觀念的問題,請參考.
http://wordpress.bestdaylong.com/blog/archives/2134
Excel VBA 工作表的使用技巧
工作表_name.jpg


原本程式
  1. Private Sub Worksheet_Activate()


  2.   ComboBox3.ListFillRange = "工作表3!B2:B" & Excel.WorksheetFunction.CountA(工作表3.Range("B2:B100"))
  3.   ComboBox4.ListFillRange = "工作表3!B2:B" & Excel.WorksheetFunction.CountA(工作表3.Range("B2:B100"))
  4.   

  5. End Sub
複製代碼


修改過.

  1. Private Sub Worksheet_Activate()


  2.   ComboBox3.ListFillRange = "工作表3!B2:B" & Excel.WorksheetFunction.CountA(工作表1.Range("B2:B100"))
  3.   ComboBox4.ListFillRange = "工作表3!B2:B" & Excel.WorksheetFunction.CountA(工作表1.Range("B2:B100"))
  4.   

  5. End Sub
複製代碼


下拉wired.xlsm

30.3 KB, 下載次數: 0

售價: 1 金錢  [記錄]  [購買]

回復 支持 1 反對 0

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  

GMT+8, 2020-4-7 19:17 , Processed in 0.141132 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表