我录制了一个宏,它能正常工作。问题是它捕获的是绝对单元格,而不是动态单元格。让我解释一下。
我有一个估算页面,我将装置复制到其中。在其中一个单元格中,它将是 A、B 或 C... 等等。当我录制宏时,当我在 A 选项卡上时,它会捕获绝对数据(如 A),但当我加载 B 选项卡时,宏会放入“A”。因此例程如下。我将用粗体显示我需要动态的内容。
Sub FixColumns() ' ' FixColumns Macro '
'
Range("A1").Select
ActiveCell.Offset(1, 15).Range("A1").Select
ActiveCell.FormulaR1C1 = "=Estimating1!R[3]C[-10]"
ActiveCell.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = **"C"**
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A38"), Type:= _
xlFillDefault
ActiveCell.Range("A1:A38").Select
ActiveWindow.SmallScroll Down:=-45
ActiveCell.Offset(0, -14).Range("A1").Select
ActiveCell.FormulaR1C1 = "=Estimating1!R[8]C[3]"
ActiveCell.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = **"His Dressing"**
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A38"), Type:= _
xlFillDefault
ActiveCell.Range("A1:A38").Select
End Sub
因此,在上面的宏中,当我录制宏时,“C”和“His Dressing”是从 C 选项卡中捕获的。因此,当我加载“D”选项卡时,它应该捕获“D”和“His Bath”,但它没有这样做。它记得我加载 C 选项卡时录制宏的时间。因此,在它说的地方ActiveCell.FormulaR1C1-"A"
,我需要它捕获我已加载的任何 A/B/C/D 选项卡。我解释得对吗?在宏中说“A”或“C”或其他什么的地方,需要根据单元格的实际情况动态变化。
这是包含 fixcolumns 宏的文件的链接 包含 fixcolumn 宏的 excel 文件
答案1
我无法访问您链接到的文件,但我建议您查看 Worksheet.Name
以获取工作表的名称(您的说法是选项卡)。
然后您可以使用它从该表的某一列中获取值。
另一方面,你可能只需要使用类似
With ActiveSheet
.Range("A1:A38") = .Name
End With
如果没有原始工作簿可供查看,则很难看清。
不过我想说的是,宏记录器为这种操作生成的代码通常既冗长又难懂,而且通常只用几行编写良好的 VBA 就可以完成相同的操作。
我知道这对您来说似乎是一大步,但网络上有很多关于使用 Excel VBA 的帮助,因此看看您正在做什么并尝试编写适合的代码可能会有所收获。