Подтвердить что ты не робот

Excel Range.BorderAround(), Граница всегда черная

Это код, который я использую:

rngData.BorderAround(Excel.XlLineStyle.xlContinuous,
        Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin,
        Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexNone,
        System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(178, 178, 178)));

Цвет рамки всегда черный, независимо от того, какое значение RGB я предоставляю.

4b9b3361

Ответ 1

У меня была такая же проблема, не удалось найти какое-либо решение в Интернете, документация MS для использования этого метода в VSTO немного бедна.

Во всяком случае, возможно, немного поздно для вас, как вы выложили несколько месяцев назад, но моим обходным путем было просто не использовать метод Range.BorderAround и написать свой собственный!

    private void BorderAround(Excel.Range range, int colour)
    {
        Excel.Borders borders = range.Borders;
        borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders.Color = colour;
        borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders[Excel.XlBordersIndex.xlDiagonalUp].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders[Excel.XlBordersIndex.xlDiagonalDown].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders = null;
    }

Может быть вызван в соответствии с приведенным ниже примером (Contents_Table - это NamedRange на моем листе):

BorderAround(Contents_Table.Cells, System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(79, 129, 189)));

Надеюсь, что это поможет кому-то другому, вырвав их волосы.

Ответ 2

В качестве альтернативы, если вы не беспокоитесь, чтобы обеспечить удаление внутренних и диагональных линий, я успешно использовал:

range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(153, 153, 153));

Ответ 3

worksheet.Cells[8, i].Borders.Color = 
    System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); 

Ответ 4

.Range("H1:J1").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium, color:=RGB(130, 130, 130)

Ответ 5

range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

range.Borders.Color = System.Drawing.ColorTranslator.ToOle(Color.Red);

Ответ 6

Чтобы изменить цвет рамки, вы должны использовать

Color:=RGB(255, 0, 0)

с кодом RGB, который вам интересен, или ColorIndex:=3 - для получения красного цвета, например.

Если вы используете оба параметра, [ColorIndex:=3] переопределит [Color:=RGB(255, 0, 0)] - действие будет видно, когда вы попытаетесь установить разные цвета для каждого, или используйте   [colorindex:=xlColorIndeAutomatic] или с помощью [xlColorIndexNone].

В отличие от формул Excel, в VBA вы можете и, вероятно, должны пропускать параметры, как они предлагают VBA intellisense...