代码或工作簿中存在错误或错误,但我似乎无法找到它或理解为什么会发生这种情况。
发生了什么?用户表单有一个按钮:
- 从sheet2中选择一个单元格
- 将选定的单元格值放在sheet1单元格B10(这是一个下拉菜单)
中- 将表单返回到sheet1,然后选择代码中描述为cell1.B26的单元格。
醇>
现在一旦表格消失了。如果我单击sheet1.B26选择的单元格并写入内容,请按{TAB}
将该单元格中的内容传输到完全相同的单元格,但会自动传输到sheet2,并且sheet1.B26单元格为空。
如果我在表单消失时立即开始在所选单元格中书写,则只会发生一次。
工作表或工作簿或模块中没有应描述此操作的代码/公式。
这让我困扰了一个星期,但我无法在任何地方找到解决方案。
Workbook如果您想下载并试用它。
Video Description of the error
重新创建:
- 转到sheet1
- 使用sheet1上的第一个按钮启动表单,该按钮具有" Klant zoek"文字就可以了。
- 按下说出" selecteer"在表格上。
- 不选择任何其他单元格通过宏在最后选择的单元格中输入内容并按Tab键。
醇>
P.S。 - 我没有编写该工作簿中的任何代码,我只是被分配来调试它。
答案 0 :(得分:2)
我之前在不同国家/地区共享的Excel解决方案遇到了类似的问题,本例中的问题是使用R1C1地址表示法,我认为它可能在这里相同,但它不容易从一台本地机器测试,阅读并尝试以下内容。
为了澄清,R1C1地址表示法按名称引用行和列,因此单元格C4具有R4C3的R1C1地址表示法
我遇到的具体问题是使用INDIRECT
,例如=INDIRECT("'Sheet1'!R21C10", FALSE)
这适用于许多国家,但对于那些'Row'没有以'R'开头且'Column'没有'C'的那些国家却失败了。
Nederlands是'Rij'和'Kolom'所以符号必须是R21K10
才能发挥作用。即=INDIRECT("'Sheet1'!R21K10", FALSE)
我目前的清单是: -
Language Row Column Full Terms
Deutsch Z S Zeile-Spalte
English R C Row-Column
Español F C Fila-Columna
Français R C Rangée-Colonne
Italiano F C Fila-Colonna
Nederlands R K Rij-Kolom
Polski R K Rząd-Kolumna
Português L C Linha-Coluna
Türkçe S S Sira-Sütun
此问题仅在公式中遇到,而不是通过VBA,但在Blad1 (Facturen en Offertes)1
>中找到的代码betalingstermijn
(作为示例)使用VBA在单元格中设置公式,因此问题在这方面保持一致。
需要进行的更改是将所有将R1C1符号放入公式的行更改为所需的列初始值,如下所示。
English (No Change)
Range("B48").FormulaR1C1 = "=VLOOKUP(R18C2,Bedrijfsgegevens!R[1]C:R47C25,16,FALSE)"
Español (R to F, C no change)
Range("B48").FormulaR1C1 = "=VLOOKUP(F18C2,Bedrijfsgegevens!R[1]C:F47C25,16,FALSE)"
Français (No Change)
Range("B48").FormulaR1C1 = "=VLOOKUP(R18C2,Bedrijfsgegevens!R[1]C:R47C25,16,FALSE)"
Nederlands (R no change, C to K)
`Range("B48").FormulaR1C1 = "=VLOOKUP(R18K2,Bedrijfsgegevens!R[1]C:R47K25,16,FALSE)"
注意:您不会更改命令名.FormulaR1C1
,只会更改传入其中的值。
您可以通过在新工作表中执行以下操作来隔离此测试。
(样本表)
| A | B |
1|First|Second |
2|Third|Forth |
=INDIRECT("R1C1",FALSE)
(包括双引号)在英语中,这将导致荷兰的“第一”(荷兰语),这将显示#REF
。
这可能不是唯一的问题,但它是我过去遇到的问题,由于难以复制这个问题,我建议至少试一试。
答案 1 :(得分:2)
问题在于它只看起来像“Facturen en Offertes”-B26一样活跃。它实际上是“Klanten”-B26是活跃的。通过在对用户表单的调用中添加“vbModeles”来解决它。
Sub zoekklant()
Zoekklantform.Show vbModeless
End Sub
答案 2 :(得分:2)
有问题描述的问题可以在Excel 2013中轻松复制,在早期版本中不会出现。我没有机会在2016年进行测试。可以找到类似的问题here和here。
所有案例共有3个部分:
1)使用表单按钮或形状单击事件处理程序
显示UserForm
2)UserForm
是模态的(vbModal
是UserForm.Show
参数的默认值)
3)UserForm
代码更改活动表
因此,显示了UserForm激活的工作表,但它并不是真正活动的。对其进行的任何编辑都会显示在之前(显示UserForm
之前)活动工作表中。
这是Excel 2013中的一个错误,解决它的最简单的解决方法是:
1)使用 ActiveX按钮显示表单
2)显示无模式格式:UserForm1.Show vbModeless
但是如果我们不能使用ActiveX并需要模态形式呢? This answer建议隐藏并显示ActiveWindow
,但它对我不起作用。
显示没有ActiveX的模态形式的唯一解决方法是:
要显示模态UserForm1
,请使用UserForm2
事件处理程序创建另一个空的Activate
:
Private Sub UserForm_Activate()
'hide form
Me.Left = -1000
'show target form
UserForm1.Show
Unload Me
End Sub
而不是:
UserForm1.Show
使用:
UserForm2.Show vbModeless
答案 3 :(得分:0)
我之前因创建新工作表而遇到类似问题。在我的情况下,它与excel同时选择了两张纸,因此它总是选择在序列中最早的一张上书写,直到我摆弄选择不同的纸张来重置选择。我的解决方案是让子选择一个不同的工作表,然后重新选择所需的工作表,重置双选问题。