设置范围时下标超出范围

时间:2019-07-03 07:57:37

标签: excel vba

按线路 设置srchrange = Workbooks(wipreport).Worksheets(“ 1。WIP report”)。Range(“ B15:B”)

我的错误下标超出了范围。 wipreport是从文件上方选择的。该工作簿肯定具有工作表“ 1. WIP报告”。我复制了它。工作簿BPM-Tool已经打开,但是此行代码没有错误。 我什至无法尝试vlookup是否有效。

With Application.FileDialog(msoFileDialogFilePicker)
        'Makes sure the user can select only one file
        .AllowMultiSelect = False
        .Title = "Select WIP Report"
        .ButtonName = "OK"
        'Filter to just the following types of files to narrow down selection options
        .Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1
        'Show the dialog box
        .Show

        'Store in fullpath variable
        wipreport = .SelectedItems.Item(1)
    End With


Workbooks.Open wipreport


Dim lookFor As Range
Dim srchrange As Range

Set lookFor = Workbooks("BPM-Tool.xlsm").Worksheets("BPM-Report").Cells(10, 2)

Set srchrange = Workbooks(wipreport).Worksheets("1. WIP report").Range("B15:B")

    lookFor.Offset(0, 317).Value = Application.VLookup(lookFor, srchrange, 18, False)

2 个答案:

答案 0 :(得分:0)

尝试一下:

CALL new_procedure;

DECLARE db_cursor CURSOR FOR SELECT ID, ValT, SoldD FROM Table_2 ORDER BY ID; DECLARE @ID INT; DECLARE @valT INT; DECLARE @soldD INT; DECLARE @beforSoldD INT = 0; OPEN db_cursor; FETCH NEXT FROM db_cursor INTO @ID, @valT, @soldD; SET @valT = @soldD; WHILE @@FETCH_STATUS = 0 BEGIN IF(@valT IS NULL) SET @valT = 0; IF(@beforSoldD IS NULL) SET @beforSoldD = 0; UPDATE Table_2 SET SoldD = @beforSoldD + @valT WHERE ID = @ID; SET @beforSoldD = @beforSoldD + @valT; FETCH NEXT FROM db_cursor INTO @ID, @valT, @soldD; END; CLOSE db_cursor; DEALLOCATE db_cursor; 是一个不是Workbook对象的字符串,这就是为什么会出现错误的原因。

答案 1 :(得分:0)

工作簿。打开使用完整的文件名,例如 C:\ temp \ myfile.xlsx

Workbooks()仅采用文件名,例如 myfile.xlsx

您可以使用以下代码获取工作簿对象,然后使用它:

' Get the workbook object
Dim wk As Workbook
Set wk = Workbooks.Open(wipreport)

' Use the workbook object
wk.Worksheets("1. WIP report").Range ("B15:B")