2016-09-02 4 views
2

С моим кодом я хочу, чтобы 2 выполнял форматирование по нескольким соседним COLUMNS, и я хочу сделать это элегантно в коде. Так же, как это должно быть в книге. Я учусь, поэтому хочу научиться правильному пути. это как моя задача выглядит следующим образом:Выполните форматирование нескольких соседних столбцов в excel VBA?

enter image description here

Я прочитал this. Я имею в виду ... нет там действительно нет возможности перечислить буквы столбцов в методе COLUMNS? нет способа сделать это?

Так что мне нужно использовать объект RANGE для выполнения моей задачи? Правильно ли это?

Как использовать метод UNION в сочетании с «With ... End With» Это мое дело, я думаю. Пожалуйста, объясните более подробно, чем только 1,5-строчный ответ. мне нужно будет делать то же самое с Колонный: B, C, G, H. Они будут отформатированы .NumberFormat = "#,##0.00"

Option Explicit 
Dim VBA As Worksheet 
Dim Filter As String 
Dim Stock As Variant 
Dim Index As Variant 
Dim Portfolio As Variant 
' Dim Date as Range 

Sub Columns_Formatting() 

Set VBA = Workbooks("kgh pricing model thursday.xlsm").Worksheets("VBA") 
Filter = "Pliki CSV, *.csv," & "Pliki TXT, *.txt," & "All Files, *.*" 
' Stock = Application.GetOpenFilename(fileFilter:=Filter, FilterIndex:=1, Title:="Choose file with a stock prices") 
' Index = Application.GetOpenFilename(fileFilter:=Filter, FilterIndex:=1, Title:="Choose file with an index values") 
' If Stock = False Or Index = False Then MsgBox "Canceled": Exit Sub 

With VBA.Columns("A:A,F:F")  ' here is the error = type mismath 
    .HorizontalAlignment = xlCenter 
    .VerticalAlignment = xlCenter 
    .WrapText = True 
    .NumberFormat = "yyyy-mm-dd;@" 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
    .ColumnWidth = 12 
End With 

With VBA.Columns("A;F") 
    .HorizontalAlignment = xlCenter 
    .VerticalAlignment = xlCenter 
    .WrapText = True 
    .NumberFormat = "General" 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
    .ColumnWidth = 12 
End With 

With VBA.Range("E2:E" & Rows.Count) 
    .HorizontalAlignment = xlGeneral 
    .VerticalAlignment = xlCenter 
    .WrapText = True 
    .NumberFormat = "#,##0" 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
    .ColumnWidth = 10 
End With 
+5

да, вместо 'С VBA.Columns ("A: A, F: F")' 'С использованием VBA.Range ("A: A, F: F")' –

+4

для второй части , просто используйте 'С VBA.Range (« B: B, C: C, G: G, H: H »)' или короче 'С VBA.Range (« B: C, G: H »)' –

+0

it работает человек. поблагодарить U за быстрый и правильный ответ –

ответ

1

Используйте Range object с полными ссылками на столбцы. Возможно, вам также захочется сократить полные ссылки на столбец Worksheet.UsedRange property с помощью Intersect method.

With VBA 
    With Intersect(.UsedRange, .Range("A:A,F:F")) 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
     .WrapText = True 
     .NumberFormat = "yyyy-mm-dd;@" 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
     .ColumnWidth = 12 
    End With 
End With 
Смежные вопросы