所以我学习了数据透视表很棘手,字符串变量语法也是如此,在VBA中使用引号也是如此。我尝试(并且失败)使用这三个!
我正在尝试从一个非常大/复杂的数据透视表中收集大量作业数据中的一个数据。我想在A1中选择一个作业号,并使用所选的作业号自动更新数据透视表公式以返回一个数字结果。
我目前遇到两个问题:1)获取' getpivotdata'的报价中的作业编号的语法。公式不起作用,2)它在执行代码时从作业号中删除零。
我的代码如下所示,当我执行它时,我希望看到这个公式填充在A2中:
=GETPIVOTDATA("Part Number",' Parts Status '!$A$8,"CHAR_FIELD3","11-008","MATERIAL STATUS MASTER","Avail")
但是得到:
=GETPIVOTDATA("Part Number",' Parts Status '!$A$8,"CHAR_FIELD3",11-8,"MATERIAL STATUS MASTER","Avail")
我的代码在这里
Sub Macro1()
Dim jobnumber As String
jobnumber = Worksheets("Macros test").Cells(1, "A").Value
Sheets("Macros test").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = _
"=GETPIVOTDATA(""Part Number"",' Parts Status '!R8C1,""CHAR_FIELD3""," & jobnumber & ",""MATERIAL STATUS MASTER"",""Avail"")"
答案 0 :(得分:2)
如果您需要引号,请将其更改为:
"=GETPIVOTDATA(""Part Number"",' Parts Status '!R8C1,""CHAR_FIELD3"",""" & jobnumber & """,""MATERIAL STATUS MASTER"",""Avail"")"
此外,您可以在设置jobnumber后添加临时msgbox,以确保它符合您的想法:
MsgBox(jobnumber)
答案 1 :(得分:1)
我总是使用Chr()函数来处理VB中的引号。双引号是Chr(34),单引号是Chr(39)。您遇到的问题是,虽然jobnumber被定义为字符串,但您没有双引号。结果是Excel删除了公式11-008上的前导零,Excel将其视为Eleven减去8。在jobnumber周围添加双引号(Chr(34))解决了这个问题。
我总是把这些长串打成小块,这样我才能看到我输入的内容。下面的代码使用一个小的私有函数来构建您的透视字符串。
Public Sub PivotTest()
Dim jobnumber As String
jobnumber = Worksheets("Macros test").Cells(1, "A").Value
Sheets("Macros test").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = BuildPivotString(jobnumber)
End Sub
Private Function BuildPivotString(ByRef jobNum As Variant) As String
Dim retVal As String
retVal = "=GETPIVOTDATA("
retVal = retVal & Chr(34) & "Part Number" & Chr(34)
retVal = retVal & ",' Parts Status '!R8C1,"
retVal = retVal & Chr(34) & "CHAR_FIELD3" & Chr(34) & ","
retVal = retVal & Chr(34) & jobNum & Chr(34) & ","
retVal = retVal & Chr(34) & "MATERIAL STATUS MASTER" & Chr(34) & ","
retVal = retVal & Chr(34) & "Avail" & Chr(34) & ")"
BuildPivotString = retVal
End Function