|
▼さくら さん:
こんにちは。
>以下で望むとおりの結果が得られたのですが、VBSから呼び出して
VBSから呼び出す前に、そのVBAの構文、ちょっとおかしいですよ。
まず、それを直しておきましょう。
(1)とくに必要がない限り、変数はプロシージャ内に宣言する
というのは↓の部分です。
>Public ws0 As String
>Public ws1, ws2 As Worksheet
>Public i, k As Integer
5つの変数が、モジュールレベル(広域)変数として宣言してありますが、
Sub before()
というプロシージャ(ひとつのマクロのこと)の中でしか使わないのであれば
それらの変数はプロシージャ内に宣言して使ったほうが管理しやすい。
(2)変数のデータ型は 変数ごとに宣言すること
> ws1, ws2 As Worksheet
> i, k As Integer
というのは、
ws1 As Variant, ws2 As Worksheet
i As Variant, k As Integer
というのと同じこと。
上のWorkbook変数は Sub before() プロシージャの最初に
Dim ws1 As Worksheet, ws2 As Worksheet
と宣言してください。
(3)下の整数型ワーク変数は シートの行を格納する予定があるので、Integer
でなく、Long型で宣言してください。
Dim i As Long, k As Long
(4)↓は
>ws0 = Year(Date) & Right("0" & Month(Date), 2)
↓
ws0 = Format$(Date, "yyyyMM")
とも書けますね?
(どちらでも構いませんが)
(5)WorksheetFunction.And 構文を VB(A) の And構文 に直してください
> If Application.WorksheetFunction.And(ws1.Cells(i, 1) > ws2.Cells(2, 4), ws1.Cells(i, 1) < ws2.Cells(3, 4)) = True Then
> MsgBox ws1.Cells(i, 1).Value
> End If
まずは、こんなところで、 VBAでの構文チェックを実行してください。
|
|