2009-07-15 48 views
0

我幾乎讓我的代碼工作,但它仍然有兩個錯誤(無論如何,兩件大事)。如何使循環中的絕對單元格參考工作和跳過循環中的列?

1)絕對細胞參考。不能像Excel那樣工作。我想要例如$ A5,而不是更改爲A6 A7等,它在整個循環中保持A5。

2)有第三列,我需要跳過。我只需要將我的循環寫入VOL和CAP下的列,而不是%UTIL。我如何告訴我的循環跳過$ UTIL?

alt text http://i27.tinypic.com/2dig8hu.jpg

Option Explicit 
Dim myRange As Range 

Function numberOfRows() As Integer 
    Debug.Print ("Start test") 

    ThisWorkbook.Worksheets("LCI").Range("A9").Select 

    Set myRange = Range(Selection, Selection.End(xlDown)) 

    Debug.Print ("Rows: " & myRange.Rows.Count) 

    numberOfRows = (myRange.Rows.Count) 
End Function 

Function numberOfColumns() As Integer 
    Debug.Print ("Start test") 

    ThisWorkbook.Worksheets("LCI").Range("B8").Select 

    Set myRange = Range(Selection, Selection.End(xlToRight)) 

    Debug.Print ("Columns: " & myRange.Columns.Count) 

    numberOfColumns = (myRange.Columns.Count) 
End Function 

Sub TieOut(ByVal numberOfRows As Integer, ByVal numberOfColumns As Integer) 
    Dim i As Integer 'i is row 
    Dim j As Integer 'j is column 

    For i = 1 To numberOfRows 'Loop over rows 
     For j = 1 + 2 To numberOfColumns 'Loop over columns 
     ThisWorkbook.Worksheets("Loop").Select 
      With ThisWorkbook.Worksheets("Loop") 
       **.Cells(i + 3, j + 1).Value = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!B$2&TEXT(Loop!$A4,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),4)" 
       .Cells(i + 3, j + 2).Value = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!B$2&TEXT(Loop!$A4,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),5)"** 
      End With 
     Next j 
    Next i 
End Sub 

Sub Test() 
    Dim x As Integer 
    Dim y As Integer 
    x = numberOfRows() 
    y = numberOfColumns() 

    Call TieOut(x, y) 
End Sub 

回答

0

你上哪兒去定義它?它是BAS模塊的一部分嗎?

編輯:把選項顯式的作爲BAS模塊的第一行& compile(調試菜單 - >編譯)。
你會看到有編譯錯誤。

從Macro1刪除Dim myRange As Range & Macro2。
將它放在BAS模塊的頂部(顯式選項後)

注意:如果您將變量定義爲SUB的一部分,其他SUB/Functions將無法使用它。對於TieOut使用myRange,它必須在所有SUB可以使用的範圍內定義。

另外,宏1應該首先運行 - 其中值分配給MyRange (即集MyRange = .....)
如果宏1沒有運行,MyRange將持有沒有價值&因此會有運行時錯誤時您的代碼嘗試讀取屬性(MyRange.Rows.Count)。

請花些時間閱讀關於變量的範圍。
變量需要保存一些值,然後再嘗試讀取它。

+0

我的numberOfRows = Macro1返回的數字numberOfColumns = Macro2返回的數字 – Techgirl09 2009-07-15 18:54:28

+0

Define是什麼意思? – Techgirl09 2009-07-15 18:57:52

0

這是學習'範圍'的好例子。您聲明(或創建)一個變量,如您想要創建的範圍。它存在於你所做的宏(或子程序)中。但是,當子過程完成時,變量不再有地方存活並被逐出(從計算機內存中退出)。

不幸的是,你編寫你的宏的方式不會按照你希望工作的方式工作。每當他們到達End Sub時,你的myRanges都會死亡。

另外,當將參數(您的byvals)傳遞給另一個子過程(在本例中爲您的TieOut)時,您必須提供正確數量的參數。你的TieOut程序目前需要兩個。你不能通過一個,然後通過另一個。正確的方法是這個樣子:

Call TieOut(myRange.Rows.Count, myRange.Columns.Count) 

而且你想叫一個名爲TieOut2程序。不知道這是否是一個錯字,但獲取正確的程序名是重要的。

VBA非常強大,值得我學習。你看起來像在抓表面。我肯定會在網上搜索一些VBA教程。注意調用過程,變量聲明和範圍,我保證你將能夠解決你的問題:D