Marc Kane Ответов: 1

Найдите конкретную строку в excel


Здравствуйте, ребята, я пытаюсь найти строку в excel, в которой есть "да", написанное в столбце А, но я получаю ошибку в этой строке:
rng = xlsheet.Range("A").EntireColumn
, что говорит:
System.Runtime.InteropServices.COMException: 'Exception from HRESULT: 0x800A03EC'


Что я уже пробовал:

Dim xlApp As Excel.Application = Nothing
          Dim xlWorkbook As Excel.Workbook = Nothing

          Dim rng As Excel.Range
          Dim xlsheet As Excel.Worksheet
          Dim Path As String = "AA.xlsx"
          xlApp = New Excel.Application
          xlApp.Visible = True
          Path = System.IO.Path.GetFullPath(Path)
          xlWorkbook = xlApp.Workbooks.Open(Path)
          xlsheet = CType(xlWorkbook.Sheets(level), Excel.Worksheet)
          rng = xlsheet.Range("A").EntireColumn
          Dim xlCurRow as long
          xlCurRow = rng.Find("Yes").Row

ZurdoDev

Я бы предложил сначала сделать это в VBA, а затем преобразовать в VB.NEt-да.

ZurdoDev

xlsheet, вероятно, равен нулю.

1 Ответов

Рейтинг:
2

CHill60

Отладьте свой код - если вы не уверены, как это сделать, то следуйте инструкциям здесь Учебник: отладка кода Visual Basic - Visual Studio | Microsoft Docs[^]

Посмотрите на строку кода, которая вызывает исключение

rng = xlsheet.Range("A").EntireColumn
В этой строке есть только две вещи, которые не являются частью синтаксиса языка, и это переменные rng и xlsheet. Вы пытаетесь присвоить значение rng и он был должным образом объявлен в рамках этого кодекса, так что вряд ли это будет так. Так что взгляните на это xlsheet. Ему присваивается значение (мы думаем) в строке выше этого
xlsheet = CType(xlWorkbook.Sheets(level), Excel.Worksheet)
Исключив переменную в отладчике, вы, вероятно, обнаружите, что это "ничто". Получение ценности в xlsheet зависит от нескольких других переменных - xlWorkbook и level

Если level я бы ожидал, что это была строка, которая вызвала исключение (листы excel начинаются с 1). Но если вы исследуете xlsheet в вашей IDE / отладчике вы, вероятно, обнаружите, что это "ничто". Честно говоря, я не уверен, почему вы используете CType там - Sheets(n) вернет Excel.Однако это преобразование кажется излишним.

Предполагая уровень <> 0, то линия выше
xlWorkbook = xlApp.Workbooks.Open(Path)
нужно, чтобы на него посмотрели. В вашем отладчике так и есть xlWorkbook имеют значение, и это имя этой книги "AA.xlsx-что? Потому что вы не указали a путь в
Dim Path As String = "AA.xlsx"
Вы можете значительно облегчить себе жизнь, отслеживая ошибки, используя Хорошо построенные и продуманные методы обработки ошибок. Эта статья является хорошей отправной точкой Рекомендации по обработке исключений в .NET[^] - большинство примеров приведены на языке C#, но эти слова применимы к любому языку. VB.NET в конце статьи есть отдельный раздел, но не сразу переходите к нему - читайте принципы


Maciej Los

Хорошо объяснил!