【问题标题】:Unable to fetch ID from one sheet and write to another workbook无法从一张工作表中获取 ID 并写入另一个工作簿
【发布时间】:2020-12-16 00:31:57
【问题描述】:

我有两个 Excel 工作簿。

第一个工作簿有两个工作表:“销售”和“查找”。

第二个工作簿有一张:“ID”

从第一个工作簿(销售)中,我必须读取“B”列的值,在“查找”表的 A 列中搜索它并从 B 列获取名称。

获取 ID 后,我必须写入“ID”工作簿的 E 列。

我尝试了第一部分,但它没有遍历 Sales 的单元格,也没有从“查找”中选择值。

Sub btnExport_Click()
Dim rng As Range
Dim ws1, ws2 As Worksheet
Dim MyStringVar1 As String

Set ws1 = ThisWorkbook.Sheets("Lookup")
Set ws2 = ThisWorkbook.Sheets("Sales")
Set rng = ws2.Range("B2")

With ws2
    On Error Resume Next 'add this because if value is not found, vlookup fails
    MyStringVar1 = Application.WorksheetFunction.VLookup(Left(rng, 6), ws1.Range("A2:C65536").Value, 2, False)
    On Error GoTo 0
    If MyStringVar1 = "" Then MsgBox "Item not found" Else MsgBox MyStringVar1
End With

End Sub

*** 已编辑 ***

代码已修复。它现在从 Sales 的第一个单元格读取,但不迭代。此外,在从 Lookup 迭代和获取时,它必须写入另一个工作簿。这是我无法解决的问题。

【问题讨论】:

  • 你为什么使用ActiveSheet
  • @BigBen 刚刚找到一个样本并尝试过。没有使用宏的经验。
  • 在循环前加一个Debug.Print i,看看i的实际值是多少。
  • @BigBen 我已经修改了代码。它正在工作,但没有通过销售迭代。
  • 它没有迭代,因为你摆脱了循环。

标签: excel vba


【解决方案1】:

您应该先进行两项更改。首先,尽量不要引用ActiveSheet(如 cmets 中所述)。如果在选择不同的工作表时运行宏,那么它会搞砸。将相应的工作表存储在变量中,例如: 暗淡为工作表 设置 ws = Sheets("Sales")

另一个突出的项目是在您的循环中,您正在使用 .Cells 关闭 rng 对象。在您的情况下,您将 rng 设置为 B 列中使用的范围。假设这是单元格 B2:B10。然后当你说rng.Cells(i, 2) 时,如果实际上偏移到范围的第二列,它从 B 列开始。你最终使用 C 列。

相反,尝试类似

Sub btnExport_Click()
    Dim rng As Range
    Dim i As Long
    Dim ws As Worksheet
    Set ws = Sheets("sales")
    With ws
        Set rng = .Range("B2:B" & .Cells(.Rows.Count, 1).End(xlUp).Row)

        For i = 2 To rng.Rows.Count
            .Cells(i, 2) = Application.WorksheetFunction.VLookup(.Cells(i, 1), Sheets("Lookup").Range("A:B"), 2, False)
            MsgBox (.Cells(i, 2))
        Next
    End With
End Sub

【讨论】:

  • @RKh 这可能是一个疏忽,但您实际上摆脱了 For 循环
  • 谢谢。顺便说一句,如何解决写入另一个工作簿的第二部分。
  • @Rkh 您必须将其他工作簿纳入范围。查看Workbook.Open(...) 方法。一旦可用,创建对目标工作表的引用,然后向下循环,添加值。最好单独发帖。
猜你喜欢
  • 2013-10-23
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多