我在Sheet3上有以下代码(我在Sheet4上有类似的代码),它是逐行工作的。
Sub Checker(argi As Long)
If (Range("B" & argi).Text = "Insert") Then
Call Tiers_1_to_3(argi)
Call CI_Desc(argi)
Call Tiers_Desc(argi)
Call Site(argi)
Call Support_Group_2(argi)
Call Support_Group_3(argi)
Call Product_Name(argi)
Call Model_Name(argi)
Call Mgmt_Components(argi)
Call ITSM_Group(argi)
Call Only_Values(argi)
Call MandatoryColors(argi)
End If
Range("F" & argi + 1).Select
End Sub
这是更大的一部分,这个子'Checker'包含了对主代码起作用的所有子程序;因为这是逐行运行的,所以我想从“ThisWorkbook”表上的按钮进行投射。
我想出了几个解决方法,但我无法这样做。
Sub Refresh()
Dim i As Long
Dim LastRow As Long
LastRow = Range("B" & Rows.Count).End(xlUp).Row
For Each i In Range("F" & LastRow)
Call Sheet4.Checker
Next i
End Sub
工作表安排如下:
Sheet_Portal
:使用Sheet3和Sheet4的快捷方式自动填充UserForm。
Sheet3
:包含Checker变体1的数据输入表。
Sheet4
:包含Checker变体2的数据输入表。
Thisworkbook
:这是我存储所有共享信息的地方,例如将触发Checker 1和2的按钮。
长话短说,我希望你能帮助我解决这个问题。
更新#1
根据您的评论,我能够创建一个触发代码的按钮
Sub Refresh()
Dim i As Long
Dim LastRow As Long
LastRow = Range("B" & Rows.Count).End(xlUp).Row
For i = 5 To LastRow
Call Sheet4.Checker(i)
Next i
End Sub
请检查主要代码@ EXCEL VBA - Long Value increasing within subroutines
更新#2
请查看我使用过的表格和管理方式
下面的ThisWorkbook代码
Private Sub Workbook_Open()
Worksheets("Version Control").Activate
MainPortal.Show vbModeless
End Sub
Private Sub UserForm_Click()
MainPortal.Show vbModeless
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Long
Dim LastRow As Long
LastRow = Range("B" & Rows.Count).End(xlUp).Row
For i = 5 To LastRow
If ActiveSheet.Range("B5").Value > 1 Then
If ActiveSheet.Range("BV" & i).Value = "" Then
Cancel = True
MsgBox "Please complete all mandatory values"
Exit Sub
Else
End If
End If
Next i
End Sub
Sub Refresh()
Dim i As Long
Dim LastRow As Long
LastRow = Range("B" & Rows.Count).End(xlUp).Row
For i = 5 To LastRow
Call Sheet4.Checker(i)
Next i
End Sub
ThisWorkbook存储一个Workbook_Open,用于在文件及其主按钮开始时打开一个userForm,一个Workbook_BeforeSave检查两个值是否为空,然后保存文件被禁用和刷新按钮。 主文件存储类似的Workbook_BeforeSave,用于检查必填字段。