我写了一个宏,提示用户输入一个名字,然后输入一个数字。这用于填充标题行之后的列G中的前3个单元格。我真正需要宏做的是对接下来的3行重复这个,但是添加10用户输入的数字。
Sub Set_Tag()
Dim Tag, TagName As String
Dim x, TagNum As Integer
TagName = InputBox("What is the product tag name? Ex. Apple", "Tag Name")
TagNum = InputBox("What is the first product tag #? Ex. 500", "Tag #")
Tag = TagName & "_" & TagNum
x = Application.WorksheetFunction.CountIf(Range("J:J"), " ")
ActiveSheet.Range("G2").Value = TagName & "_" & TagNum
ActiveSheet.Range("G3").Value = TagName & "_" & TagNum & "_T"
ActiveSheet.Range("G4").Value = TagName & "_" & TagNum & "_NE"
End Sub
因此,如果用户在两个提示中输入示例Apple
和500
,则单元格G2-G4将变为:
Apple_100
Apple_100_T
Apple_100_NE
下一步是重复这一过程,直到它到达第x行(总是3的倍数)。因此,如果x计数9行,则单元格G2-10中的值应为:
Apple_100
Apple_100_T
Apple_100_NE
Apple_110
Apple_110_T
Apple_110_NE
Apple_120
Apple_120_T
Apple_120_NE
如何改进我的宏来实现这一目标?谢谢!
答案 0 :(得分:1)
用这些替换底部的三行:
With ActiveSheet.Range("G2")
For i = 1 To x Step 3
.Item(i + 0) = TagName & "_" & TagNum + k
.Item(i + 1) = TagName & "_" & TagNum + k & "_T"
.Item(i + 2) = TagName & "_" & TagNum + k & "_NE"
k = k + 10
Next
End With
和..
在顶部添加此行:
Dim i As Long, k As Long
就是这样。
注意:除此之外,你应该纠正你的Dim陈述。例如,Dim Tag, TagName As String
指示VBA Tag
是Variant类型而不是String。同样适用于x
。您的代码使x
成为Variant,而不是整数。最后,没有令人信服的理由在这里使用Integers。相反,你应该使用Longs。 VBA针对Longs进行了优化。