按线路 设置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)
答案 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")