アクセスのVBAでエクセルのデータを編集してテーブルに追加貼り付けをしたいのですが、「追加貼り付けは無効」とポップアップが表示されてうまくいきません。
追加貼り付けのFunctionを呼び出す前のエクセルのRangeをコピーした段階で手動でテーブルに追加貼り付けをすると、追加貼り付けをします。
追加貼り付けのコードは下記のとおりですが、どこを修正すればよろしいでしょうか。
Function 追加貼り付け()
On Error GoTo 追加貼り付け_Err
'この下の行のacEditをacAddに変えても、追加貼り付けは無効でした。
DoCmd.OpenTable "読み込み", acNormal, acEdit
DoCmd.RunCommand acCmdPasteAppend
'追加貼り付けする際に出てくるアラーム解除はこの下の行でよいのではないでしょうか。
DoCmd.SetWarnings False
追加貼り付け_Exit:
Exit Function
追加貼り付け_Err:
MsgBox Error$
Resume 追加貼り付け_Exit
End Function
No.3ベストアンサー
- 回答日時:
No.2です。
AccessのTableへの貼り付け前に、シートを削除していることが原因のようです。
Excelの範囲指定でのCopy&Pasteの場合、値そのものではなく「範囲の情報」
が、クリップボードに(?)保存されます。
そのため、貼り付け前にシートを削除したことで、「指定した範囲が見つからない
=データがない」ということになり、「追加貼り付けは無効」となったのだと思います。
(Excel内でのCopy&Pasteで、Copy後にシートを削除すると、Pasteができない
のと同じ現象ではないかと)
「Call 追加貼り付け」の位置を、シート削除の前に移動することで、こちらでは
問題なく貼り付けられることを確認しました。
(「With」の中に入ることになりますが、特に問題はありません;
「With」の宣言は『「With~End With」内にある、「.」で始まるものは、Withで
宣言したもの(コントロール、オブジェクト他)が省略されていると見做す』という
意味(と私は理解しています))
Sub EX_read()
On Error GoTo エラー処理
Dim EX As Excel.Application
Dim WB As Workbook
Dim WS As Worksheet
Dim WB_name As Variant
Dim Wrow As Double
Dim WB_length As Long
Dim a As Variant
Dim inti As Integer, intj As Integer
Set EX = GetObject(, "Excel.Application")
For Each WB In EX.Workbooks
WB.Activate
WB_name = WB.Name
WB_length = LenB(WB_name)
WB_name = LeftB(WB_name, WB_length - 8) '「.xls」部分を削除
Set WS = WB.Worksheets(1)
WS.Activate
Wrow = WS.Range("b65536").End(xlUp).Row
With WS
.Range(.Cells(1, 1), .Cells(Wrow, 15)).Copy
End With
With WB
.Worksheets.Add Count:=1
With .ActiveSheet
.Cells(1, 2).PasteSpecial Paste:=xlPasteValues
.Cells(2, 1).Value = WB_name
.Cells(1, 1) = "ファイル名"
.Cells(2, 1).Copy
.Paste Destination:=.Range(.Cells(3, 1), .Cells(Wrow, 1))
.Range(.Cells(1, 1), .Cells(Wrow, 16)).Copy
Call 追加貼り付け
EX.DisplayAlerts = False
.Delete
End With
End With
Next WB
Set EX = Nothing
終了処理:
Exit Sub
エラー処理:
MsgBox Err & ":" & Error$, , "Ex_Read": Resume 終了処理
End Sub
No.2
- 回答日時:
こちらで動作確認したところ、提示されたコードで、追加貼り付けは問題なく
実行されました。(WinXP&Access2003)
> 追加貼り付けのFunctionを呼び出す前のエクセルのRangeをコピーした
> 段階で手動でテーブルに追加貼り付けをすると、追加貼り付けをします。
とのことですが、Functionを呼び出す際にも、Excel側での範囲指定&コピー
は実行されたでしょうか。
提示されたコードにはデータをコピーする動作までは含まれていないので、
手動でのコピーを行っていないと、ご質問の通り「追加貼り付けは無効」との
メッセージが表示されます。
もう一度、確認してみて下さい。
*Excel側のコピーも含めたコードは、私にはわかりません(汗)*
なお、SetWarningsは追加貼り付けのコマンド実行前でないと意味がないと
思います。
また、このままですと、このFunctionの実行後に、例えばうっかりテーブルや
フォーム、或いはレコードを削除した場合などにも、警告が表示されなくなって
しまいます。
ですので、「SetWarnings」をFalseに設定した場合は、「Exit Function」の前に
「DoCmd.SetWarnings True」を追加して、警告表示を復活させることをお薦めします。
Function 追加貼り付け()
On Error GoTo 追加貼り付け_Err
DoCmd.OpenTable "読み込み", acNormal, acEdit
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdPasteAppend
追加貼り付け_Exit:
DoCmd.SetWarnings True
Exit Function
追加貼り付け_Err:
MsgBox Error$
Resume 追加貼り付け_Exit
End Function
この回答への補足
丁寧なご指導、誠にありがとうございます。
問題をクリアするため、もう少し、ご助言いただけませんでしょうか。EXCELをコピーする部分のVBAが分からないとのことでしたので、以下のとおり貼り付けさせていただきます。
エクセルのデータをコピーすることは質問でも述べたとおり、できると思います。
何か、設定の問題があるのでしょうか。Sub EX_read()
Dim EX As Excel.Application
Dim WB As Workbook
Dim WS As Worksheet
Dim WB_name As Variant
Dim Wrow As Double
Dim WB_length As Long
Dim a As Variant
Dim inti As Integer, intj As Integer
Set EX = GetObject(, "Excel.Application")
'立ち上げているエクセルのファイルを読み込み、
'ファイル名とデータを合体したデータをアクセスのテーブルに追加貼り付け
For Each WB In EX.Workbooks
WB.Activate
'読み込むエクセルファイル名を取得
WB_name = WB.Name
WB_length = LenB(WB_name)
WB_name = LeftB(WB_name, WB_length - 8) '「.xls」部分を削除
Set WS = WB.Worksheets(1)
WS.Activate
Wrow = WS.Range("b65536").End(xlUp).Row
With WS
.Range(.Cells(1, 1), .Cells(Wrow, 15)).Copy
End With
With WB
.Worksheets.Add Count:=1
With .ActiveSheet
.Cells(1, 2).PasteSpecial Paste:=xlPasteValues
.Cells(2, 1).Value = WB_name
.Cells(1, 1) = "ファイル名"
.Cells(2, 1).Copy
.Paste Destination:=.Range(.Cells(3, 1), .Cells(Wrow, 1))
.Range(.Cells(1, 1), .Cells(Wrow, 16)).Copy
'ここで中断して、手作業で追加貼り付けすると、追加貼り付けできました。
EX.DisplayAlerts = False
.Delete
End With
End With
Call 追加貼り付け
Next WB
Set EX = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ビジネス・キャリア) 契約書の条文追加する際、追加したい条文を別の用紙に打ち込んで、契約書の余白に貼り付けて割印を押しても 2 2022/06/07 05:05
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- その他(Microsoft Office) エクセルの貼り付け「リンクされた図」について 2 2023/08/17 23:54
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 複数のExcelブックのシート1の内容を1つのExcelブックにコピー貼り付けたいのでvbaコードを 7 2023/02/10 23:20
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Accessでレコードの複製
Access(アクセス)
-
access2010 コマンドまたはアクション''は無効です。について
その他(ソフトウェア)
-
Access VBA でデータペーストをする
その他(Microsoft Office)
-
-
4
アクセスにエクセルのデータを貼り付ける方法について
その他(Microsoft Office)
-
5
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
6
access2000:フォームで入力した内容を新規レコードにコピー
その他(データベース)
-
7
Access VBA クリップボードの内容を
Access(アクセス)
-
8
ACCESSでテーブルのフィールドに一括で数値の代入する方法
Access(アクセス)
-
9
ACCESS VBAでExcelを開き行をコピーしたい
Visual Basic(VBA)
-
10
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
11
Accessの条件付き書式設定で、複数の条件が一致した時の書式を設定したい
その他(Microsoft Office)
-
12
Access2007 フォーム上データのコピー禁止
その他(データベース)
-
13
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
14
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
15
Accessを開きなおすとテキストボックスの値がエラー#Name?になる
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ラインで無言追加されたら、無...
-
LINEで無言追加されたとき、こ...
-
一里とは何メートル(何キロ?...
-
最近知らない人からのLINEの追...
-
インスタで知らない人からLINE...
-
仕事のグループLINEで一人の人...
-
LINE 卒業後
-
キャップカットについて
-
私は高校生です。クラスの男子...
-
クラスの話したことの無い男子...
-
裏垢女子がTwitterに載せてるLI...
-
同じクラスの男子から1日以上前...
-
LINEの相手の友達欄から自分を...
-
LINEのグループから、間違えて...
-
LINEはブロックされるとLINEミ...
-
ラインでブロックした覚えのな...
-
男の人が自分の性器を見せてき...
-
LINEで、ブロックされてないの...
-
彼氏を勢いでブロックして後悔...
-
SMS のショートメールに チェッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一里とは何メートル(何キロ?...
-
ラインで無言追加されたら、無...
-
インスタで知らない人からLINE...
-
LINEで無言追加されたとき、こ...
-
裏垢女子がTwitterに載せてるLI...
-
同じクラスの男子から1日以上前...
-
クラスの話したことの無い男子...
-
LINEのグループから、間違えて...
-
中学生です。 今日突然異性がLI...
-
私は高校生です。クラスの男子...
-
LINEは、一定回数、通報した人...
-
最近知らない人からのLINEの追...
-
追加容量が勝手に増えた。
-
仕事のグループLINEで一人の人...
-
LINE 卒業後
-
LINEを片方だけ追加した場合、...
-
Gmailの連絡先の内容が勝手に増...
-
ゼミの先生からLINEを追加され...
-
キャップカットについて
-
男子に質問です。女子にLINE追...
おすすめ情報