需要根据选择更加动态的宏
Macro that needs to be more dynamic based on selection
我有这段代码,我发现自己创建了 12 次和模块,因为我有 12 所不同的大学,每所大学都有唯一的名称。
我想更动态一点,所以当我按下一个特定的文本框(我使用文本框并绑定到宏而不是按钮)时,代码会捕捉到它,就像在 Criteria 中一样,我已经厌倦了使用 Shapes.Range(Array("DS")).Select 但无法弄清楚如何将其包含在标准中。
Atm 我制作了 12 个模块,在下面的每个代码中,更改了 Criteria:= 并且每个宏都绑定到每个按钮,但我认为应该可以有一个代码,12 个框,具体取决于哪个框什么名字(我已经全部命名)代码应该进行排序和过滤。
我非常感谢你们的帮助,很抱歉在这方面如此初学者..
如果有人想知道这个工作簿的用途(我有很多模块和宏 运行 ofc 用于不同的功能)是什么,导入数据,格式化,删除和清理很多东西,然后制作一个动态 table 因为源数据每天都在变化,然后根据对大学的过滤,导出为 none vba/macro 文件(我生成一个新的 sheet我想要的信息,导出,保存)然后邮寄出去,删除 sheet,清理所有内容(我的 woorkbook)。
Sub SortExport_DS()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets.Add(After:=Sheets("PR11_P3")).Name = "R11 (P3)" & " fram t.o.m. " & Format(Now - 1, "YYYY-MM-DD")
Sheets("PR11_P3").Select
ActiveSheet.ListObjects("PR11_P3_Tabell").Range.AutoFilter Field:=5, _
Criteria1:="S, Daniel"
Range("PR11_P3_Tabell[#All]").Select
Selection.Copy
Sheets(Sheets.Count).Select
Range("A1").Select
ActiveSheet.Paste
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Dim Table As ListObject
Set Table = ActiveSheet.ListObjects.Add(xlSrcRange, _
Range("A10").CurrentRegion, , xlYes)
With Table
.Name = "PR11_P3_Temp_Tabell"
End With
Sheets("PR11_P3").Select
Application.CutCopyMode = False
Range("A10").Select
End Sub
经过测试并适用于我:
Sub SortExportSelected()
Dim txt, ws As Worksheet, wb As Workbook, rVis As Range, wsName As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = ActiveWorkbook 'or ThisWorkbook
'get the text from the clicked-on shape
txt = ActiveSheet.Shapes(Application.Caller).TextFrame2.TextRange.Text
wsName = "R11 (P3)" & " fram t.o.m. " & Format(Now - 1, "YYYY-MM-DD")
'if a sheet with this name already exists, delete it
Application.DisplayAlerts = False
On Error Resume Next 'ignore error if no matched sheet
ThisWorkbook.Sheets(wsName).Delete
On Error GoTo 0 'stop ignoring errors
Application.DisplayAlerts = True
Set ws = wb.Worksheets.Add(After:=Sheets("PR11_P3")) 'get reference to the added sheet
ws.Name = wsName
With wb.Worksheets("PR11_P3").ListObjects("PR11_P3_Tabell")
.Range.AutoFilter Field:=5, Criteria1:=txt 'use `txt` for filtering
.Range.SpecialCells(xlCellTypeVisible).Copy ws.Range("A1")
End With
With ws.ListObjects.Add(xlSrcRange, ws.Range("A1").CurrentRegion, , xlYes)
.Range.EntireColumn.AutoFit
.Name = "PR11_P3_Temp_Tabell"
End With
With wb.Worksheets("PR11_P3")
.Select
.Range("A10").Select
End With
Application.CutCopyMode = False
End Sub
我有这段代码,我发现自己创建了 12 次和模块,因为我有 12 所不同的大学,每所大学都有唯一的名称。
我想更动态一点,所以当我按下一个特定的文本框(我使用文本框并绑定到宏而不是按钮)时,代码会捕捉到它,就像在 Criteria 中一样,我已经厌倦了使用 Shapes.Range(Array("DS")).Select 但无法弄清楚如何将其包含在标准中。
Atm 我制作了 12 个模块,在下面的每个代码中,更改了 Criteria:= 并且每个宏都绑定到每个按钮,但我认为应该可以有一个代码,12 个框,具体取决于哪个框什么名字(我已经全部命名)代码应该进行排序和过滤。
我非常感谢你们的帮助,很抱歉在这方面如此初学者..
如果有人想知道这个工作簿的用途(我有很多模块和宏 运行 ofc 用于不同的功能)是什么,导入数据,格式化,删除和清理很多东西,然后制作一个动态 table 因为源数据每天都在变化,然后根据对大学的过滤,导出为 none vba/macro 文件(我生成一个新的 sheet我想要的信息,导出,保存)然后邮寄出去,删除 sheet,清理所有内容(我的 woorkbook)。
Sub SortExport_DS()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets.Add(After:=Sheets("PR11_P3")).Name = "R11 (P3)" & " fram t.o.m. " & Format(Now - 1, "YYYY-MM-DD")
Sheets("PR11_P3").Select
ActiveSheet.ListObjects("PR11_P3_Tabell").Range.AutoFilter Field:=5, _
Criteria1:="S, Daniel"
Range("PR11_P3_Tabell[#All]").Select
Selection.Copy
Sheets(Sheets.Count).Select
Range("A1").Select
ActiveSheet.Paste
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Dim Table As ListObject
Set Table = ActiveSheet.ListObjects.Add(xlSrcRange, _
Range("A10").CurrentRegion, , xlYes)
With Table
.Name = "PR11_P3_Temp_Tabell"
End With
Sheets("PR11_P3").Select
Application.CutCopyMode = False
Range("A10").Select
End Sub
经过测试并适用于我:
Sub SortExportSelected()
Dim txt, ws As Worksheet, wb As Workbook, rVis As Range, wsName As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = ActiveWorkbook 'or ThisWorkbook
'get the text from the clicked-on shape
txt = ActiveSheet.Shapes(Application.Caller).TextFrame2.TextRange.Text
wsName = "R11 (P3)" & " fram t.o.m. " & Format(Now - 1, "YYYY-MM-DD")
'if a sheet with this name already exists, delete it
Application.DisplayAlerts = False
On Error Resume Next 'ignore error if no matched sheet
ThisWorkbook.Sheets(wsName).Delete
On Error GoTo 0 'stop ignoring errors
Application.DisplayAlerts = True
Set ws = wb.Worksheets.Add(After:=Sheets("PR11_P3")) 'get reference to the added sheet
ws.Name = wsName
With wb.Worksheets("PR11_P3").ListObjects("PR11_P3_Tabell")
.Range.AutoFilter Field:=5, Criteria1:=txt 'use `txt` for filtering
.Range.SpecialCells(xlCellTypeVisible).Copy ws.Range("A1")
End With
With ws.ListObjects.Add(xlSrcRange, ws.Range("A1").CurrentRegion, , xlYes)
.Range.EntireColumn.AutoFit
.Name = "PR11_P3_Temp_Tabell"
End With
With wb.Worksheets("PR11_P3")
.Select
.Range("A10").Select
End With
Application.CutCopyMode = False
End Sub