VBA代码未运行。需要从不同的单元调用字符串来实现功能

时间:2016-03-29 03:11:47

标签: excel vba excel-vba

我无法运行我的代码。请帮忙。我需要在同一工作簿中的不同工作表上调用不同单元格值的字符串。

Sub ll()
    Dim result_range As Range
    Dim tag, stime, filtexp, PIServer, boundarytype As String
    Dim numvals, outcode As Integer
    Dim pi_formula As String
    tag = "Sheets(""Tags"").Range(""A2"")"
    stime = "Sheets(""DATAEXTRACT"").Range(""A7"")"
    numvals = 1
    filtexp = "Sheets(""BatchConditions"").Range(""B23"")"
    PIServer = "SGSitePI"
    Mode = "inside"
    'PINCompFilDat(tag, stime, numvals,filtexp,filtcode,outcode,PIServer ,mode)
    pi_formula = "=PINCompFilDat(" & Chr(34) & tag & Chr(34) & "," & Chr(34) & stime & Chr(34) & "," & _
                    Chr(34) & numvals & Chr(34) & "," & Chr(34) & filtexp & Chr(34) & "," & Chr(34) & fitcode & Chr(34) & "," & _
                    CStr(outcode) & "," & _
                    Chr(34) & PIServer & Chr(34) & "," & _
                    Chr(34) & Mode & Chr(34) & ")"
    Set result_range = Sheets("Sheet2").Range("A3:B3")
    result_range.ClearContents
    result_range.FormulaArray = pi_formula
    result_range.CurrentRegion.Select
    Selection.Columns(1).NumberFormat = "dd-mmm-yyyy hh:mm:ss"
    result_range.Copy
    result_range.PasteSpecial xlPasteValues
End Sub

1 个答案:

答案 0 :(得分:1)

您无法从工作表函数访问Sheets集合。您的pi_formula变量设置为:

=PINCompFilDat("Sheets("Tags").Range("A2")", _
               "Sheets("DATAEXTRACT").Range("A7")","1", _
               "Sheets("BatchConditions").Range("B23")","",0,"SGSitePI","inside")

这不是函数的正确调用约定(甚至非常接近 - 感谢@Jeeped)。

有几个问题。首先,像这样的线......

Dim numvals, outcode As Integer

......不要做你期望的事。 必须输入在同一行上用逗号分隔的每个声明,否则它被视为Variant。它应该是这样的:

Dim numvals As Integer, outcode As Integer

其次,您需要传递的是,而不是范围。我假设tagstimefiltexp应该是Sheets("Tags").Range("A2")Sheets("DATAEXTRACT").Range("A7")Sheets("BatchConditions").Range("B23")中的值。如果是这样,获取值,然后像在工作表上键入它一样构建函数(提示 - Debug.Print pi_formula)。

第三,正如@Jeeped在评论中指出的那样,整数参数numvalsfiltexpoutcode不应该用引号括起来。

最后,你永远不会为fitcode设置一个值(或声明它)。 Mode也未声明。您可以通过在模块顶部键入Option Explicit轻松捕获此类错误。

我最好的猜测是它应该是这样的:

Sub ll()
    Dim result_range As Range
    Dim tag As String, stime As String, filtexp As String
    Dim PIServer As String, boundarytype As String
    Dim numvals As Integer, outcode As Integer, fitcode As Integer
    Dim pi_formula As String, Mode As String

    tag = Sheets("Tags").Range("A2").Value
    stime = Sheets("DATAEXTRACT").Range("A7").Value
    numvals = 1
    filtexp = Sheets("BatchConditions").Range("B23").Value
    PIServer = "SGSitePI"
    Mode = "inside"
    'fitcode = something or other.
    pi_formula = "=PINCompFilDat(" & Chr(34) & tag & Chr(34) & "," & Chr(34) & stime & Chr(34) & "," & _
                    numvals & "," & Chr(34) & filtexp & Chr(34) & "," & fitcode & "," & _
                    CStr(outcode) & "," & _
                    Chr(34) & PIServer & Chr(34) & "," & _
                    Chr(34) & Mode & Chr(34) & ")"
    Set result_range = Sheets("Sheet2").Range("A3:B3")
    result_range.ClearContents
    result_range.FormulaArray = pi_formula
    result_range.CurrentRegion.Select
    Selection.columns(1).NumberFormat = "dd-mmm-yyyy hh:mm:ss"
    result_range.Copy
    result_range.PasteSpecial xlPasteValues
End Sub