- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我在 Sheet1 上的代码的简要说明(我对 VBA 很陌生);
我有三个工作簿,一个工作簿(Sheet1 是写入 VBA 代码的名为“Operator”的工作表的代号)和另外两个具有不同文件路径的外部工作簿,称为“Changes”(文件路径是:Database_IRR 20 -2S New.xlsm 在我的代码中,这是 CHANGES 数据库)和“HE171”(文件路径是:我的代码中的 Technology_Changes\Changes_Database_IRR_20-2S_New.xlsm,这是 MAIN 数据库)。
1) 如果运算符(operator)在 Commandbutton1 上点击"is",我希望代码检查 Sheet1 中单元格“H4”中的值是否存在于主数据库中“HE 171”表的 A 列中,然后,
2)如果“H4”中的值在主数据库中存在,我希望代码检查 Sheet1 中的单元格“H4”中的值是否存在于 CHANGES 数据库的“更改”表的 A 列中,如果“H4”的值在“更改”表中存在我希望代码使用模块 13(我尚未发布)在“更改”表的两列中设置日期和时间戳,并使用模块 8 发送从某些列“K”到“更改”表内的单元格的值(例如,我希望模块 8 过滤列 A 中的“H4”值并将其放在第 2 行中,因为第 1 行有我的标题,并将“K30”的值从 Sheet1 放置到“更改”表中的单元格 (1,6))
2.1)如果“H4”中的值在主数据库中存在,并且如果“H4”的值在“更改”表中不存在,我希望代码使用模块 14(尚未发布)添加将“H4”值放入 CHANGES 数据库中“CHANGES”表中新行的 A 列,模块 13(我尚未发布)在“CHANGES”表的两列中设置日期和时间戳,以及模块 8 将某些列“K”中的值发送到“更改”表内的单元格
3)如果主数据库中不存在“H4”中的值,我希望代码使用模块 7(尚未发布)将“H4”的值添加到“HE”中新行的 A 列主数据库中的 171"表,模块 14(尚未发布)将“H4”的值添加到“更改”表中新行的 A 列,模块 13(我尚未发布)设置“更改”表的两列中的日期和时间戳,以及模块 8 将某些列“K”中的值发送到“更改”表内的单元格
5)如果运算符(operator)在 Commandbutton1 上点击“NO”或“x”,我希望代码使用密码保存并关闭两个外部工作簿(主数据库和更改数据库),然后保护 Sheet1 并保持打开状态清除
Option Explicit
Dim Cd As Workbook
Dim Md As Workbook
Dim Changes As Worksheet
Dim HE171 As Worksheet
Dim nConfirmation As Integer
'Actions for when the "Confirm Changes" button is clicked
Private Sub CommandButton1_Click()
Set Cd = Workbooks.Open("\FILEPATH/Technology_Changes\Changes_Database_IRR_20-2S_New.xlsm")
Set Md = Workbooks.Open("\FILEPATH\Database_IRR 20-2S New.xlsm")
Set Changes = Cd.Sheets("Changes")
On Error Resume Next
Set HE171 = Md.Sheets("HE 171")
'Creating the "Yes or No" message box displayed when operators click the "Confirm Changes" button on the Operator Sheet
nConfirmation = MsgBox("Do you want to send a notification about the sheet update?", vbInformation + vbYesNo, "Sheet Updates")
'Declares the variable for the string that we will be finding, which is the key in this case (for the With statement)
Dim FindString As String
'Declares the variable for the range in which we will be locating the string (for the With statement)
Dim RNG As Range
'Sets the string we need to find as the key value which is in cell "H4" of the Operator sheet (for the With Statement)
FindString = Sheet1.Range("H4").Value
'Actions if "YES" is clicked when the "Confirm Changes" button is clicked on the Operator Sheet
If nConfirmation = vbYes Then
'Opens and activates the Main Database workbook, with "HE 171" as the active sheet
HE171.Activate
'Temporarily unprotects the Main Database Workbook and Operator sheet (this is the sheet the code is in)
ActiveSheet.Unprotect "Swrf"
Sheet1.Unprotect "Swrf"
'Searches all of column A in the Main Database in sheet "HE 171" for the string(key)
With ActiveSheet.Range("A:A") 'searches all of column A
Set RNG = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
'End With
'////////////////////////////////////////////////////////////////////////////
'Actions if the key is present in column A of the MAIN database
If Not RNG Is Nothing Then
'Since Key is present in main database, now opens and sets the Changes_Database "Changes" Sheet as active contents
Changes.Activate
'Temporarily unprotects the Changes_Database
ActiveSheet.Unprotect "Swrf"
'Declares the variable for the string that we will be finding, which is the key in this case (for the With statement)
Dim FindString2 As String
'Declares the variable for the range in which we will be locating the string (for the With statement)
Dim RNG2 As Range
'Sets the string we need to find as the key value which is in cell "H4" of the Operator sheet (for the With Statement)
FindString2 = Sheet1.Range("H4").Value
'Searches all of column A in the Changes_Database "Changes" sheet for the string(key)
With ActiveSheet.Range("A:A") 'searches all of column A
Set RNG2 = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
'Actions if the key is present in column A of the Changes_Database (So a change request was previously made for the key and it already has a row in the "Changes" sheet)
If Not RNG2 Is Nothing Then
'Calls module 13 to set the date and time of the requested change in the "Changes" sheet
Call TimeStamp
'Calls module 8 to send over the requested changes to the "Changes" sheet
Call SendChanges
'On Error Resume Next
'Protects the Changes_Database
ActiveSheet.Protect "Swrf"
'////////////////////////////////////////////////////////////////////////////
'Actions if the key DOES NOT exist in column A of the Changes_Database
Else
'Module 14: Adds a new row with the key to the Changes_Database
Call NewPart2
'Calls module 13 to set the date and time of the requested change in the "Changes" sheet
Call TimeStamp
'On Error Resume Next
'Calls module 8 to send over the requested changes to the "Changes" sheet
Call SendChanges
End If
End With
Else
'Module 7: Adds a new row with the key to the MAIN Database
Call NewPart
'Module 14: Adds a new row with the key to the Changes_Database
Call NewPart2
'Module 13: to set the date and time of the requested change in the "Changes" sheet
Call TimeStamp
'Module 10: Fills in the date and time the key was created for the "HE 171" sheet
Call TimeStamp2
'On Error Resume Next
'Calls module 8 to send over the requested changes to the "Changes" sheet
Call SendChanges
End If
End With
'Actions if "No" is clicked when the "Confirm Changes" button is clicked on the Operator Sheet
Else
'''''''If nConfirmation = vbNo Then
'Protects Changes_Database (as it was activated after the Main Database and is therefore the active contents and saves/closes it
Changes.Activate
ActiveSheet.Protect "Swrf"
ActiveWorkbook.Save
ActiveWorkbook.Close SaveChanges:=True
'Sets Main Database as active contents to protect it, save it and close it
HE171.Activate
ActiveSheet.Protect "Swrf"
ActiveWorkbook.Save
ActiveWorkbook.Close SaveChanges:=True
'Protects Operator Sheet and saves it
Sheet1.Protect "Swrf"
'Workbook.Close SaveChanges:=True
End If
End Sub
'Module 8: Sends the requested changes over to the "Changes" sheet
Sub SendChanges()
Set Cd = Workbooks.Open("\FILEPATH\Technology_Changes\Changes_Database_IRR_20-2S_New.xlsm")
Set Changes = Cd.Sheets("Changes")
Changes.Activate
ActiveSheet.Unprotect "Swrf"
'////////////////////////////////////////////////////////////////////////////'
'Only executes this macro if the the new/change requested value in column "K" of the Operator sheet has a numerical value present
If Sheet1.Range("K30").Value <> "" Then
'Filters the Changes_Database for the part name & process (the key) which is in cell "H4" of the Operator sheet
ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=Sheet1.Range("H4")
'Copies the changed content in cell "K30" from the Operator Sheet
Sheet1.Range("K30").Copy
'Finds the row in the Changes_Database that has matched all filters and;
'Pastes the value of cell "K30" into the matching parameter cell in the Changes_Database,which is in column 6 in this case
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 6).PasteSpecial xlPasteValues
'Removes all filters and shows all data'
ActiveSheet.ShowAllData
End If
'////////////////////////////////////////////////////////////////////////////'
'Repeats the If and Else code bordered with slashes "////", for all parameter changes in the K column ("KXX")'
If Sheet1.Range("K31").Value <> "" Then
ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=Sheet1.Range("H4")
Sheet1.Range("K31").Copy
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 7).PasteSpecial xlPasteValues
ActiveSheet.ShowAllData
End If
If Sheet1.Range("K32").Value <> "" Then
ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=Sheet1.Range("H4")
Sheet1.Range("K32").Copy
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 8).PasteSpecial xlPasteValues
ActiveSheet.ShowAllData
End If
'On Error Resume Next
Sheet1.Range("K30:K115").ClearContents
'On Error Resume Next
ActiveSheet.Protect "Swrf"
ActiveWorkbook.Save
ActiveWorkbook.Close SaveChanges:=True
End Sub
最佳答案
如果你去掉所有没有开始或结束语句 block 的东西,你会得到这个代码:
Private Sub CommandButton1_Click() '#1
If nConfirmation = vbYes Then ' #2
With ActiveSheet.Range("A:A") ' #3
If Not RNG Is Nothing Then ' #4
With ActiveSheet.Range("A:A") ' #5
If Not RNG Is Nothing Then ' #6
Else ' #6.1
End If ' #7
' ##### THERE SHOULD BE AN END WITH HERE ####
Else ' #4.1
End If ' #8
End With ' #9
Else ' #2.1
End If ' #10
End Sub ' #11
每次开始一个新 block 时,都可以考虑将新 block 添加到一堆 block 语句的顶部。每当您关闭一个 block 时,您都必须关闭当前位于堆栈顶部的 block 。如果不匹配(例如,堆栈顶部的 block 是
With
block ,但您尝试使用
End If
关闭它),将发生错误
Else
语句略有不同)。以下是每行执行后堆栈的外观,直到我们到达导致错误的行:
Sub
来自#1 If
来自#2 Sub
来自#1 With
来自#3 If
来自#2 Sub
来自#1 If
来自#4 With
来自#3 If
来自#2 Sub
来自#1 With
来自#5 If
来自#4 With
来自#3 If
来自#2 Sub
来自#1 If
来自#6 With
来自#5 If
来自#4 With
来自#3 If
来自#2 Sub
来自#1 Else
从 #6.1 替换
If
来自#6
Else
来自#6.1 With
来自#5 If
来自#4 With
来自#3 If
来自#2 Sub
来自#1 End If
在 #7 匹配
Else
在#6.1
With
来自#5 If
来自#4 With
来自#3 If
来自#2 Sub
来自#1 Else
#4.1 与
With
不匹配在堆栈顶部的#5。这个
Else
实际上涉及到
If
在#4
关于excel - VBA 代码返回 if 语句的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58935885/
创建一个“海盗对话”,可以选择左手或右手。我希望它对“左”和“右”的不同拼写做出积极的回答(正如您将在代码中看到的那样),但是,当我为所有非“右”或“左”的输入添加最终的“else”代码时,它给了我一
With 语句 对一个对象执行一系列的语句。 With object statements End With 参数 object 必需的部分
While...Wend 语句 当指定的条件为 True 时,执行一系列的语句。 While condition  ; Version [stat
所以我正在处理的代码有一个小问题。 while True: r = input("Line: ") n = r.split() if r == " ":
我有一个对象数组: var contacts = [ { "firstName": "Akira", "lastName": "Laine", "number"
int main() { int f=fun(); ... } int fun() { return 1; return 2; } 在上面的程序中,当从main函数中调用一个
我的项目中有很多 if 语句、嵌套 if 语句和 if-else 语句,我正在考虑将它们更改为 switch 语句。其中一些将具有嵌套的 switch 语句。我知道就编译而言,switch 语句通常更
Rem 语句 包含程序中的解释性注释。 Rem comment 或 ' comment comment 参数是需要包含的注释文本。在 Rem 关键字和 comment 之间应有一个空格。
ReDim 语句 在过程级中声明动态数组变量并分配或重新分配存储空间。 ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
Randomize 语句 初始化随机数生成器。 Randomize [number] number 参数可以是任何有效的数值表达式。 说明 Randomize 使用 number 参数初始
Public 语句 定义公有变量并分配存储空间。在 Class 块中定义私有变量。 Public varname[([subscripts])][, varname[([subscripts])
Sub 语句 声明 Sub 过程的名称、参数以及构成其主体的代码。 [Public [Default]| Private] Sub name [( arglist )]
Set 语句 将对象引用赋给一个variable或property,或者将对象引用与事件关联。 Set objectvar = {objectexpression | New classname
我有这个代码块,有时第一个 if 语句先运行,有时第二个 if 语句先运行。我不确定为什么会这样,因为我认为 javascript 是同步的。 for (let i = 0; i < dataObje
这是一个 javascript 代码,我想把它写成这样:如果此人回答是,则回复“那很酷”,如果此人回答否,则回复“我会让你开心”,如果此人回答的问题包含"is"或“否”,请说“仅键入”是或否,没有任何
这是我的任务,我尝试仅使用简短的 if 语句来完成此任务,我得到的唯一错误是使用“(0.5<=ratio<2 )”,除此之外,构造正确吗? Scanner scn = new Scanner(
有没有办法在 select 语句中使用 if 语句? 我不能在这个中使用 Case 语句。实际上我正在使用 iReport 并且我有一个参数。我想要做的是,如果用户没有输入某个参数,它将选择所有实例。
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: If vs. Switch Speed 我将以 C++ 为例,但我要问的问题不是针对特定语言的。我的意思是一
Property Set 语句 在 Class 块中,声明名称、参数和代码,这些构成了将引用设置到对象的 Property 过程的主体。 [Public | Private] Pro
Property Let 语句 在 Class 块中,声明名称、参数和代码等,它们构成了赋值(设置)的 Property 过程的主体。 [Public | Private] Prop
我是一名优秀的程序员,十分优秀!