2017-10-20 2 views
1

1)コラムEとFをOrder Listシートの中心にして、22行目から空白行に下線を引いてください。 2)スプレッドシートに太字で中央にVAT合計を入力します。 3)注文リストを生成した後、他のシートの列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 

答えて

0

- あなたが一番上に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 

かを別の関数を書くことさえできます範囲と文字列だけを渡しています。

+0

こんにちは、答えてくれてありがとう。それは私の問題を解決します。ただし、エラー400が表示されています。解決方法を教えてください。多くのありがとう –

0

すべてを同時に実行しようとしています(最初の部分は太字で中央が中央、下に下線が引かれています)。これはVBAでは機能しません。次々と行動を取る必要があります。

あなたの問題に対する一つの可能​​な解決策は、この可能性が

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 
+0

こんにちは、ありがとうございました。それは私の問題を解決します。ただし、エラー400が表示されています。解決方法を教えてください。どうもありがとう –

関連する問題