鴻池さん色々力になっていただきありがとうございます。
下のように組みました。
Sub start_test()
Dim tobook As Workbook
Dim tosheet As Worksheet
Set tobook = ActiveWorkbook
Set tosheet = ActiveSheet
ファイルの読み込み_Click tobook, tosheet
End Sub
Private Sub ファイルの読み込み_Click(tobook As Workbook, tosheet As
Worksheet)
Dim tmp As Variant
Dim i As Integer
Dim msg As String
Dim ac As Workbook
tmp = Application.GetOpenFilename("Excel(*.xls),*.xls", , _
"交通量ファイルを複数選択してください", , True)
If (VarType(tmp) = vbBoolean) Then
Exit Sub
Else
For i = LBound(tmp) To UBound(tmp)
msg = msg & Str(i) & ":" & tmp(i) & vbCrLf
Next i
End If
MsgBox msg
For i = LBound(tmp) To UBound(tmp)
Workbooks.Open tmp(i)
Set ac = ActiveWorkbook
start_copysheet tobook, tosheet
ac.Close SaveChanges:=False
Next i
End Sub
Sub start_copysheet(tobook As Workbook, tosheet As Worksheet)
#Const beta = 1 '確認が不要の場合は値を0にする。
Dim lrto As Long
Dim lrfrom As Long
Const sh = "Sheet(1)" '特定のシート名はここで変更する。
For Each bk In Workbooks
tobook.Activate
tosheet.Select
lrto = find_last_row()
bk.Activate
If Not ThisWorkbook Is bk And Not tobook Is bk Then
On Error GoTo errnotfind
Sheets(sh).Select
lrfrom = find_last_row()
If lrfrom > 0 Then
Rows(Trim(Str(1)) & ":" & Trim(Str(lrfrom))).Select
Selection.Copy
tobook.Activate
tosheet.Activate
On Error GoTo errov
#If beta Then
Cells(lrto + 2, 1).Select
Selection.PasteSpecial
Application.CutCopyMode = False
Cells(lrto + 1, 1).Value = bk.Name & " + (シート名:
" & sh & ")"
Cells(lrto + 1, 1).Font.ColorIndex = 3
#Else
Cells(lrto + 1, 1).Select
Selection.PasteSpecial
#End If
End If
End If
ne:
Next
Exit Sub
errnotfind:
MsgBox bk.Name & " のシート " & sh & " が見つかりません。"
Resume ne
errov:
MsgBox "コピー行数が多すぎます。"
End Sub
Function find_last_row() As Long
Dim sm As Range
Dim pre As Range
Dim n, m As Integer
On Error GoTo errfs
Set pre = ActiveCell
Cells.SpecialCells(xlCellTypeConstants, 23).Select
Set sm = Selection
n = sm.Areas.Count
sm.Areas(n).Select
Set sm = Selection
If sm.Count > 1 Then
sm.End(xlDown).Select
n = Selection.Row
Else
n = Selection.Row
End If
fs:
On Error GoTo errse
Cells.SpecialCells(xlCellTypeFormulas, 23).Select
Set sm = Selection
m = sm.Areas.Count
sm.Areas(m).Select
Set sm = Selection
If sm.Count > 1 Then
sm.End(xlDown).Select
m = Selection.Row
Else
m = Selection.Row
End If
se:
pre.Activate
If n > m Then
find_last_row = n
Else
find_last_row = m
End If
Exit Function
errfs:
n = 0
Resume fs
errse:
m = 0
Resume se
End Function
を実行すると
Private Sub ファイルの読み込み_Click(tobook As Workbook, tosheet As
Worksheet)
の部分で
コンパイルエラー:プロシージャの宣言が、イベントまたはプロシージャの定義
と一致していません。
とメッセージが出ます。
解決するいい手段はありませんか?
"Yoshiaki Kawajiri" <yoshiaki...@toll.co.jp> wrote in message
news:3F3EC878...@toll.co.jp...
> 川尻@札幌です。
> Private Sub ファイルの読み込み_Click(tobook As Workbook, tosheet As
> Worksheet)
> の部分で
> コンパイルエラー:プロシージャの宣言が、イベントまたはプロシージャの定義
> と一致していません。
> とメッセージが出ます。
リーダだと変なところで改行が入ったりで,コピー貼り付けだけでは上手くいかない
場合があります。VBのエディターでコードがすべてエラーなしか確認して見て下さ
い。まあ,エラーの内容をみると,これが原因とは思え難いのですが。バージョンの
違いかな。バージョンは何ですか?
それでも,エラーが出るようであれば強引ですが,次の2つのsubの変数を下記のよ
うにvariantにしてみる。
Private Sub ファイルの読み込み_Click(tobook As Workbook, tosheet As
Worksheet)
を
Private Sub ファイルの読み込み_Click(tobook , tosheet)
と変更する。
Sub start_copysheet(tobook As Workbook, tosheet As Worksheet)
を
Sub start_copysheet(tobook, tosheet)
と変更する。
これでも,ダメならよく分かりません。見えないけど何か変なものが残っていると
か。それなら,全く新規のブックに書き直して見るとか。これくらいしか,今のとこ
ろ思いつきません。
--
******************************
keizi kounoike
******************************
Yoshiaki Kawajiriさんの<3F3EC878...@toll.co.jp>から
>Private Sub ファイルの読み込み_Click(tobook As Workbook, tosheet As
>Worksheet)
>の部分で
>コンパイルエラー:プロシージャの宣言が、イベントまたはプロシージャの定義
>と一致していません。
「ファイルの読み込み」という名前のボタンか何かが
存在してるんじゃないですか?
ボタン等のイベントプロシージャは、引数の数、型が決まっていますから、
それを変更してしまうとこのようなコンパイルエラーになります。
何でもいいですが関数名を変えたらいいんじゃないでしょうか。
個人的な好みになりますが、VBはイベントプロシージャ名や
Implementsしたメソッド名にアンダースコアを使用するので、
私は自分で定義するメソッド名にアンダースコアは使いません。
--
H.Uchimura
"H.Uchimura" <hu...@remus.dti.ne.jp> wrote in message
news:bhnqrj$r1a$1...@newsl.dti.ne.jp...
> H.Uchimuraです。
>
> Yoshiaki Kawajiriさんの<3F3EC878...@toll.co.jp>から
> >Private Sub ファイルの読み込み_Click(tobook As Workbook, tosheet As
> >Worksheet)
> >の部分で
> >コンパイルエラー:プロシージャの宣言が、イベントまたはプロシージャの定義
> >と一致していません。
>
> 「ファイルの読み込み」という名前のボタンか何かが
> 存在してるんじゃないですか?
> ボタン等のイベントプロシージャは、引数の数、型が決まっていますから、
> それを変更してしまうとこのようなコンパイルエラーになります。
> 何でもいいですが関数名を変えたらいいんじゃないでしょうか。
なるほど,そうゆうことですか。てっきり,すべて標準モジュールに書かれているも
のと思い込んでいました。組み合わせたとか言っていたから,標準モジュールの同一
モジュールに書いているものだと思い込んでいました。でないと,Private Sub な
ら他のモジュールからはアスセスできないはずだし。関数名を変えてもいいですが,
そのボタンに割り付けている
Private Sub ファイルの読み込み_Click(tobook As Workbook, tosheet As
Worksheet)
を元のコードに戻してもいいと思います。
Private Sub ファイルの読み込み_Click()
元のコード
end sub
ともかく,標準モジュールの同一モジュールに書く必要があります。Privateを使用
したいなら。