/ / VBAオープンエクセル、変更(ランク)、閉じるエクセル - エクセル、エクセル、エクセル

VBAオープンエクセル、変更(ランク)、閉じるエクセル - エクセル、エクセル、エクセル

私はExcel(2013)を使用して既存のExcelドキュメントを削除し、ランキングコードを追加して変更してから閉じます。私のコードはExcelドキュメントを開きますが、ByVal Target As Rangeセクションの実装方法がわかりません。このマクロをマクロ内に入れるには、VBAについて十分に分かりません。提案?

Sub Macro1()
Workbooks.Open Filename:= _
"C:UsersXDesktoptestprogram2.xlsx"

Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 13 Or Target.Cells.Count > 1 Then Exit Sub
"Dim SortRange As Range
Set SortRange = Range(("A1"), Cells(Rows.Count, 13).End(xlUp))
SortRange.Sort Key1:=Range("M2"), Order1:=xlAscending, Header:=xlYes
End Sub

"File to Macro (Should be same as above)

ActiveWorkbook.SaveAs Filename:= _
"C:UsersXDesktoptestprogram2.xlsx" _
, AccessMode:=xlShared
ActiveWorkbook.Close
End Sub

回答:

回答№1は0

おもしろい試みだが間違っている。 JavaScriptや何らかのルーチンを入れ子にすることができるもの(JSはクロージャを持っている)から来なければなりません。悲しいことに、VBAのようなファンキーなものはありません。外側のサブの外側にある内側のサブを取り外し、関連するシートの「後ろ」に配置してください。


回答№2の場合は0

最初のサブの中から2番目のサブを呼び出しますが、それらを内部に入れません。

Sub Macro1()
Workbooks.Open Filename:= _
"C:UsersXDesktoptestprogram2.xlsx"

Worksheets("program2.xlsx").Activate
Call Worksheet_Change

ActiveWorkbook.SaveAs Filename:= _
"C:UsersXDesktoptestprogram2.xlsx" _
, AccessMode:=xlShared
ActiveWorkbook.Close
End Sub
Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 13 Or Target.Cells.Count > 1 Then Exit Sub
"Dim SortRange As Range
Set SortRange = Range(("A1"), Cells(Rows.Count, 13).End(xlUp))
SortRange.Sort Key1:=Range("M2"), Order1:=xlAscending, Header:=xlYes
End Sub