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.
这适用于您所有的 Dim
s。
您需要存储打开的工作簿,然后获取 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")
我正在尝试为第二个工作簿上的工作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.
这适用于您所有的 Dim
s。
您需要存储打开的工作簿,然后获取 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")