2015-03-13 33 views
0

這讓我很頭疼。我找不到我做錯了什麼。我希望這只是一個隧道視野的案例。 我遇到錯誤信息「對象變量或帶塊變量未SET- 1」無法將工作簿變量設置爲ActiveWorkbook

Option Explicit: 
Public mWB As Workbook 
Public Sub runCSSBatch() 
    On Error GoTo Errorcatch 

1 mWB = ActiveWorkbook 
    Call createTempSheet 
    Call findworksheet 

    Errorcatch: 
    MsgBox Err.Description & "-" & Erl 
    Application.DisplayAlerts = False 
    mWB.Sheets("TEMP").Delete 
    Application.DisplayAlerts = True 

End Sub 
+5

使用「Set mWB = ActiveWorkbook」 – 2015-03-13 10:39:58

+0

仍然收到與Set mWB = ActiveWorkbook相同的錯誤。但是這次TEMP工作表會被創建並隨後被刪除。所以有些不同。 :/ – WouldBeNerd 2015-03-13 10:41:25

+1

mWB前面有什麼? – 2015-03-13 10:42:24

回答

1

相反ActiveWorkbook的,它可能是,的ThisWorkbook

set mwb=thisworkbook 
+1

無需更改'ActiveWorkbook'。這裏的關鍵點是'Set'關鍵字,如'Set mWB = ActiveWorkbook' – 2015-03-13 11:33:53

0

我終於找到很多事情錯了我腳本。

  • 我也結束了在ActiveWorkbook前使用設置(使用的ThisWorkbook 是沒有必要的)
  • 我相信有關使用1註釋:不是1捕獲錯誤 是有效的。
  • 我現在正在運行的腳本比以前少了幾個子,比我以前的 。
  • 我也做了使用電池()範圍內的錯誤,當一個 排除其他
  • 我試圖到工作表變量傳遞給一個Sub(顯然你不能 做到這一點),()。
  • 我確定有更多,但我不記得。

我要把它記錄下來,過了一個糟糕的一天。 :/ 正如你可以看到下面的代碼看起來沒有像我最初發布的內容。

Option Explicit: 
Public mWB As Workbook 
Public Sub runCSSBatch() 
    Set mWB = ActiveWorkbook 
    mWB.Sheets.Add.Name = "TEMP" 
    Dim WSh As Worksheet 
    For Each WSh In mWB.Worksheets 
     If InStr(WSh.Name, "CSS") = 1 Then 
      Call parseRowText(WSh.Name) 
     End If 
    Next 
End Sub 
Private Sub parseRowText(WSName As String) 
Dim rowCount As Long 
Dim I As Long 
Dim columnCount As Long 
Dim B As Long 
Dim dataString As String 
Dim WS As Worksheet 
Set WS = mWB.Worksheets(WSName) 

columnCount = mWB.Sheets(WSName).UsedRange.Columns.Count 
rowCount = mWB.Sheets(WSName).UsedRange.Rows.Count 

For I = 2 To rowCount 
    For B = 1 To columnCount 
     dataString = "" 
     If mWB.Sheets(WSName).Cells(1, B).Value = "STOP" Then 
      dataString = "}" 
      Call addToTempSheet(dataString) 
      Exit For 
     Else 
     If B = 1 Then 
      dataString = mWB.Sheets(WSName).Cells(I, B).Value & "{" 
      Call addToTempSheet(dataString) 
     Else 
      If dataString & mWB.Sheets(WSName).Cells(I, B).Value = "" Then 
      Else 
       dataString = mWB.Sheets(WSName).Cells(1, B).Value & ":" 
       dataString = dataString & mWB.Sheets(WSName).Cells(I, B).Value & ";" 
       Call addToTempSheet(dataString) 
      End If 
     End If 
     End If 
    Next B 
Next I 
End Sub 
Private Sub addToTempSheet(dString As String) 
    mWB.Sheets("TEMP").Range("A" & Rows.Count).End(xlUp).Offset(1).Value = dString 
End Sub 
+0

您絕對可以將工作表傳遞給Sub! 'Test(ThisSheet)'調用的Sub Test(MySheet as Worksheet)End''(假設'ThisSheet'已經被正確設置爲工作表)每次都有效。 – FreeMan 2015-03-13 18:25:49

+0

另外,你可以在'Range()'中使用'Cells()'。我現在正在處理一些代碼'NewSheet.Range(Cells(1,1),Cells(NewSheet.UsedRange.Row,NewSheet.UsedRange.Column))' – FreeMan 2015-03-13 18:27:07