2016-08-14 11 views
0

最近、問題に直面しています。VBAピボットテーブルとコード

マイシート「Sheet1」にピボットテーブル「Dyn40」があります。 PivotFieldの1つが「オプション」であり、可能なPivotItemの1つが「Potato」です。私は438 #ERRORエラーが生じています:オブジェクトはこのプロパティまたはメソッド

Sub FindPriority() 

Dim pass As String 
pass = "user" 
    With Worksheets("Sheet1") 
    .Activate 
    .Unprotect Password:=pass 
    Range("TK2").Select ‘ < --- is this necessary ? 
    ActiveSheet.PivotTables("Dyn40").PivotCache.Refresh 
     If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").ListCount = 1 Then ‘check if there is at least one item in the field 
     If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").PivotItems("Potato").count = 1 Then ‘check if there is at least one single item named “Potato” 
     CreateObject("WScript.Shell").Popup "Only one item exists and its name is Potato" ‘ if there exists, then message pops up 
     End If 
     Else 
     If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").ListCount > 1 Then ‘check if there is more than one item in the field 
      If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").PivotItems("Potato").count = 1 Then ‘check if there is at least one single item named “Potato” 
       CreateObject("WScript.Shell").Popup "There is more than one item and one of them is Potato"‘ if there exists, then message pops up 
       ActiveSheet.PivotTables("Dyn40").PivotFields("Options").PivotItems("Potato").Visible = False ‘ and then the name “Potato” is hidden 
      End If 
      Else 
       CreateObject("WScript.Shell").Popup "There is nothing in here" 'if there are no fields available, message pops up 
     End If 
     End If 

    End With 
End Sub 

私はでポテトを交換したい場合は...「「(空のフィールド)どのようにこのスニペットは次のように次の質問になりますさをサポートしていませんか?

+1

奇妙な 'CreateObject(" WScript.Shell ").Popup'を' MsgBox'で置き換えてください。 '<---これは必要ですか? 'に対する答えは[いいえ]です(http://stackoverflow.com/q/10714251/11683)。 – GSerg

+1

エラーがどこにあるのかは言わないので、 'ListCount'を持たない' PivotField'と仮定します。 – GSerg

+0

@GSergのコメントの続きとして、 'RecordCount'はそこで動作しますか? –

答えて

0

私はVBAを使わないで同じことをする新しい方法を考え出しました。より重要なコーディングを行うために脳を保存してください。

フィルタフィールド(人物とオプション)は定数データであり、新しい人物もオプションも新しいエントリとはみなされないことを意味します。固定項目。 行はフィールドが、一方、変数は、その内容は以下のように希望のデータベース内に、変更、追加または削除することができることを意味しと値ラベル - 画像を1

Picture 1

Supose今では私の結果から彼女を除いて、の1人の "レティシア"をフィルタリングしたいと思っています。 人物に関する新しいエントリはすべて変更されません(この特定の例では新しい名前はリストに追加されません)。ピボットテーブルが新しいデータで更新されると、結果の整合性は良好になります。 2

Picture 2

今私は、フィールドでの我々の結果野菜からそれを除いて、1種の植物「ポテト」をフィルタリングすることSupose。ポテトは行Lablesであり、このフィールドは可変であり、新しい野菜や新交通手段を追加または除外されることを意味 - 写真3

Picture 3

ピボットテーブルが更新されたら、問題が開始されます。フィールド野菜に関する新規エントリがデータベース(Beetroot)に追加された場合、privotテーブルがすべて更新されても、最終結果は処理されません。この新しいデータ "ビートルート"は私たちの報告書には含まれていないと認識することができました。 ピボットテーブル>行ラベル>野菜にアクセスしてください。私たちは、「ビート」が自動的に選択されていなかったことを実現することができます - 写真4

Picture 4

だから、この不便さを解消するよう、ちょうどピボットテーブル>行ラベル>野菜>に提出設定と、最終的には、ダニにアクセスボックス"新しい項目をマニュアルフィールドに選択" - 写真5,6。フィールドへ

Picture 5
Picture 6

最後に、次回は新しいエントリ野菜を を添加し、ピボットテーブルは、 はするつもりはないだけ野菜リフレッシュされていますポテトは利用可能になる予定です(予定通り!)。結論として、 を選択することを忘れないでくださいピボットテーブルオプション>データ>と "NONE" "フィールドごとに保持する項目の数"で "を選択します。この設定は、デフォルトでは 自動的に行われ、なしに変更するピボットテーブル は、私たちの 更新されたデータベースに存在しなくなったんドロップダウンリストのアイテムを保持防ぐことができます - 写真7

Picture 7

関連する問題