Excel - 刷新并验证来自 SQL (VBA) 的数据

Excel - Refresh and Validate Data From SQL (VBA)

我使用的是 Office 2013 和 SQLServer 2008 R2。我有一个 Excel VBA 过程,可以将销售佣金列表插入数据库。其中一列是 SalesRepID,它显然必须有效。当它被编写时,我们有一个相当静态的销售团队,但我们已经收购了另外两家从事专业工作较少的公司,所以现在销售队伍发生了相当大的变化。

当前的方法有一个销售代表 ID 和名称的列表,这些名称在排序的命名范围内,然后用作验证标准:在 Excel 的下拉列表中为用户提供了一个销售代表列表,当他们 select 一个,它使用 VLookup 将 SalesRepID 插入隐藏的单元格中。然后在插入操作中使用它。

我现在想做的是给用户一个刷新按钮(最好 运行 打开时刷新)。一些开票员周末在家工作,所以这需要能够离线工作(显然,如果添加了新的代表并且他们没有刷新他们将看不到新的代表)。

我不想在用户的物理机器上定义任何类似 ODBC 源的东西

我正在想办法解决这个问题。一种方法是添加一个将执行查询的刷新按钮,插入当前的销售代表列表并将范围(或使用动态范围)更新为当前返回的记录数。 (我假设我可以更新命名范围的地址,或者如果数据是从 SQL 查询插入的,动态范围将更新)

例如:

初始范围

1 Tom
2 Dick
3 Harry

销售代表范围 = A1:B3

用户点击刷新:删除旧范围内容。插入新列表

新范围

1 Tom
2 Dick
3 Harry
4 Fred

销售代表范围 = A1:B4

有人能想出更好的方法吗?

此致

马克

Try this for your dynamic range

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 行或其他行)中找到 sheet 上的最后一个单元格。

End(xlUp).Row 相当于从该单元格按 ctrl+up 并返回包含信息的第一个单元格的行号。