Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用宏或VBA创建命名区域,其中名称位于每30行的工作表中_Excel_Vba - Fatal编程技术网

Excel 使用宏或VBA创建命名区域,其中名称位于每30行的工作表中

Excel 使用宏或VBA创建命名区域,其中名称位于每30行的工作表中,excel,vba,Excel,Vba,我有一个宏,每30行创建一个单元格序列,将“源”和“目标”后面的数字每30个单元格增加一个 我想在该宏(如下所列)中添加以下功能:将数字为3,4,5,6的范围命名为“Source033”(不带引号),并将右侧的5x3数组命名为“Target033”(不带引号) 再次运行宏时,将显示相同的结构,但与单词“source”和“target”关联的数字将再次递增1。这是一个宏,它只需每隔30行重新创建一个结构,但将范围的命名留给用户——对于数百次迭代来说,这仍然是一项相当繁琐的任务: source033

我有一个宏,每30行创建一个单元格序列,将“源”和“目标”后面的数字每30个单元格增加一个

我想在该宏(如下所列)中添加以下功能:将数字为3,4,5,6的范围命名为“Source033”(不带引号),并将右侧的5x3数组命名为“Target033”(不带引号)

再次运行宏时,将显示相同的结构,但与单词“source”和“target”关联的数字将再次递增1。这是一个宏,它只需每隔30行重新创建一个结构,但将范围的命名留给用户——对于数百次迭代来说,这仍然是一项相当繁琐的任务:

source033   target033
3 4 5 6

1.0         3.4        5.3 
2.0         4.4        8.1 
3.0         5.4        11.0 
4.0         6.4        13.8 
5.0         7.4        16.7 

谢谢

作为一般经验法则,您应该避免使用
。尽可能选择
选择
。因此,您可以清理现有代码,使其看起来像这样

Sub build_selling_proceeds_sort()
 '
build_selling_proceeds_sort Macro
 '
Keyboard Shortcut: Option+Cmd+b

ActiveCell.Range("A1:AA24").Select
Selection.Copy
ActiveCell.Offset(30, 0).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(2, 2).Range("A1").Select
Application.CutCopyMode = False
Calculate
ActiveCell.Range("A1:J1").Select
End Sub
我不确定要命名为“Source033”和“Target033”的范围将位于何处。所以我会做一些普通的事情

'This range seems large for what you're trying to do, but it's what you had
ActiveCell.Range("A1:AA24").Copy ActiveCell.Offset(30)
Application.CutCopyMode = False
Calculate
Dim sourceRange as Range, targetRange as Range
Set sourceRange = Range("A2")
Set targetRange = Range("A4:C8")
'I assume you've defined some incrementer x as 
'the number of times you've looped this statement
thisWorkbook.Names.Add "Source" + CStr(x), sourceRange
thisWorkbook.Names.Add "Target" + CStr(x), targetRange