Excel VBA質問箱 IV

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

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


1407 / 13645 ツリー ←次へ | 前へ→

【74651】名前の こばねこ 13/8/23(金) 11:04 質問[未読]
【74652】Re:名前の ウッシ 13/8/23(金) 13:34 回答[未読]
【74655】名前の定義文字化け こばねこ 13/8/23(金) 15:25 発言[未読]
【74656】Re:名前の定義文字化け ウッシ 13/8/23(金) 15:33 回答[未読]
【74657】Re:名前の定義文字化け こばねこ 13/8/26(月) 9:33 発言[未読]
【74658】Re:名前の定義文字化け ウッシ 13/8/26(月) 11:08 回答[未読]
【74659】Re:名前の定義文字化け こばねこ 13/8/26(月) 13:09 発言[未読]
【74660】Re:名前の定義文字化け ウッシ 13/8/26(月) 13:18 回答[未読]
【74664】Re:名前の定義文字化け こばねこ 13/8/27(火) 14:02 お礼[未読]

【74651】名前の
質問  こばねこ  - 13/8/23(金) 11:04 -

引用なし
パスワード
   お世話になります。

エクセルで申請書を作成して、各人でコピーして使用するように
していますが、【同じ名前があります、使用しますか?】的なインフォメーションが出て、何十回とOKをし続けないといけない現象に悩まされいます。

名前の定義をした覚えがないのに、いつのまにか勝手にたくさんの名前がついています。

下記コードにてある程度の名前は削除できるのですが、
文字化けしているものは削除できません。

いい方法がございましたら、ご教授よろしくお願い致します。

Sub Check_NM_1()
  Dim NM As Name
  Debug.Print ActiveWorkbook.Name & vbCrLf & ActiveWorkbook.Names.Count
  For Each NM In ActiveWorkbook.Names
   On Error Resume Next
   Debug.Print "Del : " & NM.Name
   NM.Delete
   On Error GoTo 0
  Next
End Sub

【74652】Re:名前の
回答  ウッシ  - 13/8/23(金) 13:34 -

引用なし
パスワード
   こんにちは

excel 名前定義 削除 とかでWEB検索すると参考になるサイトが見つかります。

でも、それで解決するのかどうか動作確認出来ないので分かりません。

では。

▼こばねこ さん:
>お世話になります。
>
>エクセルで申請書を作成して、各人でコピーして使用するように
>していますが、【同じ名前があります、使用しますか?】的なインフォメーションが出て、何十回とOKをし続けないといけない現象に悩まされいます。
>
>名前の定義をした覚えがないのに、いつのまにか勝手にたくさんの名前がついています。
>
>下記コードにてある程度の名前は削除できるのですが、
>文字化けしているものは削除できません。
>
>いい方法がございましたら、ご教授よろしくお願い致します。
>
>Sub Check_NM_1()
>  Dim NM As Name
>  Debug.Print ActiveWorkbook.Name & vbCrLf & ActiveWorkbook.Names.Count
>  For Each NM In ActiveWorkbook.Names
>   On Error Resume Next
>   Debug.Print "Del : " & NM.Name
>   NM.Delete
>   On Error GoTo 0
>  Next
>End Sub

【74655】名前の定義文字化け
発言  こばねこ  - 13/8/23(金) 15:25 -

引用なし
パスワード
   ▼ウッシ さん:

こんにちは
ご回答ありがとうございます。
いろいろ調べたのですが、文字化けを削除する方法が
いまひとつわからない状況です。

そうですよね。動作確認のしようがないですよね。
私も、どうしたらこの現象が起こるかもわからないので。。。

現象が起こる原因がわかれば、対処のしようもあるかと思うのですが。。。
3シートまでは何も起こらないのに、4シート目をコピーすると
突然現れたりします。


>こんにちは
>
>excel 名前定義 削除 とかでWEB検索すると参考になるサイトが見つかります。
>
>でも、それで解決するのかどうか動作確認出来ないので分かりません。
>
>では。
>
>▼こばねこ さん:
>>お世話になります。
>>
>>エクセルで申請書を作成して、各人でコピーして使用するように
>>していますが、【同じ名前があります、使用しますか?】的なインフォメーションが出て、何十回とOKをし続けないといけない現象に悩まされいます。
>>
>>名前の定義をした覚えがないのに、いつのまにか勝手にたくさんの名前がついています。
>>
>>下記コードにてある程度の名前は削除できるのですが、
>>文字化けしているものは削除できません。
>>
>>いい方法がございましたら、ご教授よろしくお願い致します。
>>
>>Sub Check_NM_1()
>>  Dim NM As Name
>>  Debug.Print ActiveWorkbook.Name & vbCrLf & ActiveWorkbook.Names.Count
>>  For Each NM In ActiveWorkbook.Names
>>   On Error Resume Next
>>   Debug.Print "Del : " & NM.Name
>>   NM.Delete
>>   On Error GoTo 0
>>  Next
>>End Sub

【74656】Re:名前の定義文字化け
回答  ウッシ  - 13/8/23(金) 15:33 -

引用なし
パスワード
   こんにちは

://alphafocus.cocolog-nifty.com/blog/2011/05/tips-excel-14b4.html

に掲載されているコードとかは使えないですか?

コピー元の申請書シートのあるブックで動かせば名前定義が消えるのかと思います。
そのきれいになった状態の申請書シートをコピーするのなら
【同じ名前があります、使用しますか?】的な状態にならないのでは?

では

▼こばねこ さん:
>▼ウッシ さん:
>
>こんにちは
>ご回答ありがとうございます。
>いろいろ調べたのですが、文字化けを削除する方法が
>いまひとつわからない状況です。
>
>そうですよね。動作確認のしようがないですよね。
>私も、どうしたらこの現象が起こるかもわからないので。。。
>
>現象が起こる原因がわかれば、対処のしようもあるかと思うのですが。。。
>3シートまでは何も起こらないのに、4シート目をコピーすると
>突然現れたりします。
>
>
>>こんにちは
>>
>>excel 名前定義 削除 とかでWEB検索すると参考になるサイトが見つかります。
>>
>>でも、それで解決するのかどうか動作確認出来ないので分かりません。
>>
>>では。
>>
>>▼こばねこ さん:
>>>お世話になります。
>>>
>>>エクセルで申請書を作成して、各人でコピーして使用するように
>>>していますが、【同じ名前があります、使用しますか?】的なインフォメーションが出て、何十回とOKをし続けないといけない現象に悩まされいます。
>>>
>>>名前の定義をした覚えがないのに、いつのまにか勝手にたくさんの名前がついています。
>>>
>>>下記コードにてある程度の名前は削除できるのですが、
>>>文字化けしているものは削除できません。
>>>
>>>いい方法がございましたら、ご教授よろしくお願い致します。
>>>
>>>Sub Check_NM_1()
>>>  Dim NM As Name
>>>  Debug.Print ActiveWorkbook.Name & vbCrLf & ActiveWorkbook.Names.Count
>>>  For Each NM In ActiveWorkbook.Names
>>>   On Error Resume Next
>>>   Debug.Print "Del : " & NM.Name
>>>   NM.Delete
>>>   On Error GoTo 0
>>>  Next
>>>End Sub

【74657】Re:名前の定義文字化け
発言  こばねこ  - 13/8/26(月) 9:33 -

引用なし
パスワード
   ▼ウッシ さん:
おはようございます。
お返事遅くなり、すみません。

下記も試したのですが、うまく起動しませんでした。
VBA素人のため下記URLのコードの内容もよく理解できず、
それをいじって作り変えることもできません。。。。。

>こんにちは
>
>://alphafocus.cocolog-nifty.com/blog/2011/05/tips-excel-14b4.html
>
>に掲載されているコードとかは使えないですか?
>
>コピー元の申請書シートのあるブックで動かせば名前定義が消えるのかと思います。
>そのきれいになった状態の申請書シートをコピーするのなら
>【同じ名前があります、使用しますか?】的な状態にならないのでは?
>
>では
>
>▼こばねこ さん:
>>▼ウッシ さん:
>>
>>こんにちは
>>ご回答ありがとうございます。
>>いろいろ調べたのですが、文字化けを削除する方法が
>>いまひとつわからない状況です。
>>
>>そうですよね。動作確認のしようがないですよね。
>>私も、どうしたらこの現象が起こるかもわからないので。。。
>>
>>現象が起こる原因がわかれば、対処のしようもあるかと思うのですが。。。
>>3シートまでは何も起こらないのに、4シート目をコピーすると
>>突然現れたりします。
>>
>>
>>>こんにちは
>>>
>>>excel 名前定義 削除 とかでWEB検索すると参考になるサイトが見つかります。
>>>
>>>でも、それで解決するのかどうか動作確認出来ないので分かりません。
>>>
>>>では。
>>>
>>>▼こばねこ さん:
>>>>お世話になります。
>>>>
>>>>エクセルで申請書を作成して、各人でコピーして使用するように
>>>>していますが、【同じ名前があります、使用しますか?】的なインフォメーションが出て、何十回とOKをし続けないといけない現象に悩まされいます。
>>>>
>>>>名前の定義をした覚えがないのに、いつのまにか勝手にたくさんの名前がついています。
>>>>
>>>>下記コードにてある程度の名前は削除できるのですが、
>>>>文字化けしているものは削除できません。
>>>>
>>>>いい方法がございましたら、ご教授よろしくお願い致します。
>>>>
>>>>Sub Check_NM_1()
>>>>  Dim NM As Name
>>>>  Debug.Print ActiveWorkbook.Name & vbCrLf & ActiveWorkbook.Names.Count
>>>>  For Each NM In ActiveWorkbook.Names
>>>>   On Error Resume Next
>>>>   Debug.Print "Del : " & NM.Name
>>>>   NM.Delete
>>>>   On Error GoTo 0
>>>>  Next
>>>>End Sub

【74658】Re:名前の定義文字化け
回答  ウッシ  - 13/8/26(月) 11:08 -

引用なし
パスワード
   こんにちは

申請書のあるブックでAlt+F11キーでVBE画面を開いて標準モジュールを挿入して

Public Declare Function SetTimer Lib "user32.dll" _
  (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _
  ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32.dll" _
  (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Sub DeleteDefinedNames()

  Dim beforeReferenceStyle As Variant
  beforeReferenceStyle = Application.ReferenceStyle

  Dim timerID As Long
  timerID = SetTimer(0, 0, 100, AddressOf TimerProc)

  If beforeReferenceStyle = xlR1C1 Then
    Application.ReferenceStyle = xlA1
  Else
    Application.ReferenceStyle = xlR1C1
  End If

  Dim n As Name
  For Each n In ActiveWorkbook.Names
    If Not n.Name Like "*!Print_Area" And _
      Not n.Name Like "*!Print_Titles" Then
      n.Delete
    End If
  Next

  Application.ReferenceStyle = beforeReferenceStyle

  KillTimer 0, timerID

End Sub

Private Sub TimerProc()

  Dim hwnd As Long
  hwnd = FindWindow("bosa_sdm_XL9", "名前の重複")

  If hwnd > 0 Then
    SendKeys getRandomString(3, 20), 10
    SendKeys "{ENTER}"
  End If

End Sub

Private Function getRandomString(min As Long, max As Long) As String

  Dim s As String
  Dim i As Long

  max = Int(max * Rnd)

  For i = 0 To min + max
    Randomize
    s = s & Chr(65 + Int(26 * Rnd))
  Next

  getRandomString = s

End Function

のコードを貼り付けて、マクロ実行で「DeleteDefinedNames」を実行するだけですけど、
うまく起動しないとは、どのような状態でしょうか?

【74659】Re:名前の定義文字化け
発言  こばねこ  - 13/8/26(月) 13:09 -

引用なし
パスワード
   ▼ウッシ さん:
返信ありがとうございます。
以前、ネットで調べてコピペで起動したときは、
置き換えの【OK】ボタンを途中から手動で押さなければならなかったのですが、
下記コードをコピペで起動したら、問題なく動きました。
ありがとうございます!

ちなみに、チラチラ動作が見えるのは
Application.ScreenUpdating = False
では消せないのですか?


>こんにちは
>
>申請書のあるブックでAlt+F11キーでVBE画面を開いて標準モジュールを挿入して
>
>Public Declare Function SetTimer Lib "user32.dll" _
>  (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _
>  ByVal lpTimerFunc As Long) As Long
>Public Declare Function KillTimer Lib "user32.dll" _
>  (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
>Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
>  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
>
>Sub DeleteDefinedNames()
>
>  Dim beforeReferenceStyle As Variant
>  beforeReferenceStyle = Application.ReferenceStyle
>
>  Dim timerID As Long
>  timerID = SetTimer(0, 0, 100, AddressOf TimerProc)
>
>  If beforeReferenceStyle = xlR1C1 Then
>    Application.ReferenceStyle = xlA1
>  Else
>    Application.ReferenceStyle = xlR1C1
>  End If
>
>  Dim n As Name
>  For Each n In ActiveWorkbook.Names
>    If Not n.Name Like "*!Print_Area" And _
>      Not n.Name Like "*!Print_Titles" Then
>      n.Delete
>    End If
>  Next
>
>  Application.ReferenceStyle = beforeReferenceStyle
>
>  KillTimer 0, timerID
>
>End Sub
>
>Private Sub TimerProc()
>
>  Dim hwnd As Long
>  hwnd = FindWindow("bosa_sdm_XL9", "名前の重複")
>
>  If hwnd > 0 Then
>    SendKeys getRandomString(3, 20), 10
>    SendKeys "{ENTER}"
>  End If
>
>End Sub
>
>Private Function getRandomString(min As Long, max As Long) As String
>
>  Dim s As String
>  Dim i As Long
>
>  max = Int(max * Rnd)
>
>  For i = 0 To min + max
>    Randomize
>    s = s & Chr(65 + Int(26 * Rnd))
>  Next
>
>  getRandomString = s
>
>End Function
>
>のコードを貼り付けて、マクロ実行で「DeleteDefinedNames」を実行するだけですけど、
>うまく起動しないとは、どのような状態でしょうか?

【74660】Re:名前の定義文字化け
回答  ウッシ  - 13/8/26(月) 13:18 -

引用なし
パスワード
   こんにちは

>ちなみに、チラチラ動作が見えるのは
>Application.ScreenUpdating = False
>では消せないのですか?

SendKeys を使っているので厳しいのでは?

SendKeysはちょっと動作が不安定なので最初はダメだったのかも知れないですね。

【74664】Re:名前の定義文字化け
お礼  こばねこ  - 13/8/27(火) 14:02 -

引用なし
パスワード
   ▼ウッシ さん:
こんにちは。
ありがとうございます。
SendKeysがよくわからないのですが、
不安定なんですね。
でも、今のところこの方法しかなさそうなので
このコードで対処しようと思います。

ありがとうございました。

>こんにちは
>
>>ちなみに、チラチラ動作が見えるのは
>>Application.ScreenUpdating = False
>>では消せないのですか?
>
>SendKeys を使っているので厳しいのでは?
>
>SendKeysはちょっと動作が不安定なので最初はダメだったのかも知れないですね。

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