Vbscript - Проблемы с получением индекса столбца Excel - PullRequest
0 голосов
/ 11 июня 2018

Я застрял в проблеме при создании простой функции, которая возвращает индекс столбца Excel, учитывая имя столбца.Я не могу понять, почему скрипт так странно себя ведет (см. Комментарии к коду для решения проблем).Я знаю, что должна быть глупая ошибка, но я просто не могу ее найти.Буду очень признателен за вашу помощь!

Ниже приведена функция, которая должна была возвращать индекс столбца в листе Excel:

function fn_findColumnIndex(sheetObj, strColumnName)
    Dim i, j, strTemp, intIndex
    j = sheetObj.usedRange.Columns.Count        'will replace it later with better ways to get column count. This works fine for now when I tried to print the value
    intIndex = 0
    for i = 1 to j step 1
        strTemp = sheetObj.cells(1,j).value     'Targeting the values in the 1st row(i.e, the column names)
        'msgbox strTemp                         'when I uncomment this line, all the values in row 1 are displayed as blank. That's the reason the function always return 0. But why are these values blank?
        if strComp(strTemp,strColumnName,1) = 0 then
            intIndex = j
            Exit For
        end if
    next
    fn_findColumnIndex = intIndex
end function

Ниже приведен фрагмент кода, которыйвызов вышеупомянутой функции:

set objExcel = createObject("Excel.Application")
objExcel.visible = false
objExcel.displayAlerts = false
strCDPath = "E:\Base\TestDesign\CycleDriver\CycleDriver.xlsx"
Set objBook = objExcel.WorkBooks.Open(strCDPath)
set objSheet = objBook.WorkSheets("CycleDriver")
intRunColumn = fn_findColumnIndex(objSheet,"Run")               'getting the value 0 here. Why?
intModuleColumn = fn_findColumnIndex(objSheet,"Module")         'getting the value 0 here. Why?
intTestScriptColumn = fn_findColumnIndex(objSheet,"TestScript") 'getting the value 0 here. Why?
objBook.close
objExcel.quit

Вот как выглядит лист: enter image description here

1 Ответ

0 голосов
/ 11 июня 2018

Я не уверен, поддерживает ли vbscript что-то похожее на IsError в vba, но если наличие заголовков столбцов гарантировано, я бы попробовал что-то вроде этого.

intRunColumn = objExcel.match("Run", objSheet.rows(1), 0)
intModuleColumn = objExcel.match("Module", objSheet.rows(1), 0)
intTestScriptColumn = objExcel.match("TestScript", objSheet.rows(1), 0)

Ваша собственная функция не работала из-заиспользуя i в качестве счетчика,

for i = 1 to j step 1

... но используя j для сбора данных, например,

strTemp = sheetObj.cells(1, j).value
'should be,
strTemp = sheetObj.cells(1, i).value
'also
intIndex = i

Таким образом, вы всегда получали метку заголовка на правом конце UsedRange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...