2013-01-10 62 views
0

我已經搜索了問題,發現一些非常接近,但我仍然做錯了什麼。我想在下面的代碼使用變量工作表名稱:在Excel宏中沒有看到變量

Option Explicit 

Dim wrkPro As String 
Dim wrkFFIS As String 

Sub MainLoop() 
'************************************************************************************************************************* 
'* 
'************************************************************************************************************************* 
    Dim FFISno As Range   '* Admustments 
    Dim ProTracksno As Range '* Contracts 
    Dim FFISnx As String  '* Corrected Contract Number 
    Dim PTdte As Date 
    Dim FFISdte As Date 
    Dim orow As Integer 
    Dim frow As Integer 
    Dim prow As Integer 
    Dim rngRange As Range 

    orow = 2     '* Output Row 
    frow = 2     '* FFIS Row 
    prow = 7     '* ProTracks Row 

    '* Set Worksheet for input ... 
    wrkPro = CStr(Sheets("SysCtrl").Cells(4, 2).Value) & "ProTracts" 
    wrkFFIS = CStr(Sheets("SysCtrl").Cells(4, 2).Value) & "FFIS" 

    '* Clear the Recap Sheet 
    Sheets("Recap").Range("A2, B5000").ClearContents 
    '* Sheets("Recap").Rows(CStr(orow) & ":" & CStr(Worksheets("Recap").Cells(Rows.Count, 1).End(xlUp).Row)).ClearContents 
    '* Sheets("Recap").Cells(1, 1).Select 

BeginLoop: 
    '* Do until EOF on ProTracks Table 
    Do While Sheets(wrkPro).Cells(prow, 7) <> "" And Sheets(wrkFFIS).Cells(frow, 4) <> "" 

當我運行它,我得到的下標超出範圍的錯誤。我已經檢查過,變量中有正確的值,但它並沒有在Do While中用作字符串。

我嘗試在字符串前後添加Char(34),並將Dim設置爲Public,如其他帖子中所建議的,但沒有喜悅。

任何建議,將不勝感激。

卡特

+0

在一個體面的一瞥代碼喜歡在你是如何想獲得SHEETNAME條款固體。我會做一個測試來確保'wrkPro/wrkFFIS'變量的sheetname完全像工作簿中的sheetname一樣。因此,在爲每個位置設置字符串「debug.print wrkPro」和「debug.print wrkFFIS」並確保其名稱存在於您的WB中之後。另外,請嘗試刪除'Cstr'包裝? –

+0

嘗試調試您的代碼:在以wrkPro =開頭的行中設置一個斷點(在此行中按F9),然後運行代碼。一旦它停在這裏,你可以用F8逐行執行。在即時窗口(Ctrl-G)中,你可以檢查你的變量('Debug.Print wrkPro',在Locals窗口(View-> Locals)中,你可以直接看到它。確保wrkPro'的內容完全匹配您的工作表名稱 - 您可以使用'Debug.Print Sheet1.Name = wrkPro'進行檢查 - 只需使用工作表的代碼名稱替換'Sheet1' - 您可以在左側列表中的VBA編輯器中看到此內容 –

回答

0

嘗試使用工作表(wrkPro).Cells,而不是你表(wrkPro).Cells - 表()引用由指數,即整數,例如片表單(1).Cells etc. 工作表(wrkPro).Cells字符串變量作爲名稱應該是可接受的。

+1

這看起來不像(「String」)存在,並且工作正常。 – KekuSemau

+0

@KekuSemau也許你是對的,但是'Sub test()表(「1」)。Range(「A1」)。Select End Sub'返回**下標超出範圍錯誤**,而'Sheets(1).'編譯得很好。Excel 2007 - 以防萬一。 –

+2

是的,字符串參數必須是工作表的_name_。 – KekuSemau

0

改變這一行:

Sheets("Recap").Range("A2, B5000").ClearContents 

這樣:

Sheets("Recap").Range("A2:B5000").ClearContents