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

时间:2016-06-11 04:05:50

标签: excel vba excel-vba debugging

代码或工作簿中存在错误或错误,但我似乎无法找到它或理解为什么会发生这种情况。

  

发生了什么?用户表单有一个按钮:

     
      
  1. 从sheet2中选择一个单元格
  2.   
  3. 将选定的单元格值放在sheet1单元格B10(这是一个下拉菜单)
  4. 中   
  5. 将表单返回到sheet1,然后选择代码中描述为cell1.B26的单元格。
  6.   

现在一旦表格消失了。如果我单击sheet1.B26选择的单元格并写入内容,请按{TAB}将该单元格中的内容传输到完全相同的单元格,但会自动传输到sheet2,并且sheet1.B26单元格为空。

如果我在表单消失时立即开始在所选单元格中书写,则只会发生一次。

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

这让我困扰了一个星期,但我无法在任何地方找到解决方案。

Workbook如果您想下载并试用它。

Video Description of the error

重新创建:

  
      
  1. 转到sheet1
  2.   
  3. 使用sheet1上的第一个按钮启动表单,该按钮具有" Klant zoek"文字就可以了。
  4.   
  5. 按下说出" selecteer"在表格上。
  6.   
  7. 不选择任何其他单元格通过宏在最后选择的单元格中输入内容并按Tab键。
  8.   

P.S。 - 我没有编写该工作簿中的任何代码,我只是被分配来调试它。

4 个答案:

答案 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,只会更改传入其中的值。

您可以通过在新工作表中执行以下操作来隔离此测试。

  1. 输入以下数据,以4个已填充的单元格结尾
  2. (样本表)

     |  A  |   B   |
    1|First|Second |
    2|Third|Forth  |
    
    1. 在空单元格中输入公式=INDIRECT("R1C1",FALSE)(包括双引号)
    2. 在英语中,这将导致荷兰的“第一”(荷兰语),这将显示#REF

      这可能不是唯一的问题,但它是我过去遇到的问题,由于难以复制这个问题,我建议至少试一试。

答案 1 :(得分:2)

问题在于它只看起来像“Facturen en Offertes”-B26一样活跃。它实际上是“Klanten”-B26是活跃的。通过在对用户表单的调用中添加“vbModeles”来解决它。

Sub zoekklant()
    Zoekklantform.Show vbModeless
End Sub

答案 2 :(得分:2)

有问题描述的问题可以在Excel 2013中轻松复制,在早期版本中不会出现。我没有机会在2016年进行测试。可以找到类似的问题herehere

所有案例共有3个部分:

1)使用表单按钮或形状单击事件处理程序

显示UserForm

2)UserForm是模态的(vbModalUserForm.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同时选择了两张纸,因此它总是选择在序列中最早的一张上书写,直到我摆弄选择不同的纸张来重置选择。我的解决方案是让子选择一个不同的工作表,然后重新选择所需的工作表,重置双选问题。