Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
何故か日時が書き込みできません。
投稿日時: 22/11/25 09:21:27
投稿者: takatada72

お世話になります。
 
自分で色々な部分を貼り付けて作ったのですが、最後に日時をAA1に記載したいのですが、
実行後は日時が入りません、ご指導頂けないでしょうか
※VBAがよく理解していないため、検索で見つけたコードを貼り付けて使っている知識になります。
 
コードの流れ
1、台帳のシートから、データをコピーします。
2、メインで使っているDR2-Unit-Form.xlsmのシート(PNumber)にデータを貼り付けます。
※ここまでは、完成しております。
3、DR2-Unit-Form.xlsmのPNumberのAA1に日時を記載する 
※こちらが実行されなく、VBAが終了している状態です。
 
お忙しいとは思いますが宜しくお願い致します。
 
☆★☆★☆★☆★☆★☆★☆★☆★★☆☆★☆★☆★☆★☆★☆★☆★☆★☆
 
    Dim SetFile As String
    Dim wbMoto, wbSaki As Workbook
    Dim 最終行 As Integer
    Dim myname, fName, a, b As String
     
  
    Set wbMoto = ActiveWorkbook 'マスターデータ取り込み元をブック名をセット(取り込み元)
  
    Application.DisplayAlerts = False
        
    SetFile = "\\Databasesega\Data1\台帳.xlsx"
     
    Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0 'マスターデータファイルを読み取り専用で開きます()
    Set wbSaki = Workbooks.Open(SetFile) '開いたマスターブック名とセット(取り込み先)
     
        最終行 = Range("F2").End(xlDown).Row
  
        wbSaki.Worksheets("Sheet1").Range("A2:Z" & 最終行).Copy '取り込み先のシート名
 
        wbMoto.Worksheets("PNumber").Range("A2").PasteSpecial xlPasteValuesAndNumberFormats '取り込み元
        Application.CutCopyMode = False 'コピー切り取りを解除
         
        wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる
        Range("AA1") = Now 'AAに取り込み日時を記載する

回答
投稿日時: 22/11/25 11:14:38
投稿者: Suzu

引用:
3、DR2-Unit-Form.xlsmのPNumberのAA1に日時を記載する 
※こちらが実行されなく、VBAが終了している状態です。

 
エラーも何も出ないで、コードの実行が終了している状態と言う事で良いでしょうか?
 
エラーは発生していないのであれば、
Range("AA1") = Now

は実行されていると思います。
 
ただ、対象が DR2-Unit-Form.xlsmのPNumber とは限りません。
そのコードが実行されている際に アクティブとなっているワークブック、ワークシートの
 セル AA1 に Now が代入されています。
 
ワークブック 台帳.xlsx を 開く直前、
 アクティブになっていたワークブックは 「R2-Unit-Form.xlsm」なんだとは思いますが
 アクティブになったいたワークシートは「PNumber」 以外だったのではありませんか?
 
その シートの AA1 に 日付・時刻の値が代入されていませんか?
 
 
対象となる、ワークブック・ワークシートを明確にしたコードを記載する様に心がけましょう。

回答
投稿日時: 22/11/25 11:17:23
投稿者: WinArrow
投稿者のウェブサイトに移動

>メインで使っているDR2-Unit-Form.xlsm
このブックはどこにあるのでしょうか?
 
説明とコードの内容があっていないような感じを受けます。
 
コードには、ブックが3つ出てきます。
 
> Set wbMoto = ActiveWorkbook 'マスターデータ取り込み元をブック名をセット(取り込み元)
wbMoto は、具体的なブック名が記載されていません。
 

引用:
Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0 'マスターデータファイルを読み取り専用で開きます()
    Set wbSaki = Workbooks.Open(SetFile) '開いたマスターブック名とセット(取り込み先)

 
wbSakiを2回開いていますが、
前者のブックには、何もアクセスしていません。
後者のブックは、複写元として使用しています。
 
>3、DR2-Unit-Form.xlsmのPNumberのAA1に日時を記載する
は、多分、ActiveWorkbookに書かれていると思います。
ActiveWorkbookは「DR2-Unit-Form.xlsm」と同じですか?

投稿日時: 22/11/25 14:03:58
投稿者: takatada72

お疲れさまです。
 
SUZUさん、ご回答をありがとうございました。
 
>その シートの AA1 に 日付・時刻の値が代入されていませんか?
開いている全てのシートのAA1を確認してみましたが、どのシートにも記載されていませんでした。
また、PNumberシートをアクティブにしておいて実施しましたが、記載は、されませんでした。
 
引き続き宜しくお願い致します。

回答
投稿日時: 22/11/25 14:06:20
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

    Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0 'マスターデータファイルを読み取り専用で開きます()
    Set wbSaki = Workbooks.Open(SetFile) '開いたマスターブック名とセット(取り込み先)

 
前者は、読み取り専用で開いている。オブジェクト変数に代入していない。
後者は、更新モードで開いています。オブジェクト変数に代入しています。
 
通常、同名のブックは開えない(エラーになる)と考えていたので
このコードをテストしてみました。
 
実行結果
エラーにはなりませんが、
オブジェクト変数には、前者がセットされていいます。
 
理解しがたいところがありますが、結果報告まで。
 
 
 

投稿日時: 22/11/25 14:23:44
投稿者: takatada72

WinArrowさん
 
ありがどうございました。
VBAの理解が乏しいので、わかりやすい表現で示して頂けると幸いです。
 
>Set wbMoto = ActiveWorkbook→wbMoto は、具体的なブック名が記載されていません。
こちらの指定はアクティブブックになっていることから、実行時に
アクティブにしているブックが対象と言うことではないのでしょうか?
 
>wbSakiを2回開いていますが、
すみません。VBAに詳しくないため、どのコードなのかを示して頂けないでしょうか
 
>3、DR2-Unit-Form.xlsmのPNumberのAA1に日時を記載する
>は、多分、ActiveWorkbookに書かれていると思います。
>ActiveWorkbookは「DR2-Unit-Form.xlsm」と同じですか?
実行時にアクティブになっているのは、DR2-Unit-Form.xlsmのPNumberです。
R2-Unit-Form.xlsのどのシートのAA1にも記載されていませんでした。
 
お忙しいとは思いますが宜しくお願い致します。

回答
投稿日時: 22/11/25 15:25:05
投稿者: Suzu

引用:
開いている全てのシートのAA1を確認してみましたが、どのシートにも記載されていませんでした。
また、PNumberシートをアクティブにしておいて実施しましたが、記載は、されませんでした。

 
        wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる
        Range("AA1") = Now 'AAに取り込み日時を記載する
 

        wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる
MsgBox _
    "ブック名 : " & Range("AA1").Parent.Parent.Name & vbCrLf & _
    "シート名 : " & Range("AA1").Parent.Name

        Range("AA1") = Now 'AAに取り込み日時を記載する
 
としてみてください。
 
どのブックの、どのシートが アクティブになっているか 判ります。
そのブック・シート の AA1 に Now が代入されているはずです。

回答
投稿日時: 22/11/25 15:47:38
投稿者: WinArrow
投稿者のウェブサイトに移動

takatada72 さんの引用:

>Set wbMoto = ActiveWorkbook→wbMoto は、具体的なブック名が記載されていません。
こちらの指定はアクティブブックになっていることから、実行時に
アクティブにしているブックが対象と言うことではないのでしょうか?

少なくとも、コードの中では、アクティブにしていませんから、
目的のブックを指定したほうが確実です。
  
例。
 Set wbMoto = Workbooks("目的のブック名")
  
それから
>Dim wbMoto,
のwbMotoのデータ型は、Workbookを指定することをお勧めします。
 
takatada72 さんの引用:

>wbSakiを2回開いていますが、
すみません。VBAに詳しくないため、どのコードなのかを示して頂けないでしょうか

 
Workbooks.Open
というコードが2つ(同じファイルを指定しています)ありますよね?
 
テスト結果は、前レスの通り
結果論からすると
Set wbSaki = Workbooks.Open(fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0) 'マスターデータファイルを読み取り専用で開きます()
と同じになります。
  
[quote="takatada72"]
>3、DR2-Unit-Form.xlsmのPNumberのAA1に日時を記載する
>は、多分、ActiveWorkbookに書かれていると思います。
>ActiveWorkbookは「DR2-Unit-Form.xlsm」と同じですか?
実行時にアクティブになっているのは、DR2-Unit-Form.xlsmのPNumberです。
R2-Unit-Form.xlsのどのシートのAA1にも記載されていませんでした。
 
>実行時にアクティブになっているのは、DR2-Unit-Form.xlsmのPNumberです。
これを検証していますか?
  

投稿日時: 22/11/28 08:49:56
投稿者: takatada72

皆様
 
今回の件、自己解決しました。
プログラムを開始する最初に日付を変更することで、問題は、解決しました。
 
色々とご回答頂きました、Suzuさん WinArrowさん ありがとうございました。
少しづつ、コードを理解していきたいと思っております。
 
解決とさせて頂きます。