存储工作表名称以在另一个子中使用

时间:2013-08-23 13:48:04

标签: variables excel-vba public vba excel

我正在使用一个子过程在Public变量中存储文件路径/工作簿和工作表,然后可以通过模块中的其他子过程访问它们。以下是一些示例代码:

Public myfp As String
Public mywb As Workbook
Public myws As Worksheet

Sub FilePaths()
    myfp = Application.GetOpenFileName(Title:="Please select the file.")
    Set mywb = Workbooks.Open(myfp, 0)
    If Left(mywb.Sheets(1).Name, 2) = "01" Then
        Set myws = mywb.Sheets(1)
    Else
        Set myws = mywb.Sheets(2)
    End If
    mywb.Saved = True
    mywb.Close
Exit Sub

Sub Stuff()
    Dim wb As WorkBook
    Dim ws As Worksheet
    Set wb = ActiveWorkbook
    Set ws = wb.Sheets(1)
    ws.Range("A1").Value = wb.ws.Range("A1").Value
End Sub

所以我的第一个子确定我需要哪张纸,而我的第二张子应该将这张纸张的值放入我的纸张中。但我得到的只是错误。我想这可能是因为我必须打开文件,所以我尝试了一些我知道应该工作的东西:

SUb Stuff()
    Range("A1").Formula = "='[" & myfp & "]" & myws & "'!A1"
End Sub

然而,这也行不通。我做错了什么?

3 个答案:

答案 0 :(得分:1)

wb对象前面删除ws限定符。

改变这个:

ws.Range("A1").Value = wb.ws.Range("A1").Value

对此:

ws.Range("A1").Value = ws.Range("A1").Value

答案 1 :(得分:1)

在第一个Stuff中,一旦设置了ws,使用: something = ws.Range(“A1”)。值

你不需要wb.ws

在第二个Stuff中,您需要在创建公式 myws.Name 而不是 myws 时使用字符串变量。

答案 2 :(得分:1)

在您的测试示例中,您使用的是wbws个对象,而不是它们的名称。试试这个:

Public myfp As String
Public myWbName As String
Public myWsName As String

Sub FilePaths()
Dim myWb As Workbook

myfp = Application.GetOpenFilename(Title:="Please select the file.")
Set myWb = Workbooks.Open(myfp, 0)
myWbName = myWb.Name
If Left(myWb.Sheets(1).Name, 2) = "01" Then
    myWsName = myWb.Sheets(1)
Else
    myWsName = myWb.Sheets(2).Name
End If
myWb.Saved = True
myWb.Close
End Sub

Sub Stuff()
    Range("A1").Formula = "='[" & myfp & "]" & myWsName & "'!A1"
End Sub