我认为我能够根据我们为其他事情编写的类似代码的分析来解决这个问题,但代码并不是我的强项。
事实证明,在没有指导的情况下潜入VBA对我来说太艰巨了。
如果我使用错误的语言,请原谅我的术语,我很乐意学习和纠正。
对于那些知道自己在做什么的人来说,这不应该是困难的,我根本就没有。
我正在尝试创建一个支持宏的工作簿,该工作簿执行以下操作:
Open" Data.csv"来自名为" Data"的文件夹在与宏相同的目录中。我们将此工作簿称为A - wbA。
在C列标题为“#34;组图像名称”之后在wbA上插入一列。"这个D列是我们希望数据结束的地方。
Open" Groups.csv"来自名为" Groups"的文件夹在与宏相同的目录中。我们将此工作簿称为B - wkB。
(下一部分需要是一个循环,从wbA上的C1开始,然后沿着列向下进行,直到电子表格结束)
基本上用简单语言:从wbB的C列上的wbA中搜索C列内容。找到后,移动到wbB上相同单元格#的A列,复制内容,然后粘贴到wbA上的D列单元格#中,该单元格对应于C列起点的单元格#。
我希望这很清楚;如有必要,请随时询问更多详情。感谢任何人的帮助!
这是我目前正在处理的可怕代码:
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?或者我应该采用不同的方法来处理涉及复制到剪贴板的事情?
答案 0 :(得分:0)
我看到的第一个问题是:
1)您不要将函数放在子例程的中间。如果你想要一个功能,你就把它放在自己的身上:
Sub MySub()
'Do Stuff
x = myFunction()
debug.print x
End Sub
Function MyFunction() As String
'Do Stuff
MyFunction = "Test"
End Function
2)您提供的代码不会因为原因1而编译,也因为您已使用“结束函数”而不是结束子结束Sub。尝试运行代码,您将收到错误消息。然后,您可以研究错误消息并尝试修复它。此外,如果您没有收到错误消息,您可以单步执行代码以确保它按照您的预期方式运行。
3)第一行不起作用。您需要使用文件的ENTIRE路径,即使它与您当前打开的文件位于同一文件夹中。有一些方法可以获取您当前打开的文件的目录(谷歌肯定会向您显示许多文件),您可以将文件名附加到您已打开的文件的目录中。
4)你想要一个循环,但你还没有放入任何循环结构。 Google“Excel VBA循环访问单元格”,您可以找到许多可供使用的示例。
5)我认为你遇到的最大问题是你不知所措,因为你试图一次性完成所有事情。我建议一次解决一个问题,然后将代码放在一起。例如,您要打开两个文件。首先编写代码来打开一个文件。然后尝试从文件中获取一个值到打开的工作簿中。然后打开另一个文件。然后从该文件中获取数据。然后测试循环当前工作簿中的单元格并检查所需的条件并粘贴结果(如果匹配)。然后将所有这些内容组合成一致的代码。
没有人在他们第一次尝试时编写有效的代码,所以即使你最终得到的代码效率很高,你也会学到很多并且有所作为。即使是有经验的程序员也可能会陷入困境或编写无法在第一次甚至是第十次运行的代码。如果您遇到问题,请询问有关您无法解决的特定错误消息或特定问题的特定问题。