1

在成为其他语言的恐龙之后,我正在尝试学习 VBA。我正在进行的项目并不多,主要是概念验证或培训练习。

我有一个 Excel 表格,其中包含“部门”、“列表标记”、“A 标记”、“B 标记”和“C 标记”列。我有一个表格,用户选择部门,然后输入成本。我想选择部门,找到那一行,提取加价值并向用户显示列表、A、B 和 C 定价。向回答这个问题的 Chris Neilsen 大声喊叫。它有帮助,不幸的是还不够。我重写了他的代码,但通过调试我发现它并没有真正拾取任何行。我已经知道我需要哪些列,而不是行。

基本上:

User selects department
User enters item cost

Search column 1 ("Department") for a match
(Match should exist, because this column is used to populate the first ComboBox
When the match is found, get the row.
Once the row is found, get the markups from the corresponding columns
Output cost times markup for all four prices

我会向您展示我的代码,它在哪里失败,但我所做的每一次更改都是一个不同的错误。我想我坐在这里试图重新发明轮子。

4

2 回答 2

1

如果您的部门条目是唯一的,您可以获得执行以下操作的行:

deptRow = Application.WorksheetFunction.Match(departmentName, Range("A:A"), 0)

假设 A 列包含部门名称,departmentName 是您要搜索的部门的名称。末尾的 0 是告诉 Excel 仅查找完全匹配项所必需的。

您实际上可以像这样调用任何标准工作表函数;只需调用Application.WorksheetFunction.functioname().

然后,您可以获取单元格的值并添加它们:

markup = Cells(deptRow,2)+Cells(deptRow,3)+Cells(deptRow,4)+Cells(deptRow,5)

其中 2、3、4、5 对应于 B、C、D、E 列。

您也可以使用该Application.WorksheetFunction.Sum功能。

于 2013-06-07T16:36:03.603 回答
0

一个简单的循环就足够了。

Dim strTargetValue As String
strTargetValue = ""

'Simulates a search for "Test 2"
Dim strSearchValue As String
strSearchValue = "Test 2"

Dim intRowNumber As Integer
intRowNumber = 0

Dim intRowCursor As Integer
intRowCursor = 1

Dim bolStopLooking As Boolean
bolStopLooking = False

'Loop until we find the row or find an empty cell.
Do Until intRowNumber > 0 Or bolStopLooking = True

    'Assumes first column is "Department"
    If Rows(intRowCursor).Cells(1).Value = strSearchValue Then

        intRowNumber = intRowCursor

    End If

    If Len(Rows(intRowCursor).Cells(1).Value) = 0 Then

        bolStopLooking = True

    End If

    intRowCursor = intRowCursor + 1

Loop

'Assumes Second Column is target value. Do same for other cells from row that you need.
If intRowNumber > 0 Then

    strTargetValue = Rows(intRowNumber).Cells(2).Value

End If
于 2013-06-07T16:33:54.217 回答