実現したいこと
マクロ初心者で、以前勤務していた同僚がつくった別件のコードを参考にして作成しています。進捗管理表作成のため、下記②のコードを入力中です(①②ともマクロを起動させるボタンは「元データ」シートに表示しています)。
①別のexcelファイルから「元データ」シートへA~M列のデータを抽出し(マクロ完成済)、②N~R列のデータを手入力した後「進捗管理表」シートにA~R列を(複数行同時に)転記(S~V列はこの段階でまだ未確定なのでブランク)、③後日、S~V列を「進捗管理表」シートに直に手入力するのが一連の作業です。
[A][B][C][D][E][F][G][H][I][J][K][L][M] (抽出)
[N][O][P][Q][R](手入力)
-----ここまでを「元データ」シートから「進捗管理表」シートへ転記
[S][T][U][V](後日直に手入力)
※「元データ」シートでは、A5が起点で、「進捗管理表」シートでは、A2が起点ですが、保存したい内容は全く同じです。
現在その進捗管理表は通常のexcelファイルで運用しているのですが、操作が苦手な同僚が、行や列をうっかり削除してしまったり、誤って別のセルを上書きしてしまうミスが続いており、入力済の部分に触れずにデータを更新できないかと考えています。このため、シートの保護&解除のコードを追加しています。アドバイスをいただけると幸いです。
発生している問題・分からないこと
データが転記されません。
エラーメッセージ
error
1Range’メソッドは失敗しました:’_Worksheet’オブジェクト
該当のソースコード
VBA
1Dim ws1 As Worksheet, ws2 As Worksheet 2Set ws1 = ThisWorkbook.Worksheets("元データ") 3Set ws2 = ThisWorkbook.Worksheets("進捗管理表") 4Dim cmax As Long 5cmax = ws2.Range(“A”&Rows.Count).End(xlUp).Row+1 6ws2.Unprotect 7ws2.UsedRange.Locked = True 8ws2.Range(“A”&cmax).Resize(196,18).Value = ws1.Range(“A5:R200”).Value 9ws2.Range(“S”&cmax).Resize(196,4).Locked = False 10ws2.Protect
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
With ws2~End Withを使用するとエラーは出ないのですが、やはりデータは転記されません。
補足
N~V列を修正したいときのために、下記のコードを別に登録しています。マクロを起動させるボタンは「進捗管理表」シートに表示しています。
Sub sample()
Dim sh, alert
alert = MsgBox(“N~V列を編集可能にしますか?”, vbQuestion & vbYesNo)
If alert = vbYes Then
Set sh = Sheets(“進捗管理表”)
sh.Unprotect
sh.Range(“N1:V”&Rows.Count).Locked = False
sh.Protect
Set sh = Nothing
End If
End Sub

回答1件
あなたの回答
tips
プレビュー