2015-09-05 98 views
-1

我想在Excel VBA中插入一個公式到一列單元格中的程序。此公式根據單元格的內容直接向左改變。 這是迄今爲止我所編寫的代碼:我可以在字符串中插入一個變量嗎?

Sub Formula() 
Dim colvar As Integer 
colvar = 1 
Dim Name As String 
Name = "Sample, J." 
Do While colvar <= 26 
    colvar = colvar + 1 
    Name = Range("B" & colvar).Value 
    Range("C" & colvar).Value = "='" & Name & "'!N18" 

Loop 
End Sub 

正如你所看到的,我想插入公式字符串之間的變量Name,但Excel中拒絕運行的代碼,給我一個「應用程序定義或對象定義的錯誤。「

有沒有辦法解決這個問題?

+3

a)您將不得不提供導致錯誤的'Range(「B」&colvar).Value「中的值。 b)下一行應該是'Range(「C」&colvar).FORMULA =「='」&Name&「'!N18」'。 – Jeeped

+1

最有可能的是,當您看到錯誤時,「Name」的內容不是有效的工作表名稱。 –

+0

@Jeeped我還沒有看到,當**寫一個公式給一個單元格時,使用'.Formula'和'.Value'屬性有所不同。顯然它在閱讀公式時會有所作用。你有沒有發生不同結果的例子?我聽說在變體數組中可能存在非美國格式日期的問題,但我沒有測試過。 –

回答

0

如果表格實際上不存在於工作簿中,您將需要進行一些錯誤檢查。

它看起來像循環遍歷具有表名稱列的列B,並希望範圍N18顯示在它旁邊。

喜歡的東西

Sub Button1_Click() 
    Dim Lstrw As Long, rng As Range, c As Range 
    Dim Name As String 

    Lstrw = Cells(Rows.Count, "B").End(xlUp).Row 
    Set rng = Range("B1:B" & Lstrw) 

    For Each c In rng.Cells 
     Name = c 
     c.Offset(, 1) = "='" & Name & "'!N18" 
    Next c 

End Sub 

或者你可以列出表並顯示N18旁邊,運行在一個名爲「工作表Sheet1」

Sub GetTheSh() 
    Dim sh As Worksheet, ws As Worksheet 

    Set ws = Sheets("Sheet1") 

    For Each sh In Sheets 

     If sh.Name <> ws.Name Then 

      ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1) = sh.Name 
      ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(0, 1) = sh.Range("N18") 

     End If 

    Next sh 


End Sub 
0

謝謝大家對錶的代碼你幫幫我!我實際上發現我剛剛犯了一個愚蠢的錯誤:行Do While colvar<=26應該是Do While colvar<26。這些單元格正在填充,但錯誤表現爲一個單元格被一個不存在的對象填充。

我確實決定使用.Formula修飾符而不是.Value。感謝Jeeped提出的建議。

相關問題