|
> 早速、ご指摘の内容について確認しました。
>こういう機能があるとは驚きました。すぐに、不具合な箇所がわかりました。
>ですが、対処の仕方がわかりません。
不具合の箇所が解って善かったですね?
この様な操作を、デバグ(バグ取り)と言ってコードを作る上ではしょちゅう行います
デバグ方法は人に因り、場合に因り違います
ただ、此れが出来ないとコードは組めません
Helpで、デバッグ、ブレークポイント、ウォッチ等を調べましょう!
此れにより、コードの修正が出来ます
まず、不具合に就いて説明して置きます
以下の部分で行っている操作に就いて
'最初にIndexに追加されたシート番号に就いて
With Worksheets(lngSheetNo)
'店舗名を配列に取得
vntData = Range(.Cells(clngDataTop, "B"), _
.Cells(clngSheetEnd, "B").End(xlUp)).Value
B列の65536行(シートの最終行)にセルポインタを置き
一般操作で言う、「End」キー、「↑」キーを押してデータの最終行求をめ、
B列5行からB列データの最終行の値をvntDataと言う配列に読み込んでいます
当方としては、B列に店舗名しか無いと思っていましたが、
実際には店舗名の下にも何か入力されていたのですね?
此れにより、空白のセルが「同一の店舗名がある」と認識されコードが終了していました
其処で、店舗名だけを分離するのに、店舗名の下に「合計」が有る様なので此れを利用します
以下の様に、「Function MakeStoreIndex」を修正して下さい
Private Function MakeStoreIndex(dicStore As Object, _
lngSheetNo As Long) As Boolean
' 店舗のIndexを作成
'店舗データの先頭行位置を定数宣言
Const clngDataTop As Long = 5
Dim i As Long
Dim vntData As Variant
'最初にIndexに追加されたシート番号に就いて
With Worksheets(lngSheetNo)
'店舗名を配列に取得
vntData = Range(.Cells(clngDataTop, "B"), _
.Cells(clngSheetEnd, "B").End(xlUp)).Value
End With
'店舗Indexに就いて
With dicStore
'店舗名の先頭から終まで繰り返し
For i = 1 To UBound(vntData, 1)
'配列に「合計」が出てきたらForを抜ける ★この行追加
If Trim(vntData(i, 1)) = "合計" Then '★この行追加
Exit For '★この行追加
End If '★この行追加
'店舗名に「店」が付いていない場合
If Right(vntData(i, 1), 1) <> "店" Then
'「店」を追加
vntData(i, 1) = vntData(i, 1) & "店"
End If
'Indexにi番目の店舗名が有るなら
If .Exists(vntData(i, 1)) Then
Beep
MsgBox "同一の店名が有ります"
Exit Function
'i番目の店舗名が無いなら
Else
'Indexに店舗名と行位置を追加
.Add vntData(i, 1), i + clngDataTop - 1
End If
Next i
End With
MakeStoreIndex = True
End Function
PS: 尚、ブレークポントに就いての仕様で、ビックリする物が有るので書いて置きます
VBEで、ブレークポントを設定したまま、ExcelのBookを保存した場合
次に、Bookを開いてマクロを実行すると、ブレークポントの表示が無いにも関わらず
以前にブレークポントを設定した位置で、コードがブレーク(中断)します
この場合、一旦実行をリセットして、中断した行にブレークポントを設定します
次に、このブレークポントを解除(●をクリックするか、「デバッグ」→
「すべてのブレークポントの解除」)し、「デバッグ」→「VBAProjectのコンパイル」
を行い、Bookを保存すると回避できます
後、04/5/15(土) 1:31の質問の中でコードが以下の様におかしく成っていますが
気を付けて下さい
'Indexに店舗名と行位置を追加
.Add vntData(i, 1), i + clngDataTop – 1 ・・・6.
またこのデータは、思わぬ所にスペースだの、何だの、まだ何か有りそうな気がしますので
何か有れば諦めずに、聞いて下さい
|
|