试图大胆,集中和强调列,并在产生秩序后清除列

我尝试了1)在订单列表中,从第22行到空白行的中心和下划线列E和F. 2)在电子表格中粗体显示VATTotal3)在生成订单列表后,在其他表单中清除G28列。 但是,它不是强调或集中或粗体。 你可以看看我吗? 这是我的代码如下。 非常感谢

Option Explicit Sub copy_info() Dim i As Long, j As Long, lastRow As Long Dim sh As Worksheet With Sheets("Order List") .Cells.Clear .Range("A21") = "PART CODE" .Range("B21") = "DESCRIPTION" .Range("C21") = "PRICE" .Range("D21") = "QUANTITY" .Range("E21") = "NET AMOUNT" .Range("F21") = "SHEET NAME" .Range("A21:F21").Font.Bold = True End With j = 22 For Each sh In ActiveWorkbook.Sheets If sh.Name <> "Order List" And sh.Name <> "INDEX" And sh.Name <> "SELECTOR" Then lastRow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row For i = 28 To lastRow If sh.Range("G" & i) > 0 Then sh.Range("b" & i).Copy Destination:=Worksheets("Order List").Range("A" & j) sh.Range("e" & i & ":g" & i).Copy Destination:=Worksheets("Order List").Range("B" & j) Sheets("Order List").Range("E" & j) = Sheets("Order List").Range("C" & j) * Sheets("Order List").Range("D" & j) Sheets("Order List").Range("F" & j) = sh.Name Sheets("Order List").Range("B" & j + 1) = "" Sheets("Order List").Range("B" & j + 2) = "VAT".bold.center Sheets("Order List").Range("E" & j + 1) = "" Sheets("Order List").Range("E" & j + 2) = Application.WorksheetFunction.Sum(Columns("E:E")) Sheets("Order List").Range("B" & j + 3) = "TOTAL".bold.center Sheets("Order List").Range("E" & j + 3) = Application.WorksheetFunction.Sum(Columns("E:E")) j = j + 1 End If Next i End If Next sh Sheets("Order List").Columns("A").AutoFit Sheets("Order List").Columns("B").ColumnWidth = 90 Sheets("Order List").Columns("C:D").AutoFit Sheets("Order List").Columns("E:F").AutoFit.Underline.Center For Each sh In ActiveWorkbook.Sheets If sh.Name <> "Order List" And sh.Name <> "INDEX" And sh.Name <> "SELECTOR" Then lastRow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row For i = 28 To lastRow If sh.Range("G" & i) > 0 Then sh.Range("G" & i).Select Selection.ClearContents End If Next i End If Next sh End Sub 

这有点奇怪 – 你顶部有Option Explicit ,因此你的代码根本不应该工作,因为编译错误。 一旦你尝试运行代码,VBEditor应该告诉你它们在哪里。

这里是一个例子:

代替:

 Sheets("Order List").Range("B" & j + 2) = "VAT".bold.center 

写:

 Sheets("Order List").Range("B" & j + 2).value = "VAT" Sheets("Order List").Range("B" & j + 2).Font.Bold = True Sheets("Order List").Range("B" & j + 2).HorizontalAlignment = xlCenter 

那么你可以像这样进一步改进它:

 With Sheets("Order List").Range("B" & j + 2) .value = "VAT" .Font.Bold = True .HorizontalAlignment = xlCenter End With 

甚至可以编写一个单独的函数,只传递范围和string。

您正在尝试同时做所有事情(第一部分为粗体,中间部分为底部)。 这在VBA中不起作用。 有必要采取一个又一个的行动。

一个可能的解决scheme可能是这样的:

 Sub copy_info() Dim i As Long, j As Long, lastRow As Long Dim sh As Worksheet With Sheets("Order List") .Cells.Clear .Range("A21") = "PART CODE" .Range("B21") = "DESCRIPTION" .Range("C21") = "PRICE" .Range("D21") = "QUANTITY" .Range("E21") = "NET AMOUNT" .Range("F21") = "SHEET NAME" .Range("A21:F21").Font.Bold = True End With j = 22 For Each sh In ActiveWorkbook.Sheets If sh.Name <> "Order List" And sh.Name <> "INDEX" And sh.Name <> "SELECTOR" Then lastRow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row For i = 28 To lastRow If sh.Range("G" & i) > 0 Then sh.Range("b" & i).Copy Destination:=Worksheets("Order List").Range("A" & j) sh.Range("e" & i & ":g" & i).Copy Destination:=Worksheets("Order List").Range("B" & j) Sheets("Order List").Range("E" & j) = Sheets("Order List").Range("C" & j) * Sheets("Order List").Range("D" & j) Sheets("Order List").Range("F" & j) = sh.Name Sheets("Order List").Range("B" & j + 1) = "" Sheets("Order List").Range("B" & j + 2) = "VAT" Sheets("Order List").Range("B" & j + 2).Font.Bold = True Sheets("Order List").Range("B" & j + 2).HorizontalAlignment = xlCenter Sheets("Order List").Range("E" & j + 1) = "" Sheets("Order List").Range("E" & j + 2) = Application.WorksheetFunction.Sum(Columns("E:E")) Sheets("Order List").Range("B" & j + 3) = "TOTAL" **Sheets("Order List").Range("B" & j + 3).Font.Bold = True Sheets("Order List").Range("B" & j + 3).HorizontalAlignment = xlCenter** Sheets("Order List").Range("E" & j + 3) = Application.WorksheetFunction.Sum(Columns("E:E")) j = j + 1 End If Next i End If Next sh Sheets("Order List").Columns("A").AutoFit Sheets("Order List").Columns("B").ColumnWidth = 90 Sheets("Order List").Columns("C:D").AutoFit Sheets("Order List").Columns("E:F").AutoFit Sheets("Order List").Columns("E:F").HorizontalAlignment = xlCenter Sheets("Order List").Columns("E:F").Font.Underline = xlUnderlineStyleSingle For Each sh In ActiveWorkbook.Sheets If sh.Name <> "Order List" And sh.Name <> "INDEX" And sh.Name <> "SELECTOR" Then lastRow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row For i = 28 To lastRow If sh.Range("G" & i) > 0 Then sh.Range("G" & i).Select Selection.ClearContents End If Next i End If Next sh End Sub