我正在使用一个子过程在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
然而,这也行不通。我做错了什么?
答案 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)
在您的测试示例中,您使用的是wb
和ws
个对象,而不是它们的名称。试试这个:
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