VBA.范围("Can a formula go here?")
VBA .range("Can a formula go here?")
我的最终目标是让用户 select 从下拉列表中复制他们想要复制的范围,然后在单击 "add" 按钮后,它将粘贴到 sheet.
我的范围以 WorkSheet_RangeName 的方式命名,因此例如 "Oil Furnace" 的部分将具有 "DataInput_OilFurnace" 的命名范围。因此,我所有的范围都将以 "DataInput_" 开头,并且需要删除空格。
Sub AddExtraSection()
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim addSection As Range
Set copySheet = Worksheets("Data Input")
Set pasteSheet = Worksheets("Add Extra Section")
Set addSection = Worksheets("Add Extra Section").Range("C3").Formula = _
"=""DataInput_""&SUBSTITUTE($C, "" "", """")"
copySheet.range(addSection).Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
End Sub
如果我不能使用公式,我能否将范围名称设为特定单元格(例如,我的下拉列表下方有一个公式,其中填充了范围名称)?
Set addSection = Worksheets("Add Extra Section").ActiveCell.Offset(1, 0).Formula = "=INDIRECT($C)"
我是 VBA 的新手,所以如果所有这些看起来像是胡乱拼凑的猜测...那是因为它是!感谢您提供的所有帮助!
编辑 - 解决方案
a.k.a 范围内不能有公式,我需要修复我的 set addSection
Sub AddExtraSection()
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim addSection As range
Set copySheet = Worksheets("Data Input")
Set pasteSheet = Worksheets("Add Extra Section")
Set addSection = copySheet.range("C3")
addSection.Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!C3,"" "","""")"
copySheet.range(addSection).Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
End Sub
您遇到错误了吗?我认为您的 pasteSheet.Cells(...
行可能会引发错误。看看你是如何在 .Cells()
之前添加 sheet 名称的?您也应该始终使用 Rows()
和 Columns()
来执行此操作,因此该行将是:pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
。
还有,你不能mySheet.Range([formula])
。那需要打破。你反而想做
Set addSection = Worksheets("Add Extra Section").Range("C3")
addSection.Formula = "=""DataInput_""&SUBSTITUTE($C, "" "", """")"
我认为应该为你做。另外一个快速说明,如果你正在做 PasteSpecial
只是为了粘贴值,稍微更快的方法是将范围设置为彼此相等,从而避免使用剪贴板:
Range([destination range]).Value = Range([range to copy]).Value
所以,试试这个:
Sub AddExtraSection()
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim addSection As Range
Set copySheet = Worksheets("Data Input")
Set pasteSheet = Worksheets("Add Extra Section")
Set addSection = pasteSheet.Range("C3")
addSection.Formula = "=""DataInput_""&SUBSTITUTE($C, "" "", """")"
pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = addSection.Value
End Sub
编辑:根据下面的评论,我们可以收紧代码并使其更加清晰。
Sub AddExtraSection()
Dim pasteSheet As Worksheet
Set pasteSheet = Worksheets("Add Extra Section")
'Next line will put "DataInput_[RANGE NAME]" in cell C3 of "Data Input" worksheet
Worksheets("Data Input").Range("C3").Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!$C, "" "", """")"
pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = _
Worksheets("Data Input").Range("C3").Value
End Sub
我们从未真正使用过 copySheet
,所以我删除了它。另外,除非你打算扩展这个宏,否则 pasteSheet
和 addSection
会增加混乱,所以我尽量保持简单。
在您的数据输入 sheet 上,我们想要获取单元格 C3 中列出的命名范围。
命名范围列在 "Add Extra Section" sheet 单元格 C3 中。获取该字符串并删除空格。然后,将 "DataInput_" 添加到开头。这就是 ...Formula =
行的作用。 (从后面看公式,Excel会先把空格替换掉,然后再和"DataInput_"拼接)。
最后,将 "DataInput_[NAMED RANGE]" 字符串放入 "Add Extra Section" 的最后一行 +1。
Edit2:抱歉,但考虑到这一点,更好的方法是避免使用工作sheet,并在 VBA 本身中完成工作:
Sub updateNamedRange()
Dim destinationCell As Range, inputCell As Range
Set destinationCell = Worksheets("Add Extra Section").Cells(Worksheets("Add Extra Section").Rows.Count, 1).End(xlUp).Offset(1, 0)
Set inputCell = Worksheets("Add Extra Section").Cells(3, 3)
destinationCell.Value = "DataInput_" & WorksheetFunction.Substitute(inputCell, " ", "")
End Sub
我的最终目标是让用户 select 从下拉列表中复制他们想要复制的范围,然后在单击 "add" 按钮后,它将粘贴到 sheet.
我的范围以 WorkSheet_RangeName 的方式命名,因此例如 "Oil Furnace" 的部分将具有 "DataInput_OilFurnace" 的命名范围。因此,我所有的范围都将以 "DataInput_" 开头,并且需要删除空格。
Sub AddExtraSection()
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim addSection As Range
Set copySheet = Worksheets("Data Input")
Set pasteSheet = Worksheets("Add Extra Section")
Set addSection = Worksheets("Add Extra Section").Range("C3").Formula = _
"=""DataInput_""&SUBSTITUTE($C, "" "", """")"
copySheet.range(addSection).Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
End Sub
如果我不能使用公式,我能否将范围名称设为特定单元格(例如,我的下拉列表下方有一个公式,其中填充了范围名称)?
Set addSection = Worksheets("Add Extra Section").ActiveCell.Offset(1, 0).Formula = "=INDIRECT($C)"
我是 VBA 的新手,所以如果所有这些看起来像是胡乱拼凑的猜测...那是因为它是!感谢您提供的所有帮助!
编辑 - 解决方案
a.k.a 范围内不能有公式,我需要修复我的 set addSection
Sub AddExtraSection()
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim addSection As range
Set copySheet = Worksheets("Data Input")
Set pasteSheet = Worksheets("Add Extra Section")
Set addSection = copySheet.range("C3")
addSection.Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!C3,"" "","""")"
copySheet.range(addSection).Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
End Sub
您遇到错误了吗?我认为您的 pasteSheet.Cells(...
行可能会引发错误。看看你是如何在 .Cells()
之前添加 sheet 名称的?您也应该始终使用 Rows()
和 Columns()
来执行此操作,因此该行将是:pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
。
还有,你不能mySheet.Range([formula])
。那需要打破。你反而想做
Set addSection = Worksheets("Add Extra Section").Range("C3")
addSection.Formula = "=""DataInput_""&SUBSTITUTE($C, "" "", """")"
我认为应该为你做。另外一个快速说明,如果你正在做 PasteSpecial
只是为了粘贴值,稍微更快的方法是将范围设置为彼此相等,从而避免使用剪贴板:
Range([destination range]).Value = Range([range to copy]).Value
所以,试试这个:
Sub AddExtraSection()
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim addSection As Range
Set copySheet = Worksheets("Data Input")
Set pasteSheet = Worksheets("Add Extra Section")
Set addSection = pasteSheet.Range("C3")
addSection.Formula = "=""DataInput_""&SUBSTITUTE($C, "" "", """")"
pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = addSection.Value
End Sub
编辑:根据下面的评论,我们可以收紧代码并使其更加清晰。
Sub AddExtraSection()
Dim pasteSheet As Worksheet
Set pasteSheet = Worksheets("Add Extra Section")
'Next line will put "DataInput_[RANGE NAME]" in cell C3 of "Data Input" worksheet
Worksheets("Data Input").Range("C3").Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!$C, "" "", """")"
pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = _
Worksheets("Data Input").Range("C3").Value
End Sub
我们从未真正使用过 copySheet
,所以我删除了它。另外,除非你打算扩展这个宏,否则 pasteSheet
和 addSection
会增加混乱,所以我尽量保持简单。
在您的数据输入 sheet 上,我们想要获取单元格 C3 中列出的命名范围。
命名范围列在 "Add Extra Section" sheet 单元格 C3 中。获取该字符串并删除空格。然后,将 "DataInput_" 添加到开头。这就是 ...Formula =
行的作用。 (从后面看公式,Excel会先把空格替换掉,然后再和"DataInput_"拼接)。
最后,将 "DataInput_[NAMED RANGE]" 字符串放入 "Add Extra Section" 的最后一行 +1。
Edit2:抱歉,但考虑到这一点,更好的方法是避免使用工作sheet,并在 VBA 本身中完成工作:
Sub updateNamedRange()
Dim destinationCell As Range, inputCell As Range
Set destinationCell = Worksheets("Add Extra Section").Cells(Worksheets("Add Extra Section").Rows.Count, 1).End(xlUp).Offset(1, 0)
Set inputCell = Worksheets("Add Extra Section").Cells(3, 3)
destinationCell.Value = "DataInput_" & WorksheetFunction.Substitute(inputCell, " ", "")
End Sub