vba设置wksheet变量

问题描述:

我想为第二个工作簿上的工作表设置一个变量(在最后一行上删除一个对象错误,stamWs)。我已经有两个工作簿的变量。我的代码如下:vba设置wksheet变量

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") 

我试着引用活动工作表,没有运气和工作表/工作簿组合其他引用的主机。您的意见非常感谢。

更新:坦克输入的家伙。我已将表单更改为声明部分中的表单,并在设置变量表之前打开工作簿。

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

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

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

尝试

stam = ThisWorkbook.Path & "\" & StBestand 

您需要Worksheet类型不Worksheets

Dim ijkWs, stamWs As Worksheet 

但这里仅unintuitively如果stamWsWorksheet的,而不是总是使用形式:

Dim ijkWs As Worksheet, stamWs As Worksheet. 

这适用于所有Dim秒。

您需要存储在工作簿打开,然后拿到表,stam只是一个所以没有属性,以便stam.Sheets是不正确的。

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

我还以为你改变为:

stam = PathOnly & StBestand 
comp = PathOnly & Competenties 

否则你会得到一个双\的,如果当前本书不是在任何地方保存了无效的路径。

+0

感谢您的帮助。你的anwser也很有用。不过,我只能将一个标记为可接受的答案。 – MyName