【问题标题】:Inserting, searching, copying, pasting across 2 spreadsheets in Excel在 Excel 中跨 2 个电子表格插入、搜索、复制、粘贴
【发布时间】:2015-06-10 18:52:41
【问题描述】:

我想我可以通过对我们为其他东西编写的类似代码的分析来解决这个问题,但代码不是我的强项。

事实证明,在没有指导的情况下潜入 VBA 对我来说太艰巨了,无法继续。

如果我使用了错误的语言,请原谅我的术语,我很高兴学习并得到纠正。

对于知道自己在做什么的人来说,这应该不难,我根本不知道。

我正在尝试创建一个启用宏的工作簿,该工作簿执行以下操作:

  • 从与宏位于同一目录中的名为“Data”的文件夹中打开“Data.csv”。我们将此工作簿称为 A - wbA。

  • 在 wbA 上的列 C 之后插入一列,标题为“组图像名称”。 D 列是我们希望数据结束的地方。

  • 从位于宏所在目录的名为“Groups”的文件夹中打开“Groups.csv”。我们将此工作簿称为 B - wkB。

(下一部分需要是一个循环,从 wbA 上的 C1 开始,沿着列向下直到电子表格结束)

  • 从 wbA 的 C 列中的选定单元格中复制值
  • 在 wbB 的 C 列中搜索复制的值。找到后,将所选内容移至 A 列中的相应单元格。(如果是 C2,则为 A2)
  • 将列 A 值的内容从 wbB 复制到 wbA 上与 wbA 上的原始起点相对应的 D 列单元格。

基本上用简单的语言:在 wbB 的 C 列上搜索来自 wbA 的 C 列内容。找到后,移动到 wbB 上相同单元格 # 的 A 列,复制内容,然后粘贴到 wbA 上与 C 列起点的单元格 # 对应的 wbA 上 D 列的单元格 #。

我希望这很清楚;如有必要,请随时询问更多详细信息。提前感谢任何人的帮助!

这是我目前正在使用的糟糕代码:

    Sub OpenDataAddGroupImageTitleColumn()

ChDir "C:\[RealCodeHasCorrectFilepath..]\Desktop\TEST"
Workbooks.Open Filename:="C:\[RealCodeHasCorrectFilepath..]\Desktop\TEST\DATA.csv"
Columns("D:D").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Cells.Select
Cells.EntireColumn.AutoFit
Range("D1").Select
ActiveCell.FormulaR1C1 = "Group Image Title"
Range("C2").Select
'Variables for storing Row, Column Location, and Value here
Dim GROUPNAME As String
Dim RowLocationX As Long
Dim ColumnLocationZ As Integer
GROUPNAME = ActiveCell.Value
RowLocationX = ActiveCell.Row
ColumnLocationZ = ActiveCell.Column
Workbooks.Open Filename:="C:\[RealCodeHasCorrectFilepath..]\Desktop\GROUPS.csv"
Columns("C:C").Select
Selection.Find(What:="GROUPNAME", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
End Sub

经过大量谷歌搜索后我无法弄清楚的当前障碍是:是否可以使用查找/替换功能搜索我的变量 GROUPNAME?或者我应该使用涉及复制到剪贴板的方法采取不同的方法?

【问题讨论】:

  • 请提供您尝试过的代码以及您遇到的确切问题。这不是让其他人为您编写代码的地方,但是有很多人很乐意帮助您解决编码时遇到的问题。
  • 我添加了上面的代码;不要笑。我毫不怀疑它包含冗余和超过必要的部分。此时我的主要问题如下:如何引用/保存先前选择的单元格值以供稍后在代码中使用?见上面的注释。此宏是否可以将剪贴板内容粘贴到“查找/替换”搜索中?我将如何/在哪里启用我描述的循环功能?
  • 将问题编辑到问题中。他们没有出现在评论中。

标签: vba excel csv


【解决方案1】:

我看到的第一个问题是:

1) 你不要把函数放在子程序的中间。如果你想要一个函数,你可以把它放在它自己的位置上:

 Sub MySub()
      'Do Stuff
      x = myFunction()
      debug.print x
 End Sub

 Function MyFunction() As String
      'Do Stuff
      MyFunction = "Test"
 End Function

2) 您提供的代码不会因为原因 1 编译,还因为您使用“End Function”而不是 End Sub 结束了 Sub。尝试运行代码,您将收到错误消息。然后您可以研究错误消息并尝试修复它。此外,如果您没有收到错误消息,您可以单步调试代码以确保它按您预期的方式工作。

3) 第一行是行不通的。您需要使用文件的整个路径,即使它与您当前打开的文件位于同一文件夹中。有多种方法可以获取您当前打开的文件的目录(谷歌肯定会向您展示其中的许多),您可以将文件名附加到您打开的文件的目录中。

4) 你想要一个循环,但你没有放入任何循环结构。谷歌“Excel VBA 循环单元格”,你可以找到很多例子来使用。

5) 我认为你遇到的最大问题是你不知所措,因为你试图一次完成所有事情。我建议一次解决一个问题,然后将代码放在一起。例如,您要打开两个文件。首先编写代码只是为了打开一个文件。然后尝试从文件中获取一个值到打开的工作簿中。然后打开另一个文件。然后从该文件中获取数据。然后测试循环遍历当前工作簿中的单元格并检查所需条件并粘贴结果(如果它们匹配)。然后将所有这些东西组合成连贯的代码。

没有人在第一次尝试时就编写出高效的代码,因此即使您最终编写了非常长但效率不高的代码,您也会学到很多东西并有所收获。即使是经验丰富的程序员也可能会卡住或编写第一次甚至第十次都无法运行的代码。如果您遇到困难,请针对您无法解决的特定错误消息或特定问题提出具体问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多