2016年12月29日 星期四

[VBA] Access 中取得 ListBox 選取項目的資料

(這問題困擾了我幾天了......)

假設有一 ListBox 繫結資料後如下:

------------------------------
- Id --  Name                
------------------------------
-  1  --   John                
-  2  --   Mary                 
-  3  --   Cook                
-  4  --   COLA              
------------------------------

其中第 2 筆資料,〝Mary〞被選中了。
這時若以 ListBox.Value 來取值的話,將只能夠取得 [Id] 欄位的值〝2〞,而沒辦法得知 [Name] 欄位的值!因為當初拉 ListBox 控制項時,就已經指定返回選取值的欄位是 [Id] 了,所以只有 [Id] 值可以快速取得。(返回選取值只能設定一個欄位)

若用 ListBox.ItemsSelected 來取的話,又因為 ItemsSelected 返回的內容是 Row 的集合,想得到 [Name] 的值,必須把集合的 Row 一個一個的讀出來,實在有點麻煩。

在網路上找了幾天的資料,似乎也沒人分享相關的用法。(可能 Access 的控制項太少人用)
最後在 MSDN 的網站上,發現一個關鍵的 ListBox 屬性 ─

ListBox.Column

運算式.Column(IndexRow)
運算式 代表 ListBox 物件的變數。

參數

名稱
必要/選用
資料類型
描述
Index
必要
Long
長整數的範圍從 0 到減一ColumnCount屬性的設定。
Row
選用
Variant
整數的範圍從 0 到ListCount屬性減 1 的設定。


大意就是說,只要在 Column 後面接兩個參數:欄 , 列,就可以取得該位置的內容值!!

如:

ListBox.Column(1,1)   =>  John
ListBox.Column(1,3)   =>  Cook
ListBox.Column(0,2)   =>  2

因此,最後要達到我一開始期望的結果:取得被選中資料的 [Name] 欄位值

只需要用以下語法就行了!!

ListBox.Column(1, ListBox.ListIndex + 1)

※ ListBox.ListIndex 會自己返回被選中的列號,從 0 起算。


如何!?是不是簡單多了呢!!真是好開心呀!哈哈哈

2016年12月25日 星期日

使用 svn revert 還原整份專案

原先以為使用下面兩組指令:

svn cleanup
svn revert *

就可以達到自動還原整份專案目錄(包含子資料夾)的目的,但今天發現這組指令實際上無法深入子資料進行 revert 的動作!

必須將

svn revert *

改成

svn revert * --depth infinity

才能真正達到還原整份專案目錄的結果喔!!