Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
別シートの最終行を取得からの続き
投稿日時: 19/06/25 12:05:23
投稿者: vaioyuki

https://www.moug.net/faq/viewtopic.php?t=78368
 
上記で質問しましたものです。
 
最終行を取得して計算式を行うに関しては思ったものが出来ました。
ありがとうございます。
 
こちらで質問させていただいたときは再修業を取得したいシートにもデータが入っていて単独で動いていて確認したのですが、
こちらを現在動いているソースに組み込んだところ、
 
実行時エラー9
インデックスが有効範囲にありません。
 
になり、
 
With Worksheets("パターンC")  ※質問したときはDWHシートでしたがパターンCの方がデータ数が多いのでこちらに変更しました
 
上記で止まります。
 
それまでのはこちらになります。
 
 
Private Sub Btn_ok_Click()
Dim Dat_riyou As Date '利用月
Dim Bln_open As Boolean 'ファイルを開いたかどうか
Dim Lng_for As Long 'For用
 
Dim lngLastDataRow As Long
Dim lngFirstFormuraRow As Long
Dim lngLastFormuraRow As Long
 
If Txt_csv.Value = "" Then 'CSVファイルのパスがなければ
  MsgBox Lbl_csv.Caption & "ファイルを選択してください"
  Exit Sub '帰る
End If
If Txt_dwh.Value = "" Then 'DWHファイルのパスがなければ
  MsgBox Lbl_dwh.Caption & "ファイルを選択してください"
  Exit Sub '帰る
End If
If IsDate(Txt_riyou.Value) Then 'テキストボックスが日付なら
  Dat_riyou = CDate(Txt_riyou.Value) '利用月
Else
  MsgBox Lbl_riyou.Caption & "の日付があやしいです"
  Exit Sub '帰る
End If
With Application
  .ScreenUpdating = False '画面更新、オフ
  .Calculation = xlManual '再計算、手動
  .ReferenceStyle = xlA1 'A1形式
End With
Bln_open = True 'ファイルを開いた
On Error Resume Next 'エラー処理、無視
If Not Mdl_function.openCSV(Sht_csv, Array(2, 2, 2, 2, 2, 2, 2), Txt_csv.Value) Then 'CSVファイルが開けなければ
  MsgBox Lbl_csv.Caption & "ファイルが開けませんでした"
  Bln_open = False 'ファイルを開かない
End If
If Dir(Txt_dwh.Value) = "" Then 'DWHファイル名がなければ
  MsgBox Lbl_csv.Caption & "ファイルが開けませんでした"
  Bln_open = False 'ファイルを開かない
Else
  Workbooks.Open Filename:=Txt_dwh.Value
  If ActiveWorkbook.Name <> Dir(Txt_dwh.Value) Then
    MsgBox Lbl_csv.Caption & "ファイルが開けませんでした"
    Bln_open = False 'ファイルを開かない
  End If
End If
On Error GoTo 0 'エラー処理、解除
If Not Bln_open Then 'ファイルを開かなければ
  Application.Calculation = xlAutomatic '再計算、自動
  Application.ScreenUpdating = True '画面更新、オン
  Exit Sub '帰る
End If
ActiveWorkbook.Sheets(1).Cells.Copy Sht_dwh.Cells(1, 1) 'DWHファイルの内容をDWHシートにコピー
With Sht_csv
  .Cells(1, 1).CurrentRegion.Sort _
  Key1:=.Cells(1, 28), Order1:=xlAscending, _
  Key2:=.Cells(1, 1), Order2:=xlAscending, _
  Key3:=.Cells(1, 3), Order3:=xlAscending, _
  Header:=xlYes '並べ替え(計上オーダ(昇順)→第一階層部門(昇順)→第二階層部門(昇順)、タイトル行あり)
End With
  
With Worksheets("パターンC")
    lngLastDataRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
 
 
以前に質問した、PrivateとSubの違いでこうなるのでしょうか?
 
気になるのはシート名に書かれているのが Sht_csv(パターンC)となっています。
 
 
何度も申し訳ありませんがよろしくお願いします。

回答
投稿日時: 19/06/25 14:47:09
投稿者: Suzu

引用:
気になるのはシート名に書かれているのが Sht_csv(パターンC)となっています。

何の話?シート名に書かれている?
シート名 が「Sht_csv(パターンC)」と言う事?
 
 
 
vaioyuki さんの引用:
実行時エラー9
インデックスが有効範囲にありません。
 
With Worksheets("パターンC")
  ※質問したときはDWHシートでしたがパターンCの方がデータ数が多いのでこちらに変更しました

 
【インデックスが有効範囲にありません】
https://www.moug.net/faq/viewtopic.php?t=78298
 
メッセージは同じではないのですか?
 
前回のインデックスが有効範囲にありません での、simpleさんの話の内容を理解し
改めて質問する前に確認した上でご質問されているのでしょうか。
 
 
 
引用:
以前に質問した、PrivateとSubの違いでこうなるのでしょうか?

 
マクロとVBAの違い
https://www.moug.net/faq/viewtopic.php?t=78311
 
Sub ? Publicでなくて?
 
 
なんか色々残念です。。今までの回答は、何も身に付いていない様で。。
すみません。回答から降りさせていただきます。

回答
投稿日時: 19/06/25 15:10:40
投稿者: sk

引用:
実行時エラー9
インデックスが有効範囲にありません。
  
になり、
  
With Worksheets("パターンC")  ※質問したときはDWHシートでしたがパターンCの方がデータ数が多いのでこちらに変更しました
  
上記で止まります。

そのステートメントに入った時点でのアクティブブックに
[パターンC]という名前のワークシートが存在しないからでは。
 
引用:
If Dir(Txt_dwh.Value) = "" Then 'DWHファイル名がなければ
  MsgBox Lbl_csv.Caption & "ファイルが開けませんでした"
  Bln_open = False 'ファイルを開かない
Else
  Workbooks.Open Filename:=Txt_dwh.Value
  If ActiveWorkbook.Name <> Dir(Txt_dwh.Value) Then
    MsgBox Lbl_csv.Caption & "ファイルが開けませんでした"
    Bln_open = False 'ファイルを開かない
  End If
End If

・ワークシート[DWH]があるのはどのブックなのか。
 
・ワークシート[パターンC]があるのはどのブックなのか。
 
・Workbooks オブジェクトの Open メソッドによって
 開かれるのはどのブックなのか。
 
以上について明記されることをお奨めします。

投稿日時: 19/06/25 15:54:29
投稿者: vaioyuki

気分を害してすいません。
まだ理解が足りていません。
そもそも、
シート名もどちらを使うのが正しいのかもわかってません。
画像が貼り付けられないのでまた伝わらないかもしれませんが、
VBAの画面、プロジェクトエクスプローラーに表記されているシート名?が、
 
Sheet1(集計)
Sht_csv(パターンC)
Sht_dwh(DWH)
Sht_macro(マクロ)
 
となっていて、私の中ではシート名を[Sht_csv]を使用するのが正しいのか[パターンC]を使用するのが正しいのかがわからず、
 
With Worksheets("パターンC")
 
ここで止まったので、
先ほど質問したときはモジュールにSubで書いて動かしてみて成功して、
今度は実際にマクロシートに書かれているコードに付け足したらエラーになったので Private で書かれているから?の疑問でした。
 
With Worksheets("Sht_csv")
 
上記でも念のため動かしてみましたが駄目でした。。。
 
 
 

引用:
・ワークシート[DWH]があるのはどのブックなのか。
  
・ワークシート[パターンC]があるのはどのブックなのか。

 
全てひとつのブックです。
同じブックで書かれています。

回答
投稿日時: 19/06/25 16:08:23
投稿者: sk

引用:
VBAの画面、プロジェクトエクスプローラーに表記されているシート名?が、
  
Sheet1(集計)
Sht_csv(パターンC)
Sht_dwh(DWH)
Sht_macro(マクロ)
  
となっていて、私の中ではシート名を[Sht_csv]を使用するのが正しいのか
[パターンC]を使用するのが正しいのかがわからず、

シートモジュールの名前」と「ワークシートの名前」の違い。
 
引用:
全てひとつのブックです。
同じブックで書かれています。

そのマクロ有効ブック自身、という意味でしょうか。
 
引用:
With Worksheets("パターンC")

With ThisWorkbook.Worksheets("パターンC")

投稿日時: 19/06/25 16:59:03
投稿者: vaioyuki

ありがとうございます。
出来ました!!
 
やっぱりまだシートの使い分けが私には難しいです。