2017-05-10 60 views
0

我是新來的VBA編程,我遇到了一個奇怪的問題。 所以我有一個數據透視表,包含3種類型的行(「用戶」,「全名」,「權限」)。EXCEL VBA問題返回#VALUE!而不是通過數據透視表虛假

我寫了一個程序,在PivotTable中尋找某個名字x,一旦找到了它的名字,它會查看下面的「許可」,如果他們有「許可」則返回「真」。現在當它返回「真」的情況下工作正常,但由於某種原因,每次失敗,而不是像我想的那樣返回假,它會返回#VALUE !,有誰知道爲什麼?

Public Function Dependency(x As String) As String 

Dim rngRow As Range 
Dim pt As PivotTable 
Dim pf2Value As String 
Dim pf3Value As String 

pf2Value = "False" 
pf3Value = "False" 
Set pt = ActiveSheet.PivotTables("PivotTable1") 

For Each rngRow In pt.RowRange   
    If pf2Value = "True" And rngRow.PivotField.Name = "Permissions" Then 
     If rngRow.Value = "Has Permissions" Then 
       pf3Value = "True" 
     End If 
    End If 
    If pf2Value = "True" And pf3Value = "True" And rngRow.PivotField.Name <> "Permissions" Then Exit For 
    If rngRow.PivotField.Name = "Full Name" And rngRow.Value = x Then 
     pf2Value = "True" 
    End If 
    If rngRow.PivotField.Name = "Full Name" And rngRow.Value <> x Then 
     pf2Value = "False" 
    End If 
Next rngRow 
Dependency = pf3Value 

End Function 

如果我這樣做,它返回false:

Public Function Dependency(x As String) As String 

Dim rngRow As Range 
Dim pt As PivotTable 
Dim pf2Value As String 
Dim pf3Value As String 

pf2Value = "False" 
pf3Value = "False" 
Set pt = ActiveSheet.PivotTables("PivotTable1") 

For Each rngRow In pt.RowRange 
Next rngRow 
Dependency = pf3Value 

End Function 

問題開始時我加入這一行:

Public Function Dependency(x As String) As String 

Dim rngRow As Range 
Dim pt As PivotTable 
Dim pf2Value As String 
Dim pf3Value As String 

pf2Value = "False" 
pf3Value = "False" 
Set pt = ActiveSheet.PivotTables("PivotTable1") 

For Each rngRow In pt.RowRange 
    If pf2Value = "True" And rngRow.PivotField.Name = "Permissions" Then 
    End If 
Next rngRow 
Dependency = pf3Value 

End Function 
+0

當你說你正在尋找的名字'x',你在'PivotTable'意味着」 s字段名稱'「Full Name」'? –

+0

@ShaiRado,是的! x將會像「John Doe」一樣,每一行都標有Full Name的值就像「Jane Smith」,我將x與Full Name值進行比較以找到合適的人。我應該補充說,這些行都在一列 – Doj321

+0

看到我的答案和下面的代碼 –

回答

0

嘗試代碼註釋中下面的代碼(解釋):

公共功能依賴關係代碼

Option Explicit 

Public Function Dependency(x As String) As String 

Dim pt   As PivotTable 
Dim ptNameFld As PivotField 
Dim ptPermFld As PivotField 
Dim C   As Range 

' set the Pivto-Table object, modify "Sheet1" with your sheet's name 
Set pt = Worksheets("Sheet1").PivotTables("PivotTable1") 

' set the Pivot Field "Full Name" 
Set ptNameFld = pt.PivotFields("Full Name") 

' set the Pivot Field "Permissions" 
Set ptPermFld = pt.PivotFields("Permissions") 

' loop through all rows in "Full Name" data range 
For Each C In ptNameFld.DataRange.Rows 
    If C.Value2 Like x Then ' if the name matches "x" 
     ' for DEBUG Only 
     'Debug.Print ptPermFld.DataRange(C.Row - ptPermFld.LabelRange.Row) 

     Dependency = ptPermFld.DataRange(C.Row - ptPermFld.LabelRange.Row) ' get the value of "Permission", of the same row 
     Exit For 
    End If 
Next C 

End Function 

子TestDependency代碼(測試功能)

Sub TestDependency() 

MsgBox Dependency("John Doe") 

End Sub