单元格内容自动移动到另一个表单上的相同单元格

代码或工作簿中有一个错误或错误,但我似乎无法find或理解为什么发生这种情况。

发生了什么是有一个用户窗体有一个button来:

  1. 从sheet2中select一个单元格
  2. 将选定的单元格值放在sheet1单元格B10中,这是一个下拉菜单
  3. 卸载窗体返回到Sheet1并select一个在代码中描述为sheet1.B26的单元格。

现在只要表格不见了 如果我点击sheet1.B26选中的单元格,然后按{TAB}那么这个单元格的内容会被自动传送到完全相同的单元格,但在sheet2上,并且sheet1.B26单元格是空的。

这种情况只发生一次,如果我立即开始在选定的单元格写入表单不见了。

工作表或工作簿或模块中没有应该描述此操作的代码/公式。

这是一个星期的问题,但我找不到解决scheme的任何地方。

工作簿,如果你想下载并尝试。

video错误的描述

重新创build这个:

  1. 转到Sheet1
  2. 使用Sheet1上的“Klant zoek”文本上的第一个button打开表单。
  3. 按表格上的“select器”button。
  4. 不select任何其他单元格在macros中input最后一个选定单元格中的内容,然后按Tab键。

PS – 我没有写在工作簿中的任何代码,我只是分配给它进行debugging。

在Excel 2013中可以轻松地重现所述的问题,但在早期版本中不会出现此问题。 我没有机会在2016年进行testing。类似的问题可以在这里和这里find。

所有情况共有三个部分:

1) UserForm显示使用表单button或形状点击事件处理程序

2) UserForm是模态的( vbModalUserForm.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。

  1. input下面的数据,以4个填充的单元格结尾

(样品表)

  | A | B | 1|First|Second | 2|Third|Forth | 
  1. 在空单元格中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所需的表,重置双选问题。