[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『プロシージャの呼び出し、または引数が不正です』(たかと)
特定のモジュールのみでプロシージャの呼び出し、または引数が不正です
とメッセージが出ます
標準モジュールAとBがあった時
Aでエラーとなり、Bでは正常に動きます
Aにはほかにプロシージャをいくつもいれています
ActiveSheet.Range("C" & RowB3 + 1 & ":L" & RowB4).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Header:=xlNo
この部分でエラーになります
考えられる原因はどんなものがあるのでしょう
宜しくお願いいたします
< 使用 Excel:unknown、使用 OS:unknown >
可能性の一つとして。 シートの保護がかかっているとそのエラーになるようだがAの場合にはシートの保護が かかっていたりしないだろうか? もし、かかっていたりしない場合でもAの場合とBの場合でシートの条件が違っていたりしないだろうか? (ねむねむ) 2018/11/30(金) 13:14
Columunsで10列目まで指定してるのに、 データが9列目までしかなかったりするとそのエラーが出ます。
ActiveSheetとなっているので、 モジュールが違うことが原因ではなくてシートが違ってるのだと思います。 もしくは、データが10列じゃない時がたまにあるとか??
ねむねむさんの意見が気になってやってみたら 保護されたシートに対してこのコマンドは実行できません と出ました。バージョンによるんでしょうか。 (TAKA) 2018/11/30(金) 13:33
こちらでは2010でシート保護の状態で実行して >実行時エラー1004 プロシージャの呼び出し、または引数が不正です となっている。 また、全くデータのない白紙のシートでもエラーにはなっていない。 そこらへんもバージョンの違いがあるのだろうか? (ねむねむ) 2018/11/30(金) 13:44
>Columunsで10列目まで指定してるのに、 >データが9列目までしかなかったりするとそのエラーが出ます。 ああ、これは RANGE("C1:E3") とデータの指定範囲が3列しかないのにColumns:=で4を指定しているとかの場合か。 (ねむねむ) 2018/11/30(金) 13:49
もそうですし、 Range("C1:E3") とデータの指定範囲が3列なのにE列が全部空欄の時も出ます。 (TAKA) 2018/11/30(金) 13:54
Private Sub narabikae()
'列の順番を入れ替え
Cells.Replace vbLf, ":" Dim rng(COL_COUNT) As Range Dim aryOrder As Variant Dim i As Integer
'列を配列にセット For i = 1 To COL_COUNT Set rng(i) = Columns(i) Next '並び順をセット aryOrder = Split(ORDER, ",") For i = 1 To COL_COUNT '移動元列と移動先が一緒か判断(一緒であれば移動処理しない) If rng(aryOrder(i)).Column <> i Then '移動処理 rng(aryOrder(i)).Cut Columns(i).Insert xlShiftToRight End If Next End Sub この別の処理用に使用しているプロシージャの
Option Base 1
Const COL_COUNT As Integer = 11
Const ORDER As String = ",10,11,1,2,3,4,5,6,7,8,9"
ここを削除すると正常に動作します
この処理は一連の処理の中で行っているため消すわけにはいきません
どのように回避すればいいでしょうか?
宜しくお願いいたします
(たかと) 2018/11/30(金) 13:55
私は2013で、 白紙のシートではエラーになります。
やっぱりバージョンの違いがあるみたいですね (TAKA) 2018/11/30(金) 13:56
Const ORDER As String = ",10,11,1,2,3,4,5,6,7,8,9"
を
Const ORDER As String = "10,11,1,2,3,4,5,6,7,8,9"
にしたら動きませんか? 10の前のカンマが原因では。。。 (TAKA) 2018/11/30(金) 14:00
>データの指定範囲が3列なのにE列が全部空欄の時も出ます。 あ、本当だ。 全くデータのない場合だとエラーにならなかったのでデータのある列とデータのない列が 混在している場合を試していなかった。 (ねむねむ) 2018/11/30(金) 14:03
Option Base 1にしていても、Variant型にSplitすると、0番目から格納されているようですし、カラム指定の個数にも影響しているのかもです。
(???) 2018/11/30(金) 14:12
RemoveDuplicatesメソッドはOption Baseを見ていないという可能性を思うと、Excelのバグっぽい動作ですが、Columns指定も同様になっていると仮定。 10列あるのにColumnsは11個ある、という状態になって、エラーになっているのでは?、と思いました。
(???) 2018/11/30(金) 14:19
作業工程を2段階に分けて
作業1モジュールにPrivate Sub narabikaeを含む作業
作業2モジュールにそれ以降の作業
と分けて動かしたところ正常動作しました
とりあえず作業を2段階に分けて対応することにしました
皆様お騒がせしました
(たかと) 2018/11/30(金) 14:44
RemoveDuplicate の第一因数の配列は 0 Base の 1D 配列でなければなりません。
Option Base 1 に拘るなら
VBA.Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)に変更
(seiya) 2018/11/30(金) 15:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.