2013-02-18 175 views
2

我是的新手,雖然它非常簡單,但我無法做到自己想做的事情。使用VBA函數中的單元格值與變量

我需要自動修改大(333x333)空(滿零)電子表格的單元格。

在單獨的電子表格中,我有要修改的所有單元格的行和列。 (其中5000)

A for循環似乎適合於此目的。

這是我的宏代碼。問題出現在最後一行之前的行中。

Dim val1 As String, val2 As String, i As Integer 

For i = 1 To 333 

    Sheets("Feuil2").Activate 
    ActiveSheet.Cells(i, 1).Select 

    val1 = Cells(i, 1).Value 
    val2 = Cells(i, 2).Value 

Sheets("Classeur2.csv").Select 
Cells(val1, val2).Select 

ActiveCell.FormulaR1C1 = "1" 

Next i 

導致一個問題的線是這個:細胞(VAL1,VAL2)。選擇

我相信我的錯誤是一個語法錯誤。但我無法找到我應該添加什麼之前,之後或我的兩個變量「val1」和「val2」

你覺得呢?

非常感謝您的幫助。 Nicolas。

編輯

我的問題是現在解決:

第一個答案正是我需要我的男性宏觀調控工作的內容。 第二個答案是正確和快速的方式來做到這一點。

回答

3

如果您使用的是VBA,則無需激活或選擇工作表或單元格。你可以直接訪問它。 該代碼:

Dim rng As Range 
For Each rng In Sheets("Feuil2").Range("A1:A333") 
    Sheets("Classeur2.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1" 
Next rng 

產生與喬的代碼相同的結果。

如果由於某些原因需要切換紙張,請在宏的開頭使用Application.ScreenUpdating = False(末尾爲Application.ScreenUpdating=True)。這將消除屏幕閃爍 - 並加快執行速度。

+0

感謝彼得,很高興知道。下次我會試一試。 – 2013-02-20 05:22:46

+0

恩,我非常感謝你!今天,我不得不調整我的宏來考慮5000行。花了20多分鐘才完成了第一批3000線。我知道這是因爲我必須停止宏並嘗試解決方案。我用這20分鐘來了解「範圍」符號。它的速度更快(現在只有一分鐘)。 – 2013-02-22 05:50:17

+0

您可以通過插入'Application.ScreenUpdating = False'和'Application.Calculation = xlCalculationManual'來進一步加速!在宏的末尾,用'Application.ScreenUpdating = False'和'Application.Calculation = xlCalculationAutomatic'重置它::) – 2013-02-22 06:46:44

0

VAL1和VAL2需要以整數形式變暗,而不是字符串,以用作單元格的參數,該單元格將整數而不是字符串作爲參數。

Dim val1 As Integer, val2 As Integer, i As Integer 

For i = 1 To 333 

    Sheets("Feuil2").Activate 
    ActiveSheet.Cells(i, 1).Select 

    val1 = Cells(i, 1).Value 
    val2 = Cells(i, 2).Value 

Sheets("Classeur2.csv").Select 
Cells(val1, val2).Select 

ActiveCell.FormulaR1C1 = "1" 

Next i 
+0

你也可以嘗試這個循環作爲FOR EACH循環。沒有太大的區別,但更容易閱讀。 – Joe 2013-02-18 05:15:53

+0

非常感謝,它按預期工作:) – 2013-02-18 05:20:30

相關問題