VBA VLookUp - 不工作但没有错误

时间:2016-05-06 15:19:59

标签: excel-vba error-handling vlookup vba excel

谢谢你的眼睛!我担心自己对VBA来说是全新的,而且我不得不承认一点点挣扎。

我正在尝试我的第一个项目,边做边学,而且我遇到了第一个障碍。没有错误,但我的VLookUp不想返回任何数据。

基本上我试图选择我的"输入"中的所有数据。选项卡,将其剪切并将其传递给我的"输出"选项卡,然后从我的"客户列表"做一个VLookUp;选项卡返回值以输出。

我的代码看起来像这样;

Option Explicit
Sub RP_Maker()
''''''variables

'Misc

Dim x As Long

'Worksheets

Dim ws_Input As Worksheet
Set ws_Input = Workbooks("RP Maker").Worksheets("Input")

Dim ws_Output As Worksheet
Set ws_Output = Workbooks("RP Maker").Worksheets("Output")

Dim ws_ClientList As Worksheet
Set ws_ClientList = Workbooks("RP Maker").Worksheets("Client List")

Dim ws_PRP As Worksheet
Set ws_PRP = Workbooks("RP Maker").Worksheets("Previous RPs")

'Last Column & Row

Dim lCol As Long
lCol = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Dim lRow As Long
lRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

'''''Code

'Cut Input sheet and paste to Output sheet.

ws_Input.Activate

ws_Input.Range(Cells(1, 1), Cells(lRow, lCol)).Cut ws_Output.Cells(1, 1)

ws_Output.Activate

'VLookUp

ws_ClientList.Activate

For x = 2 To lRow

    On Error Resume Next
     ws_Output.Cells(x, 4) = Application.WorksheetFunction.VLookup(ws_Output.Cells(x, 1), ws_ClientList.Range(Cells(1, 1), Cells(lRow, lCol)), 4, False)
    On Error GoTo 0

 Next x

 ws_Output.Activate


 End Sub

它不会引发任何错误,但我猜这是因为我使用过(可能是错误的)错误处理程序。

有相关数据需要查找,因此每次运行都不应该是错误。大约一半是空白,一半是数据。

全部谢谢!

卡勒姆

2 个答案:

答案 0 :(得分:1)

以下是尝试使用其他工作表中的单元格(默认ActiveSheet property)构建范围。

 ws_ClientList.Range(Cells(1, 1), Cells(lRow, lCol))

它应该更接近,

 ws_ClientList.Range(ws_ClientList.Cells(1, 1), ws_ClientList.Cells(lRow, lCol))

有几个地方你重复这个格式错误的范围引用,但由于正确的ActiveSheet你正在逃避它。最好明确引用所有Range objectRange.Cells property Range.Parent属性。

答案 1 :(得分:1)

感谢大家的帮助。应该责备我的部分参考的细胞/范围很差。

我按照建议进行了修改,它运行得很完美,只是因为其他任何人都受到类似的痛苦,这就是我的工作代码的样子;

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        /* Make it visible here. */
        button.setVisibility(View.VISIBLE);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                /* Make it disappear here. */
                button.setVisibility(View.GONE);
            }
        }, 1000);      
    }
}, 1000);