vba 设置工作表变量

vba setting wksheet variable

我正在尝试为第二个工作簿上的工作sheet设置一个变量(在最后一行上抛出一个对象错误,stamWs)。我已经为两个工作簿设置了一个变量。我的代码如下所示:

Option Explicit

Sub Kopie()

Application.ScreenUpdating = False

Const StBestand = "Stambestand.xlsm"
Const Competenties = "Competenties.xlsx"

Dim stam, comp As String
Dim PathOnly, ijk, FileOnly As String
Dim ijkWs, stamWs As Worksheets

ijk = ThisWorkbook.FullName
FileOnly = ThisWorkbook.Name
PathOnly = Left(ijk, Len(ijk) - Len(FileOnly))
stam = PathOnly & "\" & StBestand
comp = PathOnly & "\" & Competenties
Set ijkWs = ActiveSheet

    Workbooks.Open stam
Set stamWs = stam.Sheets("stambestand")

我试过引用活跃的工作sheet,但没有成功,还有许多其他引用 worksheets/workbook 组合。非常感谢您的意见。

更新:输入人员的坦克。我在声明部分将 sheets 更改为 sheet 并在设置变量 sheet.

之前打开了工作簿

与其使用名称和使用 PathOnly 变量,不如使用 ThisWorkbook.Path 方法。更快更容易,也消除了出错的可能性。 可能你已经在 PathOnly 变量的末尾有一个反斜杠,所以你的 stam 变量看起来像这样 - "workbook_path\Stambestand.xlsm" 这可能是你的问题的原因。

尝试

stam = ThisWorkbook.Path & "\" & StBestand 

您需要 Worksheet 类型而不是 Worksheets

Dim ijkWs, stamWs As Worksheet

但这里不直观地只有 stamWs 如果类型 Worksheet,而不是总是使用形式:

Dim ijkWs As Worksheet, stamWs As Worksheet.

这适用于您所有的 Dims。

您需要存储打开的工作簿,然后获取 sheet,stam 只是一个 字符串 ,因此没有属性,因此 stam.Sheets不正确。

Dim wb As Workbook
Set wb = Workbooks.Open(stam)
Set stamWs = wb.Sheets("stambestand")

我也觉得你改成:

stam = PathOnly & StBestand
comp = PathOnly & Competenties

否则,如果当前书籍未保存在任何地方,您将得到双重 \ 无效路径。

您应该在打开工作簿时设置工作簿对象,并使用它来创建工作表对象。

Dim newWB as WorkBook
Set newWB = Workbooks.Open(stam)
Set stamWs = newWB.WorkSheets("stambestand")