Excel 根据不同工作表上的匹配值更改值

Excel 根据不同工作表上的匹配值更改值,excel,vba,macros,Excel,Vba,Macros,只有当我在主数据所在的工作表(“作业”)工作表上时,此代码才能正常工作。文本框和宏按钮位于工作表(“ID”)上。当我在工作表(“ID”)上运行代码时,我只得到MsgBox消息,代码结束。当条件为真时,它不会更新值。有人能看一下代码看看问题出在哪里吗?很难弄明白这一点 多谢各位 Option Explicit Sub CloseJob() Dim MasterData As Range Dim sourceID As Range Dim cell As Range, row As Range,

只有当我在主数据所在的工作表(“作业”)工作表上时,此代码才能正常工作。文本框和宏按钮位于工作表(“ID”)上。当我在工作表(“ID”)上运行代码时,我只得到MsgBox消息,代码结束。当条件为真时,它不会更新值。有人能看一下代码看看问题出在哪里吗?很难弄明白这一点

多谢各位

Option Explicit

Sub CloseJob()

Dim MasterData As Range
Dim sourceID As Range
Dim cell As Range, row As Range, JobCol As Range
Dim Txt As String

On Error GoTo errHndl
Txt = ThisWorkbook.Worksheets("ID").TextBoxID.Text
Set MasterData = ThisWorkbook.Worksheets("Jobs").Range("MasterData")

If Txt <> "" Then
    With MasterData
        For Each cell In .Range("JobCol_Master")
            'If job# matches textbox and if job# is to correct region then...
            If cell.Text = Txt And Cells(cell.row, 4).Value = "ID" Then
              Cells(cell.row, 11).Value = "Test"
              Exit Sub
                If cell.Text <> Txt Then
                    Exit Sub
                End If
            End If
        Next cell
    End With
 End If

MsgBox "Job not found."

Exit Sub
errHndl:
    MsgBox "Error happened while working on: " + vbCrLf + _
        vbCrLf + vbCrLf + "Error " + _
        Str(Err.Number) + ": " + Err.Description, vbCritical + vbOKOnly, "Error"
End Sub
选项显式
分包工作()
变暗主数据作为范围
将sourceID设置为范围
调暗单元格作为范围、行作为范围、作业列作为范围
以字符串形式显示文本
关于错误转到errHndl
Txt=此工作簿。工作表(“ID”).TextBoxID.Text
设置主数据=此工作簿。工作表(“作业”)。范围(“主数据”)
如果是“Txt”,则
使用MasterData
对于范围内的每个单元格(“JobCol_Master”)
'如果作业与文本框匹配,并且作业要更正区域,则。。。
如果cell.Text=Txt和Cells(cell.row,4).Value=“ID”,则
单元格(cell.row,11).Value=“测试”
出口接头
如果是cell.Text Txt,则
出口接头
如果结束
如果结束
下一个细胞
以
如果结束
MsgBox“找不到作业。”
出口接头
errHndl:
MsgBox“处理时出错:”+vbCrLf+_
vbCrLf+vbCrLf+“错误”+_
Str(Err.Number)+“:“+Err.Description,vbCritical+vbOKOnly,“Error”
端接头

您在.Range(“JobCol\u Master”)中的每一个单元格中的行
试图引用主数据范围的子范围,我认为该子范围不存在。使用主数据作为工作簿引用,或明确指定JobCol_Master。

您在.Range(“JobCol_Master”)中的每一个单元格的行
试图引用主数据范围的子范围,我认为该子范围不存在。使用主数据作为工作簿参考,或明确指定作业主数据。

同意上面的@atclaus,更改为以下内容:

If Txt <> "" Then
    With sheets("Jobs")
        For Each cell In .Range("JobCol_Master")
            'If job# matches textbox and if job# is to correct region then...
            If cell.Text = Txt And Cells(cell.row, 4).Value = "ID" Then
              Cells(cell.row, 11).Value = "Test"
              Exit Sub
                If cell.Text <> Txt Then
                    Exit Sub
                End If
            End If
        Next cell
    End With
 End If
如果是Txt“”,则
带工作表(“工作”)
对于范围内的每个单元格(“JobCol_Master”)
'如果作业与文本框匹配,并且作业要更正区域,则。。。
如果cell.Text=Txt和Cells(cell.row,4).Value=“ID”,则
单元格(cell.row,11).Value=“测试”
出口接头
如果是cell.Text Txt,则
出口接头
如果结束
如果结束
下一个细胞
以
如果结束

让我们知道您的进展情况:)

同意上面的@atclaus,更改为以下内容:

If Txt <> "" Then
    With sheets("Jobs")
        For Each cell In .Range("JobCol_Master")
            'If job# matches textbox and if job# is to correct region then...
            If cell.Text = Txt And Cells(cell.row, 4).Value = "ID" Then
              Cells(cell.row, 11).Value = "Test"
              Exit Sub
                If cell.Text <> Txt Then
                    Exit Sub
                End If
            End If
        Next cell
    End With
 End If
如果是Txt“”,则
带工作表(“工作”)
对于范围内的每个单元格(“JobCol_Master”)
'如果作业与文本框匹配,并且作业要更正区域,则。。。
如果cell.Text=Txt和Cells(cell.row,4).Value=“ID”,则
单元格(cell.row,11).Value=“测试”
出口接头
如果是cell.Text Txt,则
出口接头
如果结束
如果结束
下一个细胞
以
如果结束

让我们知道您的进展情况:)

我想您主要关注以下代码:

Option Explicit

Sub CloseJob()
    Dim cell As Range
    Dim Txt As String

    On Error GoTo errHndl

    With ThisWorkbook
        Txt = .Worksheets("ID").TextBoxID.Text
        If Txt <> "" Then
            With .Worksheets("Jobs")
                For Each cell In .Range("JobCol_Master")
                    'If job# matches textbox and if job# is to correct region then...
                    If cell.Text = Txt And .Cells(cell.row, 4).Value = "ID" Then
                        .Cells(cell.row, 11).Value = "Test"
                        Exit Sub '<-- remove it if you want to "mark" all job# matches in 'JobCol_Master' named range
                    End If
                Next cell
            End With
        End If
    End With
    MsgBox "Job not found."

    Exit Sub
errHndl:
        MsgBox "Error happened while working on: " + vbCrLf + _
            vbCrLf + vbCrLf + "Error " + _
            Str(Err.number) + ": " + Err.Description, vbCritical + vbOKOnly, "Error"
End Sub
选项显式
分包工作()
暗淡单元格作为范围
以字符串形式显示文本
关于错误转到errHndl
使用此工作簿
Txt=.Worksheets(“ID”).TextBoxID.Text
如果是“Txt”,则
带工作表(“工作”)
对于范围内的每个单元格(“JobCol_Master”)
'如果作业与文本框匹配,并且作业要更正区域,则。。。
如果cell.Text=Txt和.Cells(cell.row,4).Value=“ID”,则
.Cells(cell.row,11).Value=“测试”

退出Sub'我猜您主要关注以下代码:

Option Explicit

Sub CloseJob()
    Dim cell As Range
    Dim Txt As String

    On Error GoTo errHndl

    With ThisWorkbook
        Txt = .Worksheets("ID").TextBoxID.Text
        If Txt <> "" Then
            With .Worksheets("Jobs")
                For Each cell In .Range("JobCol_Master")
                    'If job# matches textbox and if job# is to correct region then...
                    If cell.Text = Txt And .Cells(cell.row, 4).Value = "ID" Then
                        .Cells(cell.row, 11).Value = "Test"
                        Exit Sub '<-- remove it if you want to "mark" all job# matches in 'JobCol_Master' named range
                    End If
                Next cell
            End With
        End If
    End With
    MsgBox "Job not found."

    Exit Sub
errHndl:
        MsgBox "Error happened while working on: " + vbCrLf + _
            vbCrLf + vbCrLf + "Error " + _
            Str(Err.number) + ": " + Err.Description, vbCritical + vbOKOnly, "Error"
End Sub
选项显式
分包工作()
暗淡单元格作为范围
以字符串形式显示文本
关于错误转到errHndl
使用此工作簿
Txt=.Worksheets(“ID”).TextBoxID.Text
如果是“Txt”,则
带工作表(“工作”)
对于范围内的每个单元格(“JobCol_Master”)
'如果作业与文本框匹配,并且作业要更正区域,则。。。
如果cell.Text=Txt和.Cells(cell.row,4).Value=“ID”,则
.Cells(cell.row,11).Value=“测试”

Exit Sub的“JobCol_Master”是“MasterData”范围的子范围吗?在任何情况下,为什么要将其作为您的for中的子范围?感谢您的关注。我设法让它工作起来。“JobCol_Master”是“MasterData”范围的一个子范围?在任何情况下,为什么要将其作为您的for中的子范围?感谢您的关注。我设法让它工作。一般来说,用
F8
单步执行代码将帮助您更快地到达故障点。一般来说,用
F8
单步执行代码将帮助您更快地到达故障点。