[[20220114150801]] 『実行時エラー1004の解消』(hiro) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『実行時エラー1004の解消』(hiro)

以下のコードを作成したのですが、
実行時エラー1004(アプリケーション定義またはオブジェクトの定義エラー)が起きてしまいどのようにコードを書きなおしたらよいかわからず困っております。

不勉強で申し訳ありませんが、どなたかご教示お願いします。

データ削除試作品3のメソッドで起きているのですが、
どのように書き直したらよいでしょうか。

Sub リスト作成()

    Dim Buf As String
    Dim STR As String
    Dim Lost_Row As String
    Dim Directory As String
    Dim TempData

    Dim i As Long ' インデックス用の変数
    Dim z As Long ' インデックス用の変数

    Dim ws As Worksheet
    Dim sheet As Worksheet
    Set sheet = ActiveSheet ' 現在アクティブなシートを取得する1

    'dateシート作成
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = "date"
    sheet.Activate

    Set ws = ThisWorkbook.Worksheets("Master")
    Set da = ThisWorkbook.Worksheets("date")

    '最終行を所得
    Lost_Row = Worksheets("Master").Cells(3, 1).End(xlDown).Row
    Debug.Print Lost_Row

    'コピー用データ取得
    TempData = ws.Range(ws.Cells(3, 1), ws.Cells(Lost_Row, 15)).Value

    'detaシートにコピー
    da.Range(da.Cells(2, 1), da.Cells((Lost_Row - 1), 15)).Value = TempData

    'データ削除試作品
    データ削除試作品3

End Sub

'データ削除試作品3
Public Sub データ削除試作品3()

    Dim i1 As Long

    Dim MyArray As Variant

   Set da = ThisWorkbook.Worksheets("date")
   Worksheets("date").Activate ' 「Sheet1」のシートをアクティブ

    MyArray = da.Range(Cells(2, 15), da.Cells(Lost_Row - 1, 15))

    For i1 = 2 To Lost_Row

        MyArray(i, 15) = da.Replace(MyArray(i, 15), "Sum", "")

    Next i1

    da.Range(Cells(2, 1), da.Cells(Lost_Row - 1, 15)) = MyArray

End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


変数「da」が定義されていないからでは?
(初心者) 2022/01/14(金) 15:19

取り合えず、プログラムの先頭に"Option Explicit"を書くようにしたら?
(初心者) 2022/01/14(金) 15:22

 エラーはどこの行で発生しますか?
 MyArray = da.Range(Cells(2, 15), da.Cells(Lost_Row - 1, 15) だとしたら
 Lost_Rowになにも設定されていないからではないでしょうか。

(めいぷる) 2022/01/14(金) 15:35


初心者様ご指導ありがとうございます。

プログラムの先頭に"Option Explicit"を記載して再確認しました

めいぷ様 Lost_Rowには一応値が入っておりました。

Option Explicit
Public Sub リスト作成()

    Dim Buf As String
    Dim STR As String
    Dim Lost_Row As Long
    Dim Directory As String

    Dim TempData

    Dim i As Long ' インデックス用の変数
    Dim z As Long ' インデックス用の変数

    Dim da As Worksheet

    Dim sheet As Worksheet
    Set sheet = ActiveSheet ' 現在アクティブなシートを取得する1

    'シートがあるかどうか調べて、ある場合はそのシートを削除
    Delete_sheet

    'dateシート作成
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = "date"
    sheet.Activate

    Set ws = ThisWorkbook.Worksheets("Master")

    Set da = ThisWorkbook.Worksheets("date")

    '最終行を所得
    Lost_Row = Worksheets("Master").Cells(3, 1).End(xlDown).Row
    Debug.Print Lost_Row

    'コピー用データ取得
    TempData = ws.Range(ws.Cells(3, 1), ws.Cells(Lost_Row, 15)).Value

' Debug.Print 2
' kp.Range(kp.Cells(2, 1), kp.Cells((Lost_Row - 1), 15)).Value = TempData
'

    'detaシートにコピー
    da.Range(da.Cells(2, 1), da.Cells((Lost_Row - 1), 15)).Value = TempData

    Call データ削除試作品3(Lost_Row)

End Sub

'データ削除試作品3
Public Sub データ削除試作品3(Lost_Row As Long)

    Dim da As Worksheet
    Dim i1 As Long
    Dim MyArray As String

    Debug.Print 55
    Set da = ThisWorkbook.Worksheets("date")

   Debug.Print Lost_Row

   Debug.Print 66
    MyArray = da.Range(Cells(2, 15), da.Cells(Lost_Row - 1, 15))

    Debug.Print MyArray
'
'    For i1 = 2 To Lost_Row
'
'        MyArray(i, 15) = da.Replace(MyArray(i, 15), "Sum", "")
'
'    Next i1
'
'    da.Range(Cells(2, 1), da.Cells(Lost_Row - 1, 15)) = MyArray
'

End Sub

(hiro) 2022/01/14(金) 15:48


 Dim MyArray As String
 MyArray = da.Range(Cells(2, 15), da.Cells(Lost_Row - 1, 15))
 配列で宣言されていません。
(tkit) 2022/01/14(金) 15:54

 >Dim MyArray As String
 >MyArray = da.Range(Cells(2, 15), da.Cells(Lost_Row - 1, 15))

 もっと突っ込みどころがありますね。
 1)配列宣言していない
 2)String型に対しRangeオブジェクトを代入しようとしている
 3)Range内のcellsにシート指定が無い(ActiveSheetになっている)

 他のコードも合わせて確認してください

(tkit) 2022/01/14(金) 16:09


tkit 様 ご指摘ありがとうございます。

(hiro) 2022/01/14(金) 16:10


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.