2017-08-03 48 views
2

我想爲第二個工作簿上的工作表設置一個變量(在最後一行上刪除一個對象錯誤,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") 

我試着引用活動工作表,沒有運氣和工作表/工作簿組合其他引用的主機。您的意見非常感謝。

更新:坦克輸入的傢伙。我已將表單更改爲聲明部分中的表單,並在設置變量表之前打開工作簿。

回答

1

當您打開工作簿並使用它創建工作表對象時,應該設置工作簿對象。

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

而不是玩弄名稱和使用PathOnly變量,只需使用ThisWorkbook.Path方法。更快,更容易,也消除了錯誤的可能性。 也許你在PathOnly變量的末尾已經有一個反斜槓,所以你的stam變量看起來像這樣 - 「workbook_path \\ Stambestand.xlsm」,這可能是你的問題的原因。

嘗試

stam = ThisWorkbook.Path & "\" & StBestand 
1

您需要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