为一个工作簿中的另一个工作簿分配名称

时间:2020-01-21 06:44:59

标签: excel vba

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并且第二个工作簿中的名称没有更改时,我会收到错误消息。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

ws已被代码中的这一行定义为工作表对象。

Set ws = SummaryWb.Worksheets(wss(i, 1))

设置好之后,就不必再包含工作簿引用了,因为它已经被设置了。这样,将下一行更新为此:

Set rng2 = ws.Range(tbrange(i, 1))

关于VBA编码的其他参考,有很多可用的选项。

Here is one example

根据您要在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