kyrons Ответов: 1

Как создать выпадающий список с исходным кодом из другого листа в excel с помощью VB.NET


У меня есть программа, которая может создать рабочую книгу. Внутри рабочей книги находятся листы 1 и 2. Sheet1 имеет элемент управления dropdownlist, созданный программно с помощью vb.net-да. он прекрасно работает, когда эта строка кода выглядит так:Formula1:="=$A$1:$E$1", но когда я меняю ее на Formula1:="=Sheet2$A$1:$E$1", она возвращается к ошибке.

Это ошибка показала:

Необработанное исключение типа 'System.Runtime.InteropServices.COMException' произошло в Microsoft.VisualBasic.dll
Дополнительная информация: исключение из HRESULT: 0x800A03EC


Пожалуйста, помогите исправить такого рода ошибки. Спасибо

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

My code:


Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        Dim xlApp As New Excel.Application
        xlApp.Visible = True
        Dim xlWorkbooks As Excel.Workbooks = xlApp.Workbooks
        Dim xlWorkbook As Excel.Workbook = xlWorkbooks.Add
        Dim xlWorksheet As Excel.Worksheet = CType(xlWorkbook.Worksheets(1), Excel.Worksheet)

       


        Dim xlRng As Excel.Range = xlWorksheet.Cells(5, 5)

        xlRng.Select()  
        With xlApp.Selection.Validation   
            .Add(Type:=Excel.XlDVType.xlValidateList, _
             AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, _
            Operator:=Excel.XlFormatConditionOperator.xlBetween, _
             Formula1:="=Sheet2$A$1:$E$1")
            .IgnoreBlank = True
            .InCellDropdown = True
        End With
    

        With (xlWorkbook) 
            .Worksheets.Add(After:=.Worksheets(1))
            .Sheets("Sheet2").Name = "Sheet2"
        End With
        With xlWorkbook.Worksheets("Sheet2") 
            .Cells(1, 1) = "Jose"
            .Cells(1, 2) = "Juan"
            .Cells(1, 3) = "acronym"
            .Cells(1, 4) = "sector"
            .Cells(1, 5) = "type_acronym"

            .Cells(2, 2) = "(Select Agency Name)"
            .Cells(3, 1) = "2198"
            .Cells(3, 2) = "ABRA STATE INSTITUTE OF SCIENCE AND TECHNOLOGY"
            .Cells(3, 3) = "ASIST"
            .Cells(3, 4) = "State Universities and Colleges"
            .Cells(3, 5) = "Proper"
        End With


        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRng)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorksheet)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbooks)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
    End Sub

1 Ответов

Рейтинг:
10

Patrice T

Цитата:
Как создать выпадающий список с исходным кодом из другого листа в excel с помощью VB.NET

Поскольку Interop используется для удаленного управления Excel, у него есть ограничения Excel, а Excel (по крайней мере, в удерживаемых версиях) не позволяет делать то, что вы хотите (по крайней мере, напрямую).
Excel не допускает дроплистов с явной ссылкой на другой лист.
Обходной путь состоит в том, чтобы определить имя для диапазона списка и использовать его в качестве формулы отбрасывания.
это выглядит так:
xlApp.ActiveWorkbook.Names.Add Name:="MyList", RefersTo:="=Sheet2$A$1:$E$1"
With xlApp.Selection.Validation
    .Add(Type:=Excel.XlDVType.xlValidateList, _
     AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, _
    Operator:=Excel.XlFormatConditionOperator.xlBetween, _
     Formula1:="=MyList")
    .IgnoreBlank = True
    .InCellDropdown = True
End With


kyrons

Спасибо...решено.