0

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

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

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

4

3 回答 3

1

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

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
于 2013-08-23T14:26:40.220 回答
1

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

改变这个:

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

对此:

ws.Range("A1").Value = ws.Range("A1").Value
于 2013-08-23T14:24:18.913 回答
1

在第一个 Stuff 中,一旦 ws 被设置,使用:something = ws.Range("A1").Value

你不需要 wb.ws

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

于 2013-08-23T14:24:48.727 回答