Private Sub XXXX_Click()
Dim rng As Range
Dim rng2 As Range
Dim SummaryWb As Workbook
Dim ws As Worksheet
Dim tba As Variant
Dim wss As Variant
Dim tbrange As Variant
Dim myRangeName As String
wss = ThisWorkbook.Worksheets("ORSA").Range("G2:G10")
tbrange = ThisWorkbook.Worksheets("ORSA").Range("J2:J10")
tba = ThisWorkbook.Worksheets("ORSA").Range("C2:C10")
Set SummaryWb = Workbooks.Open("xxxxxx.xlsx")
For i = 1 To UBound(tba)
Set ws = SummaryWb.Worksheets(wss(i, 1))
Set rng2 = SummaryWb.ws.Range(tbrange(i, 1))
myRangeName = tba(i, 1)
SummaryWb.Names.Add Name:=myRangeName, RefersTo:=rng2
Next i
您好,这是我的代码。我尝试将名称分配给范围。我有两个工作簿。 workbook1在SummaryWb(这是第二个工作簿)中具有范围名称,用于分配名称的范围和工作表名称。这是一个示例:
1)wss是一个变量变量,用于存储工作表的名称,例如Sheet1a
2)tbrange是一个变量变量,它存储我要分配名称的范围,例如fe“ A12:B25” ---->请注意,这些范围在SummaryWb中
3)tba是一个变量变量,用于存储我不会分配的范围名称,例如RangeName1
我的代码不起作用。我不知道为什么当我尝试设置rng2并且第二个工作簿中的名称没有更改时,我会收到错误消息。
我该怎么办?
答案 0 :(得分:0)
ws
已被代码中的这一行定义为工作表对象。
Set ws = SummaryWb.Worksheets(wss(i, 1))
设置好之后,就不必再包含工作簿引用了,因为它已经被设置了。这样,将下一行更新为此:
Set rng2 = ws.Range(tbrange(i, 1))
关于VBA编码的其他参考,有很多可用的选项。
根据您要在Google上尝试做的事情查找具体示例,并在搜索框中添加StackOverflow
,以获得最佳效果。
答案 1 :(得分:0)
我相信这段代码可以实现您的预期。请尝试。
Private Sub XXXX_Click()
Dim Wb As Workbook
Dim WsNames As Variant
Dim RngAddresses As Variant
Dim Nnames As Variant
Dim i As Long
Dim myRangeName As String
Dim Target As String
' Set Wb = Workbooks.Open("xxxxxx.xlsx")
With ThisWorkbook.Worksheets("ORSA")
Nnames = .Range("C2:C10").Value
WsNames = .Range("G2:G10").Value
RngAddresses = .Range("J2:J10").Value
End With
For i = 1 To UBound(Nnames)
myRangeName = Trim(Nnames(i, 1))
Target = "'" & WsNames(i, 1) & "'!" & Range(RngAddresses(i, 1)).Address
On Error Resume Next
Wb.Names.Add Name:=myRangeName, RefersTo:=Target
If Err Then
MsgBox "Name: " & myRangeName & vbCr & _
"RefersTo: " & Target & vbCr & _
"Error: " & Err.Number & _
Err.Description
End If
Next i
End Sub