从用户表单更新多个工作表

时间:2019-04-14 00:12:58

标签: excel vba

我为每个工作表的指令创建了两个命令按钮,但是第二个按钮不起作用,我认为这可能是范围问题,但尝试了一些操作却不起作用。

这是一个简单的销售表(Sheet1)和库存表(StockData)。我已将部分销售数据放入库存表中,并且一切正常,但是当我更新信息时,用于将信息更新到库存表的第二个命令按钮不起作用。我已经花了几天的时间,尝试了很多,从互联网上的建议中我可以理解。

const Discord = require('discord.js');
const webhook = new Discord.WebhookClient('ID HERE', 'TOKEN HERE');

const mineflayer = require('mineflayer');
const Minecraft = mineflayer.createBot({
  host: '',
  port: 25565,
  username: 'mail@example.com',
  password: '12345678'
});

Minecraft.on('chat', (username, message) => {
  let embed = new Discord.RichEmbed()
  .setColor('#0E9908')
  .setThumbnail(`https://minotar.net/avatar/${username}/512`)
  .addField(username, message)
  .setTimestamp();
  webhook.send(embed);
});

'这些正在工作,但是更新不希望如此简单... 我已完成查找,并将所有数据再次放入用户表单

Private Sub cmdAdd_Click()

If txtLine.Text = "" Or cmbWHS.Text = "" Or cmbStatus.Text = "" Then
If MsgBox("Check Line or Warehouse or Status", vbCritical, "ERROR") = vbOK Then
Exit Sub
End If
End If

'to check the last filled row
lastrow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
ThisWorkbook.Worksheets("Sheet1").Cells(lastrow + 1, 1).Value = txtInvoiceNumber.Text
ThisWorkbook.Worksheets("Sheet1").Cells(lastrow + 1, 2).Value = txtLineNumber.Text
ThisWorkbook.Worksheets("Sheet1").Cells(lastrow + 1, 3).Value = txtInvoiceDate.Text


Private Sub cmdSaleStockIn_Click()

'to check the last filled row
lastrow = ThisWorkbook.Worksheets("StockData").Cells(Rows.Count, 1).End(xlUp).Row
ThisWorkbook.Worksheets("StockData").Cells(lastrow + 1, 1).Value = txtStockSaleNo.Text
ThisWorkbook.Worksheets("StockData").Cells(lastrow + 1, 2).Value = txtLineNumber.Text
ThisWorkbook.Worksheets("StockData").Cells(lastrow + 1, 3).Value = txtTransactionCdS.Text

'该代码有效

Private Sub cmdFind_Click()
Dim totalrow As Long
totalrow = Sheet1.Range("A1").CurrentRegion.Rows.Count
For currentrow = 2 To totalrow
If Trim(txtLineNumber) = Trim(Cells(currentrow, 2)) Then
txtInvoiceNumber.Text = Cells(currentrow, 1)
txtInvoiceDate.Text = Cells(currentrow, 3)

等... “那为什么不呢?

Private Sub cmdUpdate_Click()
Dim totalrow As Long
totalrow = Sheet1.Range("A1").CurrentRegion.Rows.Count
For currentrow = 2 To totalrow
If Trim(txtLineNumber) = Trim(Cells(currentrow, 2)) Then
Cells(currentrow, 1) = txtInvoiceNumber.Text
Cells(currentrow, 3) = txtInvoiceDate.Text
Cells(currentrow, 4) = cmbCustomerName.Text

1 个答案:

答案 0 :(得分:0)

代码中的第一个观察值(不起作用)为totalrow = StockData.Range("A1").CurrentRegion.Rows.Count,仅在工作表的CodeNameStockData时有效。这可以在VBA属性窗口中检查,特定工作表的名称显示为StockData。可以改用ThisWorkbook.Worksheets("StockData").Range("A1").CurrentRegion.Rows.Count

同样,最好引用像ThisWorkbook.Worksheets("StockData").Cells(currentrow, 5) = txtInvoiceDate.Text这样的单元而不是Cells(currentrow, 5) = txtInvoiceDate.Text。如果工作表不是活动工作表,则后者可能会出现异常。

进一步定义工作表并使用With是更好的做法。所以我尝试了

这样的代码部分
Private Sub cmdUpdStock_Click()
Dim totalrow As Long
Dim wStock  As Worksheet
Set wStock = ThisWorkbook.Worksheets("Stockdata")
With wStock
totalrow = wStock.Range("A1").CurrentRegion.Rows.Count
    For currentrow = 2 To totalrow
        If Trim(txtLineNumber) = Trim(.Cells(currentrow, 2)) Then
        .Cells(currentrow, 5) = txtInvoiceDate.Text
        .Cells(currentrow, 7) = cmbWHS.Text
    End If
Next
End With
End Sub

工作正常(据我所知,它的工作方式)。