Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 当数据来自其他工作表时,基于userform自动填充表格_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 当数据来自其他工作表时,基于userform自动填充表格

Excel 当数据来自其他工作表时,基于userform自动填充表格,excel,vba,excel-formula,Excel,Vba,Excel Formula,我想在表中得到结果,数据来自我的userform H列由活动工作表中的G列和外部工作表中的AD列之和组成,即“公式” 我有一个userform,当我在这个userform中输入一些数据时,它将填充表中的整行 H列不会直接从Userform输入,因为它包含上面提到的公式 我想在输入相邻的G列和L列时自动填充H列 此自动填充必须基于上述公式,其中“公式”表中的列AD基于如下图所示的IF语句。此IF语句与活动工作表中的L列相关,用于确定整数值范围 为此,我使用以下代码从我的userform进行输入

我想在表中得到结果,数据来自我的userform

H列由活动工作表中的G列和外部工作表中的AD列之和组成,即“公式”

我有一个userform,当我在这个userform中输入一些数据时,它将填充表中的整行

H列不会直接从Userform输入,因为它包含上面提到的公式

我想在输入相邻的G列和L列时自动填充H列

此自动填充必须基于上述公式,其中“公式”表中的列AD基于如下图所示的IF语句。此IF语句与活动工作表中的L列相关,用于确定整数值范围

为此,我使用以下代码从我的userform进行输入。通过插入上述H列自动填充的潜在解决方案,对其进行进一步修改

Private Sub CommandButton1_Click()
Dim wks As Worksheet, wkf As Worksheet
Set wks = ThisWorkbook.Sheets("Tracker")
Set wks = ThisWorkbook.Sheets("Formulas")
AppendToColumn wks, "A", JobID.Text  'Adds the TextBox3 into Col A & Last Blank Row
AppendToColumn wks, "B", CoordName.Text
AppendToColumn wks, "C", PlannerName.Text
AppendToColumn wks, "D", Surveyor.Text
AppendToColumn wks, "E", RRGuy.Text
AppendToColumn wks, "F", DateBox.Text
AppendToColumn wks, "G", TimeBox.Text
AppendToColumn wks, "I", AddressBox.Text
AppendToColumn wks, "J", CityBox.Text
AppendToColumn wks, "K", PostcodeBox.Text
AppendToColumn wks, "L", THPBox.Text
AppendToColumn wks, "M", JointBox.Text

Dim lastrowG As Long, ListIndex As Long
lastrowG = AppendToColumn(wks, "G", TimeBox.Text)
lastrowAD = wks.Range("AD" & ListIndex + 1)
AppendToColumn wks, "H", ("=G" & lastrowG & " + Formulas!AD" & lastrowAD)  

MsgBox ("All data has been added successfully")
End Sub


Private Function AppendToColumn(ByRef ws As Worksheet, _
                       ByVal columm As Variant, _
                       ByVal value As Variant, _
                       Optional ByVal kindOfValue As DataType = DataValue) As Long
'--- copies the given value to the first empty cell in the
'    specified column. the "columm" value can be either numeric
'    or alphabetic. RETURNS the index of the last row
Dim colIndex As Long
Dim lastRow As Long
Dim firstEmptyRow As Long
With ws
    '--- quick conversion to make sure we have a numeric column index
    colIndex = IIf(IsNumeric(columm), columm, .Cells(1, columm).Column)
    lastRow = .Cells(.Rows.Count, colIndex).End(xlUp).Row
    '--- if the column is completely empty, the first empty row is 1,
    '    otherwise it's one row down from the last row
    firstEmptyRow = IIf(IsEmpty(.Cells(lastRow, colIndex)), 1, lastRow + 1)
    Select Case kindOfValue
    Case DataValue
        .Cells(firstEmptyRow, colIndex).value = value
    Case FormulaValue
        .Cells(firstEmptyRow, colIndex).Formula = value
    End Select
End With
AppendToColumn = lastRow
End Function
我得到一个错误:

类型不匹配

表示以下行:

lastrowAD = wks.Range("AD" & ListIndex + 1)
AppendToColumn wks, "H", ("=G" & lastrowG & " + Formulas!AD" & lastrowAD)

您发布的代码剪贴不会编译。这使得帮助你变得非常困难。请确保只发布再现您所遇到问题所需的最低代码。lastrowAD未声明。您需要在每个模块的顶部放置
选项Explicit
。这迫使您声明所有变量。当您控制每个变量的类型时,您将不再得到类型不匹配

从你的用法我可以看出,
lastrowAD
是一个很长的单词。您正在使用一个远程对象指定远程对象。这确实是一种类型不匹配。如果我们按照你的代码所说的做,我可以得到最后一行的列广告,这将解决问题

Option Explicit

Private Sub CommandButton1_Click()
    Dim wks As Worksheet, wkf As Worksheet
    Set wks = ThisWorkbook.Sheets("Tracker")
    Set wks = ThisWorkbook.Sheets("Formulas")
    AppendToColumn wks, "A", JobID.Text  'Adds the TextBox3 into Col A & Last Blank Row
    AppendToColumn wks, "B", CoordName.Text
    AppendToColumn wks, "C", PlannerName.Text
    AppendToColumn wks, "D", Surveyor.Text
    AppendToColumn wks, "E", RRGuy.Text
    AppendToColumn wks, "F", DateBox.Text
    AppendToColumn wks, "G", TimeBox.Text
    AppendToColumn wks, "I", AddressBox.Text
    AppendToColumn wks, "J", CityBox.Text
    AppendToColumn wks, "K", PostcodeBox.Text
    AppendToColumn wks, "L", THPBox.Text
    AppendToColumn wks, "M", JointBox.Text

    Dim lastrowG As Long, ListIndex As Long
    Dim lastrowAD As Long
    lastrowG = AppendToColumn(wks, "G", TimeBox.Text)
    lastrowAD = wks.Range("AD" & Rows.CountLarge).End(xlUp).Row
    AppendToColumn wks, "H", ("=G" & lastrowG & " + Formulas!AD" & lastrowAD)

    MsgBox ("All data has been added successfully")
End Sub

这里是错误。过程只考虑最后一组WKS,因此在程序中没有引用<代码> TeasBooWork.Tabl(“跟踪器”)< /C>。这就是错误的原因

Set wks = ThisWorkbook.Sheets("Tracker")
Set wks = ThisWorkbook.Sheets("Formulas")

另外,我不知道如何增加ListIndex的值。因此,lastrowAD将始终是=wks范围AD1

我最终通过以下方式解决了它:

 Private Sub CommandButton1_Click()
 Dim wks As Worksheet, wkf As Worksheet
 Dim lastrowG As Long, lastrowL As Long, LastrowH As Long, LastrowS As Long, LastrowAF 
 As Long, LastrowAE As Long, ListIndex As Long
 Set wks = ThisWorkbook.Sheets("Tracker")
 Set wkf = ThisWorkbook.Sheets("Formulas")
AppendToColumn wks, "A", JobID.Text  'Adds the TextBox3 into Col A & Last Blank Row
AppendToColumn wks, "B", CoordName.Text
AppendToColumn wks, "C", PlannerName.Text
AppendToColumn wks, "D", Surveyor.Text
AppendToColumn wks, "E", RRGuy.Text
AppendToColumn wks, "F", DateBox.Text
AppendToColumn wks, "G", TimeBox.Text
'AppendToColumn wks, "H", TimeEndBox.Text
AppendToColumn wks, "I", AddressBox.Text
AppendToColumn wks, "J", CityBox.Text
AppendToColumn wks, "K", PostcodeBox.Text
AppendToColumn wks, "L", THPBox.Text
AppendToColumn wks, "M", JointBox.Text
AppendToColumn wks, "N", FibreBox.Text
AppendToColumn wks, "O", FibreEquipmentBox.Text
AppendToColumn wks, "P", SpareFibreBox.Text

lLastrowG = wks.Range("G" & Rows.Count).End(xlUp).Row
LastrowH = wks.Range("H" & Rows.Count).End(xlUp).Row + 1
LastrowL = wks.Range("L" & Rows.Count).End(xlUp).Row
LastrowAF = wkf.Range("AF" & Rows.Count).End(xlUp).Row + 1

'LastrowAE = Sheets("Formulas").Range("AE" & Rows.Count).End(xlUp).Row + 1
 wkf.Range("AF" & LastrowAF).Formula = _
"=IF(Tracker!L" & lastrowL & "<20,""1:00"",""2:00"")"
'wkf.Range("AE" & LastrowAE).value = ("=Formulas!AD" & LastrowAD)
 wks.Range("H" & LastrowH).value = ("=G" & lastrowG & "+Formulas!AF" & LastrowAF)

MsgBox ("All data has been added successfully")
Private子命令按钮1\u单击()
将wks设置为工作表,将wkf设置为工作表
将最后一行变暗为长,最后一行变长,最后一行变长,最后一行变长,最后一行变长
一样长,LastrowAE一样长,ListIndex一样长
Set wks=thishworkbook.Sheets(“跟踪器”)
Set wkf=ThisWorkbook.Sheets(“公式”)
AppendToColumn wks,“A”,JobID.Text'将TextBox3添加到Col A&最后一个空行中
附录列wks,“B”,坐标名.Text
附录列wks,“C”,Planner Name.Text
柱状工程附录,“D”,测量员文本
附录列wks,“E”,RRGuy.Text
附录列wks,“F”,日期框.Text
附录列wks,“G”,时间框。文本
'附录列wks,“H”,TimeEndBox.Text
附录列wks,“I”,AddressBox.Text
附录列wks,“J”,CityBox.Text
附录列wks,“K”,邮政编码框。文本
附录列wks,“L”,THPBox.Text
附录列wks,“M”,JointBox.Text
附录列wks,“N”,纤维盒。文本
附录列wks,“O”,纤维设备箱。文本
附录列wks,“P”,SpareFibreBox.Text
lLastrowG=wks.Range(“G”和Rows.Count).End(xlUp).Row
LastrowH=wks.Range(“H”和Rows.Count)。End(xlUp)。Row+1
LastrowL=wks.Range(“L”和Rows.Count).End(xlUp).Row
LastrowAF=wkf.Range(“AF”和Rows.Count)。End(xlUp)。Row+1
'LastrowAE=Sheets(“公式”).范围(“AE”和Rows.Count).结束(xlUp).行+1
wkf.Range(“AF”和LastrowAF)。公式=_

“=IF(Tracker!L)&lastrowL&"始终将
Option Explicit
放在每个模块的顶部。声明所有变量。您没有将
Dim ListIndex声明为Long
任何位置。这就是错误的含义。在第二个示例中,您将两个变量传递给需要三个变量的子模块,这也是一个非常明显的错误。您的提示很好,但这里仍然缺少一些内容。我更新了查询,你可以看到。不,这个问题到处都是。现在还不清楚你的问题是什么。我已经解决了多个问题,你一直在问更多的问题。这个网站不是一个论坛。它是一个问答网站,你问一个清晰的问题,有一个清晰的答案。为了避免沮丧,请阅读这个guide:除了你在原来的帖子中列出了两个错误,都已经解决了。一个问题,一个答案。如果你有新问题,你应该问一个新问题。
Set wks=thiswook.Sheets(“跟踪器”)Set wks=thiswook.Sheets(“公式”)
导致错误。这不是类型不匹配错误的原因,但您是正确的,我们无法告诉他要使用哪张图纸,这不会导致类型不匹配,但这是一个很好的观察结果