[[20210522223515]] 『VBA ピボット更新で前データが残ってしまう事象=x(ピノ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA ピボット更新で前データが残ってしまう事象(Office365移行後)』(ピノ)

Excel2016→Office365にバージョンアップ後、
下記コードにて
ピボットテーブル更新/繰り返し処理を行うと、
前データが残ってしまう事象が発生しています。
Excel2016では問題なく動作していたのですが、

例えば1/2/3とループする場合、1は正常に処理されるのですが
2と3は更新しても1データが残ってしまっており、
本来のデータに更新されません。

<コード内容>
指定フォルダにブックがなくなるまで以下処理
1 ブック内データを商品サマリシート作成フォームに貼り付け
2 商品サマリシート作成フォームでピボットテーブル更新
3 更新データをブックにコピペ
※本事象では、3 がうまくいきません。

この事象の回避方法、アドバイスいただけたら助かります!

Sub 作成()

    Dim 指定フォルダ As String
    Dim ブック名 As String
    Dim 最終行 As Long
    指定フォルダ = "\\apmm\提出用\"
    ブック名 = Dir(指定フォルダ & "*店別データ.xls*")

 'ブックが無くなったらループ終了
  If ブック名 = "" Then Exit Sub

 'ブックが無くなるまでループ
  Do Until ブック名 = ""
        Workbooks.Open 指定フォルダ & ブック名

        '商品サマリフォームを開く
        Workbooks.OpenText Filename:= _
            "\\apmm\商品サマリシート作成フォーム.xlsx"

        'A2アクティブ領域をコピー
        Workbooks(ブック名).Activate
        最終行 = Cells(Rows.Count, 1).End(xlUp).Row
        Range("A2:K2" & 最終行).Copy

        '商品サマリフォームに貼付け
         Workbooks("商品サマリシート作成フォーム.xlsx").Worksheets("店別データ").Range("A2:K" & 最終行).PasteSpecial Paste:=xlPasteValues

    'ピボット更新
        Dim pv As PivotTable
        Dim sh As Worksheet

        'ピボットテーブルを変数設定
        Set pv = Workbooks("商品サマリシート作成フォーム.xlsx").Worksheets("商品サマリFM").PivotTables(1)

        '元データシートを変数設定
        Set sh = Workbooks("商品サマリシート作成フォーム.xlsx").Worksheets(2)

        '元データシートの範囲設定(可変)
        pv.SourceData = sh.Range("A2").CurrentRegion.Address(True, True, xlR1C1, True) '1行目は空白でA2セルからデータがあること

        'データ更新
        pv.PivotCache.Refresh

        '更新したデータをコピー
        Range("A2").CurrentRegion.Copy

        '対象企業ファイルに戻り、商品サマリシートにピボット更新したデータを貼付け
        Workbooks(ブック名).Worksheets("商品サマリ").Range("A5").PasteSpecial Paste:=xlPasteValues

        Set pv = Nothing
        Set sh = Nothing

    ブック名 = Dir()

 Loop

End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


これは、どのブックおよびシートですか?

 >       '更新したデータをコピー
 >     Range("A2").CurrentRegion.Copy

(マナ) 2021/05/23(日) 00:12


これは、ループの外でよいのでは?
OpenTextでなく、Openとしないのはなぜ?

 >      '商品サマリフォームを開く
 >      Workbooks.OpenText Filename:= _

(マナ) 2021/05/23(日) 00:17


Worksheets(2)のシート名は?

 >       '元データシートを変数設定
 >      Set sh = Workbooks("商品サマリシート作成フォーム.xlsx").Worksheets(2)

(マナ) 2021/05/23(日) 00:24


ここもシート名を指定しなくてよいのですか?

 >       'A2アクティブ領域をコピー
 >        Workbooks(ブック名).Activate
 >        最終行 = Cells(Rows.Count, 1).End(xlUp).Row
 >        Range("A2:K2" & 最終行).Copy

(マナ) 2021/05/23(日) 00:28


>例えば1/2/3とループする場合、1は正常に処理されるのですが
>2と3は更新しても1データが残ってしまっており、
>本来のデータに更新されません

>1 ブック内データを商品サマリシート作成フォームに貼り付け
>2 商品サマリシート作成フォームでピボットテーブル更新
>3 更新データをブックにコピペ
>※本事象では、3 がうまくいきません。

矛盾していませんか?
2の更新はできているのですか。

(マナ) 2021/05/23(日) 00:39


マナ様
有難うございます。
仰る通り、シート名の指定をきちんとしてませんね。
いつも同じ位置にあるシートなのでうまくいってましたが、
きちんと指定するようにします。
textOpenはループ内でなくてもいいので、修正します。

矛盾の指摘、説明不足で申し訳ありません。
2番目データは更新できてません。

コード内容に記載した1〜3は、例えで表現した1/2/3とは別物で、
データの本来やりたいことを記載しました。
(ピノ) 2021/05/23(日) 12:26


修正したもの(最新版)を提示してみては?

(γ) 2021/05/23(日) 18:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.