繁体   English   中英

如何根据特定条件使用 VBA 将信息从 Excel 中的一张工作表传输到另一张工作表?

[英]How can I transfer information from one sheet in Excel to another using VBA based on specific conditions?

我想将 Qty Produced from sheet PLAN 中的值提取到与正确的产品名称和正确的星期几对应的 sheet S 中。 Sheet "S" Sheet "PLAN"到目前为止我尝试过的是: 3 个 for 循环 - 一个循环遍历工作表 S 中的行,其中 Qty 产生的位置,一个循环遍历 Sheet PLAN 中的行,一个循环遍历列中的列表 S,连同 2 个条件 - 一个确保这是相同的产品,一个确保这是正确的日期。 这是我的代码:

Sub production()

    For k = 9 To 29 Step 4
        For n = 5 To 24

            If Sheets("plan").Cells(n, 3) = Sheets("s").Cells(k - 1, 1) Then

                For i = 3 To 23
                Set p = Sheets("S").Cells(k, i)
                    If Sheets("plan").Cells(n, 2) = Sheets("s").Cells(7, i) Then
                        p = Sheets("plan").Cells(n, 4).Value
                    End If
                Next i
            End If
        Next n
    Next k
End Sub

目前,它没有产生任何结果。 此外,我曾尝试使用 excel 公式索引和匹配,但问题是当您自动填充它时,工作表计划中的日期列正在发生变化。 预先感谢您的帮助!

试试下面的 ADO 代码,你必须将 ADO 库添加到你的项目中:

Public Sub RunMe()
 Dim cnn As New ADODB.Connection
 Dim rst As New ADODB.Recordset
 Dim cmd As New ADODB.Command

 With cnx
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source='" & ThisWorkbook.FullName & "'; " & "Extended 
 roperties='Excel 8.0;HDR=Yes;IMEX=1'"
    .Open
End With


'setup the command
Set cmd.ActiveConnection = cnx
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * FROM [OutPutSheet$] where [ColumnName]=" & "'AnyValueOrVariable'"
rst.CursorLocation = adUseClient
rst.CursorType = adOpenDynamic
rst.LockType = adLockOptimistic

'open the connection
rst.Open cmd

'Assuming that you want to get the data from A2, or else you can even make it more 
'dynamic
Sheets("plan").Range("A2").CopyFromRecordset rst


'disconnect the recordset
Set rst.ActiveConnection = Nothing
'disconnect the connection
Set cnx = Nothing

End Sub

您可以在 sql 语句中说明条件。

我建议您的程序使用此流程。

  1. 定义要更新的数据。 我建议您更新当天的数字(并扩展到包括此后的所有天数,但不包括 TODAY()),这意味着排除任何较早的日子,假设它们之前已经完成。
  2. 遍历 PLAN 中的所有日子并跳过您不想要的那些日子。
  3. 对于剩余的时间,您在 S 中查找日期并将每个数字发布到相应的产品。

为了实施上述策略,您需要在两个工作表中唯一标识日期。 这就是为什么它们都必须是日期。 文字不行。

日期由整数表示,例如 43909,它标识 2020 年 3 月 19 日。您可以在单元格(例如 A1)或 =TODAY() 中输入此数字,然后将单元格格式化为Date (右键单击单元格,选择单元格格式和数字选项卡),您将看到日期而不是数字,但您可以使用数字进行计算。 尝试 [B1] =A1 + 1。您可以应用自定义格式“ddd”,并且只会显示 Thu 和 Fri。

使用此方法来创建您的字幕。 只需在第一个标题单元格中输入日期,例如 A3,在 A4 中输入=A3 + 1 ,然后将公式向下复制到 A 列中需要的天数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM