【发布时间】:2015-11-24 16:20:15
【问题描述】:
我知道关于这个主题有很多问题,但我仍在为超出范围的下标而苦苦挣扎?是的,我正在导入的工作簿确实有一张名为LSL Recon 的工作表,我已验证。我已调试并将LSL Recon 替换为Import Sheets(1)(如Sheet1),然后该过程会继续进行一点,但不会将任何内容导入数组。
Option Explicit
Public FILENAME, c_DATE, cNAME As String
'Public ws As Worksheet
Sub main()
Application.DisplayAlerts = True
Application.ScreenUpdating = False
CLEAR
Import Sheets("LSL Recon")
Display_Import
End Sub()
Sub Import(ws As Worksheet)
Workbooks.Open FILENAME
Set TempBook = ActiveWorkbook
ws.Activate
cNAME = "Entity"
cA = Sheets(1).Rows.Find(What:=UCase(cNAME), LookAt:=xlWhole, SearchDirection:=xlNext).Column
cNAME = "Sector"
cB = Sheets(1).Rows.Find(What:=UCase(cNAME), LookAt:=xlWhole, SearchDirection:=xlNext).Column
cNAME = "Date"
cC = Sheets(1).Rows.Find(What:=UCase(cNAME), LookAt:=xlWhole, SearchDirection:=xlNext).Column
cNAME = "Client"
cD = Sheets(1).Rows.Find(What:=UCase(cNAME), LookAt:=xlWhole, SearchDirection:=xlNext).Column
...
End Sub()
有用的问题:
VBA: Calling a sub on another worksheet with multiple arguments
pass sheet to a function (excel vba)
Passing a Worksheet to a subroutine
【问题讨论】:
-
您试图在活动工作簿中引用名为“LSL Recon”的工作表,而不是在您将要打开的工作簿中。如果您尝试引用即将打开的工作簿中的工作表,则必须将工作表 name 作为字符串参数传递。
-
进一步了解@Rory 所说的,如果您将名称作为字符串传递,您仍然需要在 sub 中设置工作表 ... 就像
Set ws = TempBook.Sheets(sName)假设 sName 是您传递给子的字符串,而不是 ws As Worksheet