2010-02-15 12 views
20

Questo è il codice che sto usando:Excel Range.BorderAround(), di frontiera è sempre nero

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))); 

Il colore del bordo è sempre nero, non importa quale valore RGB che forniscono.

risposta

51

Ho avuto lo stesso problema, non riusciva a trovare una soluzione sul web, documentazione di MS per l'utilizzo di questo metodo in VSTO è un po 'povero.

In ogni caso, probabilmente un po 'tardi per voi visto che hai postato mesi fa, ma la mia soluzione era semplicemente quello di non utilizzare il metodo Range.BorderAround e scrivere il mio!

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; 
    } 

possono far valere come per esempio al di sotto (Contents_Table è un NamedRange nel mio foglio di lavoro):

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

Spero che questo aiuti qualcun altro là fuori strappando i capelli.

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

In alternativa, se non si è preoccupato di garantire la rimozione delle linee interne e diagonali Ho usato con successo:

range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous; 
range.Borders.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(153, 153, 153)); 
5
worksheet.Cells[8, i].Borders.Color = 
    System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); 
+0

modo breve e buona –

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

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

mi dispiace chiederti, ma come posso ottenere oggetto? – Divyesh

+0

Desidero disegnare un bordo semplice nell'intervallo A1: M30 – Divyesh

0

Per cambiare il colore del bordo è necessario utilizzare o

Color:=RGB(255, 0, 0)

con il codice RGB che ti interessa, oppure ColorIndex:=3 - per ottenere il colore rosso, ad esempio.

Se si utilizzano entrambi, [ColorIndex:=3] annulleranno [Color:=RGB(255, 0, 0)] - azione visibile quando si tenta di impostare colori diversi per ciascuno, o utilizzare [colorindex:=xlColorIndeAutomatic] o con [xlColorIndexNone].

A differenza di formule di Excel, in VBA è possibile e, probabilmente, dovrebbe saltare i parametri come sono suggerite da intellisense di VBA ...

"range"
Problemi correlati