从另一个工作表更新一个Excel工作表,具体取决于一个值

我试图创build一个If语句,让我发送一个数字和一个值到第三个单元格中的一个值深化的另一个工作簿(天气单元格是True或False“)。我想运行的代码,如果语句是真的是在下面我已经testing了这个代码,它的工作原理,我只是希望它发生,如果行中的第三个单元格是真的,那么它需要携带信息从数值和价值行的值为真下面的function。

Dim itemName As String Dim itemPrice As String Dim myData As Workbook Worksheets("Sheet1").Select InvoiceNumber = Range("A2") qty = Range("B2") updated = Range("C2") Set myData = Workbooks.Open("HD:Users:user:Desktop:Inventory.xlsm") Worksheets("Orders").Select Worksheets("Orders").Range("a15").Select RowCount = Worksheets("Orders").Range("a15").CurrentRegion.Rows.Count With Worksheets("Orders").Range("a15") .Offset(RowCount, 0) = InvoiceNumber .Offset(RowCount, 1) = qty .Offset(RowCount, 2) = updated End With 

你的代码看起来像它可以使用另一个循环来通过一系列的行,但我想这可能是一个情况下,只有一个单一的操作是必需的。

 Dim itemName As String Dim itemPrice As String Dim myData As Workbook Dim sInvoiceNumber As String, dQty As Double, bUpdated As Boolean, iRowCount As Long With Worksheets("Sheet1") sInvoiceNumber = .Range("A2").Value dQty = .Range("B2").Value bUpdated = CBool(.Range("C2").Value) If bUpdated Then Set myData = Workbooks.Open("HD:Users:user:Desktop:Inventory.xlsm") With myData.Worksheets("Orders").Range("a15") iRowCount = .CurrentRegion.Rows.Count .Offset(iRowCount, 0) = sInvoiceNumber .Offset(iRowCount, 1) = dQty .Offset(iRowCount, 2) = bUpdated End With myData.Close True '<-save and close the workbook .Range("C2") = Not bUpdated '<- reset the updated field End If End With 

通过过滤数据,可以使用批量传输操作,而不是遍历行。

 Dim itemName As String Dim itemPrice As String Dim myData As Workbook Dim iRowCount As Long With Worksheets("Sheet1") If .AutoFilterMode Then AutoFilterMode = False With .Cells(1, 1).CurrentRegion .AutoFilter Field:=3, Criteria1:="TRUE" With .Offset(1, 0).Resize(.Rows.Count - 1, 3) If CBool(Application.Subtotal(103, .Columns(1))) Then Set myData = Workbooks.Open("HD:Users:user:Desktop:Inventory.xlsm") .Cells.Copy Destination:=myData.Sheets("Orders").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) myData.Close True '<-save and close the workbook .Columns(3).Cells = False End If End With .AutoFilter Field:=3 End With If .AutoFilterMode Then AutoFilterMode = False End With 

该filter在C列中的工作表单元格值为TRUE。

你应该阅读if语句。 我猜你会从这里弄出来的:

http://www.techonthenet.com/excel/formulas/if_then.php

基本上,只是使用更新作为你的if语句的testing条件。

 Dim itemName As String Dim itemPrice As String Dim myData As Workbook Worksheets("Sheet1").Select InvoiceNumber = Range("A2") qty = Range("B2") updated = Range("C2") If updated Then Set myData = Workbooks.Open("HD:Users:user:Desktop:Inventory.xlsm") Worksheets("Orders").Select Worksheets("Orders").Range("a15").Select RowCount = Worksheets("Orders").Range("a15").CurrentRegion.Rows.Count With Worksheets("Orders").Range("a15") .Offset(RowCount, 0) = InvoiceNumber .Offset(RowCount, 1) = qty .Offset(RowCount, 2) = updated End With End If