单元格内容自动移动到另一个表单上的相同单元格
代码或工作簿中有一个错误或错误,但我似乎无法find或理解为什么发生这种情况。
发生了什么是有一个用户窗体有一个button来:
- 从sheet2中select一个单元格
- 将选定的单元格值放在sheet1单元格B10中,这是一个下拉菜单
- 卸载窗体返回到Sheet1并select一个在代码中描述为sheet1.B26的单元格。
现在只要表格不见了 如果我点击sheet1.B26选中的单元格,然后按{TAB}
那么这个单元格的内容会被自动传送到完全相同的单元格,但在sheet2上,并且sheet1.B26单元格是空的。
这种情况只发生一次,如果我立即开始在选定的单元格写入表单不见了。
工作表或工作簿或模块中没有应该描述此操作的代码/公式。
这是一个星期的问题,但我找不到解决scheme的任何地方。
工作簿,如果你想下载并尝试。
video错误的描述
重新创build这个:
- 转到Sheet1
- 使用Sheet1上的“Klant zoek”文本上的第一个button打开表单。
- 按表格上的“select器”button。
- 不select任何其他单元格在macros中input最后一个选定单元格中的内容,然后按Tab键。
PS – 我没有写在工作簿中的任何代码,我只是分配给它进行debugging。
在Excel 2013中可以轻松地重现所述的问题,但在早期版本中不会出现此问题。 我没有机会在2016年进行testing。类似的问题可以在这里和这里find。
所有情况共有三个部分:
1) UserForm
显示使用表单button或形状点击事件处理程序
2) UserForm
是模态的( vbModal
是UserForm.Show
参数的默认值)
3) UserForm
代码更改活动工作表
因此,显示由UserForm激活的图表,但它不是真正活动的。 对其进行的任何编辑都会显示在之前(显示UserForm
之前)活动工作表中。
这是Excel 2013中的一个错误,解决这个问题的最简单的解决方法是:
1)使用ActiveXbutton来显示表单
2)显示无模式窗体: UserForm1.Show vbModeless
但是如果我们不能使用ActiveX并且需要模态forms呢? 这个答案暗示隐藏和显示ActiveWindow
,但它不适合我。
显示没有ActiveX工作模式窗体的唯一解决方法是:
要显示模式UserForm1
,请使用“ Activate
事件处理程序创build另一个空的UserForm2
:
Private Sub UserForm_Activate() 'hide form Me.Left = -1000 'show target form UserForm1.Show Unload Me End Sub
而不是:
UserForm1.Show
使用:
UserForm2.Show vbModeless
我在前面build立的Excel解决scheme中遇到了一个类似的问题,这个解决scheme是在各个国家之间共享的,在这种情况下,这个问题与R1C1地址符号有关,我想这里可能是一样的,但是不能从一个简单的testing本地机器,请阅读并尝试下面的内容。
为了说明,R1C1地址表示法是指按名称的行和列,所以单元格C4具有R1C1地址表示法R4C3
我曾经涉及到使用INDIRECT
的具体问题,例如=INDIRECT("'Sheet1'!R21C10", FALSE)
这对一些国家有效,但对于那些“行”不是以“R”开头,“列”没有以“C”开头的国家则失败了。
荷兰语是'Rij'和'Kolom',所以它的标记必须是R21K10
。 Ie =INDIRECT("'Sheet1'!R21K10", FALSE)
我目前的名单是:
Language Row Column Full Terms Deutsch ZS Zeile-Spalte English RC Row-Column Español FC Fila-Columna Français RC Rangée-Colonne Italiano FC Fila-Colonna Nederlands RK Rij-Kolom Polski RK Rząd-Kolumna Português LC Linha-Coluna Türkçe SS Sira-Sütun
这个问题只在公式中经历过,而不是在VBA中经历,然而在Blad1 (Facturen en Offertes)1
> betalingstermijn
(作为例子)中find的代码使用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
,只是传递给它的值。
您可以通过在新工作表中执行以下操作来隔离这个testing。
- input下面的数据,以4个填充的单元格结尾
(样品表)
| A | B | 1|First|Second | 2|Third|Forth |
- 在空单元格中input公式
=INDIRECT("R1C1",FALSE)
(包括双引号)
在英文中,这将导致在荷兰(荷兰)“第一”,这将显示#REF
。
这可能不是唯一的问题,但这是我过去遇到的问题,由于难以重现问题,我build议至less排除这个问题。
问题是,它只是看起来像“Facturen en Offertes”-B26活动。 它实际上是“Klanten”-B26是活跃的。 它是通过添加“vbModeles”到用户表单的调用来解决的。
Sub zoekklant() Zoekklantform.Show vbModeless End Sub
由于创build新工作表,我遇到过类似的问题。 在我的情况下,这与excel同时select两张纸有关,因此它总是select按顺序中最早的一张写入,直到我select不同的纸张来重置select为止。 我的解决scheme是简单地让子select一个不同的表,然后重新select所需的表,重置双选问题。