Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


137 / 3841 ページ ←次へ | 前へ→

【79728】Re:マスターファイルを更新させない方法
質問  りった  - 18/3/23(金) 10:11 -

引用なし
パスワード
   マスタファイルを置くフォルダに、「マスターファイルは上書き禁止.txt」を置いておく。
マスタファイルのアクティブシートに全画面サイズで「マスターファイルは上書き禁止」と書いたオートシェイプを置いておく。
マスターファイルのopenでDIRし、「マスターファイルは上書き禁止.txt」が無かったら、上記オートシェイプをvisible=falseする。
としたのですが、openでは早すぎるのか、visible=falseが効きませんでした。
ファイルオープン時に描画された後で発生するイベントは有りますでしょうか?
・ツリー全体表示

【79727】Re:マスターファイルを更新させない方法
お礼  りった  - 18/3/23(金) 9:27 -

引用なし
パスワード
   回答ありがとうございます。
試してみましたが、テンプレートを上書きされてしまいそうです。。。
システム的な対処は困難かもしれませんね。
・ツリー全体表示

【79726】Re:マスターファイルを更新させない方法
発言  マナ  - 18/3/22(木) 20:03 -

引用なし
パスワード
   ▼りった さん:

xltx形式(テンプレート)にしておけばどうでしょうか。
・ツリー全体表示

【79725】マスターファイルを更新させない方法
質問  りった  - 18/3/22(木) 19:13 -

引用なし
パスワード
   案件毎にマスターファイルをコピーして、コピーしたファイルを編集してほしいのですが、マスターファイルを上書きしてしまう駄目な子がいます。(誰だか不明)
その人をなんとかすべきではありますが、取り敢えず上書きされないようにしろと言われました。
「開いたときに、サーバのパスだったらポップアップを出す」だと、ポップアップ出てるのに上書きされるかもしれません。ネットワークドライブ割り当ててたら正しく判定できません。
何かうまい方法有りますか?
・ツリー全体表示

【79724】Re:エラーメッセージ
回答  りった  - 18/3/22(木) 12:49 -

引用なし
パスワード
   気付くの遅れました済みません。
動いているとのことですし、だれも指摘しないので、大丈夫だと思います。

iEnEv = Application.EnableEvents
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = iEnEv

とした方がお行儀いいかもしれません。
ただ、ここら辺は私もやったことがないので、よくわかりません。
・ツリー全体表示

【79723】Re:テーブル名の一括変更
発言  マナ  - 18/3/16(金) 18:42 -

引用なし
パスワード
   ▼AAA さん:

>.Cells(i, 2).Value = "'" & ws.name & "!" & t.Range.Address

戻すときのことを考えると
B列にシート名、C列にセル番地と
セルを別にしておくとよいかもしれません。

.Cells(i, 2).Value = ws.name
.Cells(i, 3).Value = t.Range.Address


>次は、戻す方に挑戦してみます。

γさんのコメントが参考になるはずです。
・ツリー全体表示

【79722】Re:テーブル名の一括変更
発言  AAA  - 18/3/16(金) 10:18 -

引用なし
パスワード
   ▼マナ さん:

レスありがとうございます。
書出しは、これでできました!
ありがとうございます。
次は、戻す方に挑戦してみます。

Sub test()

  Dim ws As Worksheet
  Dim t As ListObject
  Dim i As Integer

  With ActiveSheet
    i = 1
    For Each ws In ActiveWorkbook.Worksheets
     For Each t In ws.ListObjects
    
       .Cells(i, 1).Value = t.name
       .Cells(i, 2).Value = "'" & ws.name & "!" & t.Range.Address
       i = i + 1

     Next
    Next
  End With
   
End Sub
・ツリー全体表示

【79721】Re:テーブル名の一括変更
発言  マナ  - 18/3/15(木) 20:04 -

引用なし
パスワード
   ▼AAA さん:

>MsgBox t.Nameのところをシートに書きだすところが
>わからないです。

↓が参考になりませんか。

>'名前定義書き出し
>Dim i As Integer
>With ActiveWorkbook
>For i = 1 To .Names.Count
> Cells(i, 1).Value = .Names(i).Name
> Cells(i, 2).Value = "'" & .Names(i).RefersToLocal
>Next i
>End With
・ツリー全体表示

【79720】Re:エラーメッセージ
質問  V  - 18/3/15(木) 13:13 -

引用なし
パスワード
   ▼りった さん:

返信ありがとうございます。
何回も質問ばかりして申し訳ないのですが、

3つのループの違いがいまいちわからないのですが
一番下の無関係な広範囲の・・・ものが
一番処理的には、良いのでしょうか?

また、下記のコードですが、

Private Sub Worksheet_Change(ByVal Target As Range)

' A1に値が入力されていないとB1,C1,D1,E1,F1は、入力できずに
'「大項目を入力して下さい」とエラーメッセージがでるようにする
' n:1〜41
  
  Dim r As Range
 
  If Not Intersect(Target, Sheet1.Range("B1:F41")) Is Nothing Then ' ★
  
   For Each r In Target
    If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
     If Sheet1.Range("A" & r.Row) = "" Then
     
      Application.EnableEvents = False
      Target.Value = ""
      Application.EnableEvents = True
      
      MsgBox "大項目を入力して下さい", Title:="入力エラー!", Buttons:=vbCritical + vbRetryCancel
 
     End If
    End If
   Next
  End If
End Sub

キャンセルの場合は、値が消えるようにしてみたのですが
一応動いているみたいですが、こんな感じで間違ってないでしょうか?
・ツリー全体表示

【79719】Re:エラーメッセージ
回答  りった  - 18/3/15(木) 12:33 -

引用なし
パスワード
   Targetが複数セルのことがあるので、for eachでループしてみるのは如何でしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Anに値が入力されていないとBn,Cn,Dn,En,Fnは、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  ' n:1〜41
  Dim r As Range
  For Each r In Target
    If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
      If Sheet1.Range("A" & r.Row) = "" Then
        MsgBox "大項目を入力して下さい"
      End If
    End If
  Next
End Sub

複数セルを一気に更新して大量にエラーが出るのが嫌であれば、ループから抜けてください。
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Anに値が入力されていないとBn,Cn,Dn,En,Fnは、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  ' n:1〜41
  Dim r As Range
  For Each r In Target
    If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
      If Sheet1.Range("A" & r.Row) = "" Then
        MsgBox "大項目を入力して下さい"
        Exit For ' ★
      End If
    End If
  Next
End Sub


無関係な広範囲のセルを更新時に大量にループするのが嫌であれば下記で
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Anに値が入力されていないとBn,Cn,Dn,En,Fnは、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  ' n:1〜41
  Dim r As Range
  If Not Intersect(Target, Sheet1.Range("B1:F41")) Is Nothing Then ' ★
    For Each r In Target
      If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
        If Sheet1.Range("A" & r.Row) = "" Then
          MsgBox "大項目を入力して下さい"
        End If
      End If
    Next
  End If
End Sub
・ツリー全体表示

【79718】Re:テーブル名の一括変更
質問  AAA  - 18/3/15(木) 10:19 -

引用なし
パスワード
   ▼マナ さん:

> msgbox関数はわかりますか。

わかります。

>for each~nextはわりますか。

繰返しですか?

ListObjectsプロパティは、Worksheetオブジェクトにだけにしか
ないのですね。

MsgBox t.Nameのところをシートに書きだすところが
わからないです。
宜しければ教えて下さいませ。
・ツリー全体表示

【79717】Re:テーブル名の一括変更
回答  γ  - 18/3/15(木) 7:39 -

引用なし
パスワード
   回答があったのですが、知らずにコメントしていました。

>例文のとっかかりです。ヘルプで確認して下さい。
マナさんへの発言で、
全くわかりません、とされていますが、
ヘルプで確認する意図は無いんですか?
一覧は、名前と同じ方法で、ListObjectオブジェクトのNameを
シートに列挙するだけですし、
更新は、ListObjectオブジェクトのNameプロパティを
書き換えるだけです。
Sheet1.ListObjects("テーブル1").Name = "テーブルA"

# 全くわからないなら、
# 手作業するしかないですかね。
# 自分では横着を決め込んでいて、
# まるまる実行できるコードを出せ、と言っているようだが、
# 無償のサポーターでもなんでもないので、
# 基本的にそんな義務はありません。
・ツリー全体表示

【79716】Re:オプションボタンによるテキストボッ...
発言  マナ  - 18/3/14(水) 21:57 -

引用なし
パスワード
   ▼ボタン さん:
>
>以下はオプションボタン1です。
>こういった形で色々使いまわし

使いまわすのだから、
表示、非表示切り替え不要ですよ。
・ツリー全体表示

【79715】Re:テーブル名の一括変更
発言  マナ  - 18/3/14(水) 21:27 -

引用なし
パスワード
   ▼AAA さん:
>
>全然わからないです。

そうなると次に進めないです。
msgbox関数はわかりますか。
for each~nextはわりますか。
・ツリー全体表示

【79714】Re:テーブル名の一括変更
発言  AAA  - 18/3/14(水) 16:38 -

引用なし
パスワード
   ▼マナ さん:

>名前は手入力するならマクロにしても楽にはならないのでは?

一度シートに書出して、一括で置換しようと思います。
その後、置換えた名前を戻したいのです。

>ところで、提示したコードは参考になりませんでしたか。

すいません。
全然わからないです。
・ツリー全体表示

【79713】Re:エラーメッセージ
質問  V  - 18/3/14(水) 14:19 -

引用なし
パスワード
   ▼りった さん:
># 下記は、Sheet1のマクロとして記載するイメージです。
>Private Sub Worksheet_Change(ByVal Target As Range)
>  ' A1に値が入力されていないとB1,C1,D1,E1,F1は、入力できずに
>  '「大項目を入力して下さい」とエラーメッセージがでるようにする
>  If Not Intersect(Target, Sheet1.Range("B1:F1")) Is Nothing Then
>    If Sheet1.Range("A1") = "" Then
>      MsgBox "大項目を入力して下さい"
>    End If
>  End If
>End Sub


ありがとうございます。
質問なのですが、これをA31まで適用するには
どこを変えればいいのでしょうか?
・ツリー全体表示

【79712】Re:テーブル名の一括変更
発言  マナ  - 18/3/14(水) 12:58 -

引用なし
パスワード
   ▼AAA さん:

>単純に数が多いからです。

名前は手入力するならマクロにしても楽にはならないのでは?

ところで、提示したコードは参考になりませんでしたか。
・ツリー全体表示

【79711】Re:エラーメッセージ
回答  りった  - 18/3/14(水) 12:43 -

引用なし
パスワード
   # 下記は、Sheet1のマクロとして記載するイメージです。
Private Sub Worksheet_Change(ByVal Target As Range)
  ' A1に値が入力されていないとB1,C1,D1,E1,F1は、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  If Not Intersect(Target, Sheet1.Range("B1:F1")) Is Nothing Then
    If Sheet1.Range("A1") = "" Then
      MsgBox "大項目を入力して下さい"
    End If
  End If
End Sub

後は、ご自分で頑張ってください。
もし上記で分からないようでしたら再度質問を上げると誰かが回答してくれると思います。
どの部分が分からないかを整理して質問すると期待する回答が得やすいです。
・ツリー全体表示

【79710】Re:稼働管理のExcel化(ブック保護等)
発言  マナ  - 18/3/14(水) 12:43 -

引用なし
パスワード
   ▼りった さん:

もちろん承認も承認取消もマクロですよ
・ツリー全体表示

【79709】Re:稼働管理のExcel化(ブック保護等)
お礼  りった  - 18/3/14(水) 12:30 -

引用なし
パスワード
   回答ありがとうございます。
承認後にロックをかける発想は無かったです。
ただ、ロックの場合、承認後に間違いに気が付き修正する場合の手順がややこしくなりそうです。
ロックかけないやり方でうまくいかなかったら、参考にさせていただきます。
・ツリー全体表示

137 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free