gpt4 book ai didi

excel - 从另一个 Sub 调用/引用命名范围

转载 作者:行者123 更新时间:2023-12-04 20:29:03 27 4
gpt4 key购买 nike

我设法从网络上的不同线程和代码示例编写代码。这是反复试验和大量复制粘贴。

我在我的潜艇中定义了几个范围:

Define range names:
X.Sheets("Sheet1").Range("B4").Name = "Type1"
X.Sheets("Sheet1").Range("B9").Name = "SubTotal1"
X.Sheets("Sheet1").Range("A6:F8").Name = "Data1"

X.Sheets("Sheet1").Range("B11").Name = "Type2"
X.Sheets("Sheet1").Range("B16").Name = "SubTotal2"
X.Sheets("Sheet1").Range("A13:F15").Name = "Data2"

X.Sheets("Sheet1").Range("B18").Name = "Type3"
X.Sheets("Sheet1").Range("B23").Name = "SubTotal3"
X.Sheets("Sheet1").Range("A20:F22").Name = "Data3"

Y.Sheets("Sheet1").Range("A4:A6").Name = "Period"
Y.Sheets("Sheet1").Range("B4:B6").Name = "Name"
Y.Sheets("Sheet1").Range("D4:D6").Name = "Code"
Y.Sheets("Sheet1").Range("E4:E6").Name = "Type"
Y.Sheets("Sheet1").Range("F4:K4").Name = "Data"

此名称范围用于每个子(我大约有 15 个,还需要大约 165 个)用于将信息从 Workbook X 复制和插入到 Workbook Y。

由于重复使用代码是多余的,我想将这些 Ranges 放在一个单独的 Sub 中,并在每个新的 Sub 中调用它。

我也想对下面的代码做同样的事情,它指的是上面定义的范围:
'Insert Type1 Data from X:

If X.Sheets("Sheet").Range("SubTotal1").Value > 0 Then
Range("Type1").Copy
Y.Sheets("Sheet1").Range("Type").Insert xlShiftDown
Range("Data1").Copy
Y.Sheets("Sheet1").Range("Data").Insert xlShiftDown

'Insert Period:
X.Sheets("Sheet1").Range("C3").Copy
Y.Sheets("Sheet1").Range("Period").Insert xlShiftDown

'Insert Name:
X.Sheets("Sheet1").Range("C12").Copy
Y.Sheets("Sheet1").Range("Name").Insert xlShiftDown

'Insert Code Type:
X.Sheets("Sheet1").Range("C10").Copy
Y.Sheets("Sheet1").Range("Code").Insert xlShiftDown
End If

这段代码,以及更多类似的 6 个(类型 1-6)在其他 Subs 中也是多余的,所以理想情况下,我会将它放在一个单独的 sub 中,并在必要时调用它。我在 subs 的开头使用它来定义 X 和 Y 表:
Dim X As Workbook
Dim Y As Workbook

'Define workbooks:
Set X = Workbooks.Open("C:\Users\user\Folder\File.xlsx")
Set Y = ThisWorkbook

编辑:为了更好地说明我的意思,我想 Subs 会这样:
Sub Sub1

Call Sub "RangeNames"
Call Sub "Insert Type1 Data while referring to RangeNames"
Call Sub "Insert Type2 Data while referring to RangeNames"

End Sub

和/或
Sub Sub2

Call Sub "RangeNames"
Call Sub "If RangeName 'SubTotal 3' > 0 then Insert Type3 Data while referring to RangeNames"

End Sub

编辑2:

对于@SJR:
Sub Sub1
Dim X As Workbook
Dim Y As Workbook

Set X = Workbooks.Open("C:\Users\user\Folder\File.xlsx")
Set Y = ThisWorkbook

X.Sheets("Sheet1").Range("B4").Name = "Type1"
X.Sheets("Sheet1").Range("B9").Name = "SubTotal1"

Y.Sheets("Sheet1").Range("E4:E6").Name = "Type"

Sub2

End Sub

子 2 是:
Sub Sub2

If X.Sheets("Sheet").Range("SubTotal1").Value > 0 Then <- ERROR HAPPENS HERE
Range("Type1").Copy
Y.Sheets("Sheet1").Range("Type").Insert xlShiftDown

End If

End Sub

最佳答案

你需要的是参数(又名参数)。

例如

Sub CopyAndInsertStuff(sourceLocation as String, destinationLocation as String)

Set wbSrc = Workbooks(sourceLocation)
Set wbDst = Workbooks(destinationLocation)

'Do your copying and inserting logic here...

End Sub

然后通过以下方式调用该函数:
Call CopyAndInsertStuff("C:\path\to\source\File.xlsx", "C:\path\to\destination\File.xlsx")

关于excel - 从另一个 Sub 调用/引用命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53386523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com