我想执行以下任务:
写下信息"你醒了吗?"并显示问号
捕获整数变量intR中的响应,将intR值放在单元格A2中
如果回答为是,则写入单元格A1" Hurray"
如果回答为“否”,则写一个带有文本" ZZZZZZZZ"
如果响应为“取消”,则退出子
Sub EX3_1_6MsgBoxFunction()
Dim intR As Integer
Dim TxtRng As Range
Dim stra As String
Dim stra2 As String
'Have the message box display the buttons Yes, No and Cancel
intR = MsgBox("Are you awake ? ", vbQuestion + vbYesNoCancel)
intR = Range("a2")
If intR = vbYes Then
Range("a1") = "Hurray"
'that means yes
ElseIf intR = vbNo Then
stra2 = MsgBox("ZZZZZZZZZZ")
Else
Range("a2") = intR
End If
End Sub
答案 0 :(得分:2)
首先欢迎来到StackOverflow。当您提出问题时,请记住在代码中指明问题所在。
- 写下“你醒了吗?”并显示问号
如果我理解正确,你只是想要显示一个问号,但可以选择3种可能性,由以下MsgBox模式给出:
intR = MsgBox "Are you awake ?", vbYesNoCancel
这会显示MsgBox
,需要回答(因此我删除了问题中的最后一个要点,因为答案是“是”还是“否”或“取消“;它不能是其他任何内容。The answer code is then mapped on an integer intR
,这是正确的。
- 捕获整数变量intR中的响应,将intR值放在单元格A2中
正如YowE3K指出的那样,它应该是Range("a2").Value = intR
,而不是intR = Range("a2")
- 如果回答为是,则写入单元格A1“Hurray”
- 如果回答为否,则写一个带有文字“ZZZZZZZZ”的消息框
- 如果响应为“取消”,则退出子
您可以在此处使用Select Case
:将其视为具有两种以上可能性的If
:
Select Case intR
Case 6 '<- According to the link I provided vbYes = 6
Range("a1") = "Hurray"
Case 7 '<- According to the link I provided vbNo = 7
MsgBox "ZZZZZZZZ"
Case 2 '<- According to the link I provided vbCancel = 2
Exit Sub
End Select
您可以编写vbYes,vbNo和vbCancel而不是整数。正如另一个用户所指出的那样,代码可能更具可读性。
答案 1 :(得分:1)
你可以尝试这样的事情......
{{1}}
答案 2 :(得分:0)
除了Noldor的答案之外,作为一般规则,你不应该使用匈牙利表示法来表示变量名, int number_dim = stream_in[0].dim;
int number_test = stream_in[0].num; // 4072
int number_classes = _n_classes;
tensorflow::Tensor input_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({number_test, number_dim}));
auto dst = input_tensor.flat<float>().data();
for (int i = 0; i < stream_in[0].num; i++) {
std::copy_n(dataptr + i * number_dim, number_dim, dst);
dst += number_dim;
}
std::vector<std::pair<std::string, tensorflow::Tensor>> inputs = {{tokens_io[0], input_tensor}};
std::vector<tensorflow::Tensor> outputs;
status = session->Run(inputs, {tokens_io[1]}, {}, &outputs);
if (!status.ok()) {
ssi_wrn("status: %s \n", status.ToString().c_str());
return;
}
std::vector<int> number_hits(number_classes, 0);
for (std::vector<tensorflow::Tensor>::iterator it = outputs.begin(); it != outputs.end(); ++it) {
auto items = it->shaped<float, 2>({number_test, number_classes});
for (int i = 0; i < number_test; i++) {
int arg_max = 0;
float val_max = items(i, 0);
for (int j = 0; j < number_classes; j++) {
if (items(i, j) > val_max) {
arg_max = j;
val_max = items(i, j);
}
}
for (int i = 0; i < number_classes; i++) {
if (arg_max == i) {
number_hits[i]++;
}
}
}
}
for (int i = 0; i < _n_classes; i++) {
float accuracy = (float) number_hits[i] / number_test;
ssi_wrn("accuracy for class %s : %f \n", _class_names[i], accuracy);
_probs[i] = accuracy;
}
session->Close();
并没有真正告诉你变量与它的类型有何不同。
您应该能够从上下文推断出类型,变量名称应该为您提供更有用的东西。我建议重写你的代码,如
intR
请注意,您不需要将MsgBox分配给变量,您只需使用参数(在本例中为Sub EX3_1_6MsgBoxFunction()
Dim retVal As Integer
'Ask the user whether they're awake
retVal = MsgBox("Are you awake ? ", vbQuestion + vbYesNoCancel)
'Switch on their answer
Select Case retVal
Case vbYes
Range("A2") = "Hurray"
Case vbNo
MsgBox "ZZZZZZZ"
End Select
End Sub
)调用它来提示用户,这样就可以消除您不必要的{{1 }和"ZZZZZ"
。您也不需要明确stra2
,因为代码会在stra
或Exit Sub
语句后自然退出。