2015-03-02 47 views
0

我使用的是Office 2013和SQLServer 2008 R2。我有一個Excel VBA proc,它將銷售佣金列表插入到數據庫中。其中一列是SalesRepID,顯然必須是有效的。寫完之後,我們有一個相當靜態的銷售團隊,但是我們後來收購了另外兩家做專業化程度較低的公司,所以現在銷售隊伍發生了一些變化。Excel - 刷新並驗證來自SQL(VBA)的數據

當前方法有一個銷售repID的名稱和已排序的命名範圍中的名稱,然後將其用作驗證標準:用戶在Excel中的下拉列表中爲銷售代表提供一個列表,當他們選擇一個時,使用VLookup將SalesRepID插入到隱藏的單元格中。這將在插入操作中使用。

我現在要做的是給用戶一個刷新按鈕(並且最好在打開時運行刷新)。一些理貨員在週末在家工作,所以這需要能夠脫機工作(顯然,如果添加了新的代表並且他們沒有刷新,他們將不會看到新的代表)。

我不希望有一個用戶的物理機上這樣定義ODBC數據源東西

我試圖找出解決這個問題的方法。一種方法是添加將執行查詢的刷新按鈕,插入銷售代表的當前列表,並更新範圍(或使用動態範圍)作爲當前返回的記錄數。 (我假設我可以更新指定範圍的地址,或者,如果數據從一個SQL查詢中插入動態範圍會更新)

例如:

初始範圍

1 Tom 
2 Dick 
3 Harry 

SalesReps range = A1:B3

User Hits刷新:刪除舊的範圍內容。插入新的列表

新範圍

1 Tom 
2 Dick 
3 Harry 
4 Fred 

銷售代表命名範圍= A1:B4

誰能想到這是一個更好的辦法?

問候

馬克

+0

你到現在爲止做了什麼? – 2015-03-02 15:39:44

回答

1

嘗試此動態範圍

Dim LastRow as integer 
    LastRow = Sheets("yoursheet").Cells(Rows.Count, "A").End(xlUp).Row 

    Range("A1:B" & LastRow).name = "SalesReps" 

代碼工作在一個稍微直觀的方式。 Cells(Rows.Count, "A")找到列A中的工作表上最後一個單元格(行1048576或其他)。

End(xlUp).Row等效於按下該單元格中的ctrl + up並返回包含信息的第一個單元格的行號。

+0

非常感謝。工作很好,但不知道我明白爲什麼。我的初始範圍是I6:J6。我明顯改變了你的例子中的參考來匹配我的範圍,但不知道xlUp。我會想從第一行開始,並使用xlDown將是解決方案。您的示例是從整張紙的末尾開始並從那裏查找的嗎?只是想明白。謝謝馬克 – mark1234 2015-03-02 19:26:35