Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
VBA-获取运行时错误';1004';运行此代码时_Vba_Excel - Fatal编程技术网

VBA-获取运行时错误';1004';运行此代码时

VBA-获取运行时错误';1004';运行此代码时,vba,excel,Vba,Excel,我是VBA新手,正在尝试将两个不同的列合并到另一个工作表中的一列中 我的问题是,我得到了一个“运行时错误'1004'应用程序或对象定义错误” 据我所知,这个错误很可能与工作表(“Tabelle1”)有关,但我不知道如何修复它 代码如下: Sub test2() Dim name1 As Range, size As Integer size = WorksheetFunction.CountA(Columns(3)) With Sheets("Tabelle1")

我是VBA新手,正在尝试将两个不同的列合并到另一个工作表中的一列中

我的问题是,我得到了一个“运行时错误'1004'应用程序或对象定义错误”

据我所知,这个错误很可能与
工作表(“Tabelle1”)
有关,但我不知道如何修复它

代码如下:

Sub test2()
    Dim name1 As Range, size As Integer
    size = WorksheetFunction.CountA(Columns(3))

    With Sheets("Tabelle1")
        For Each name1 In Sheets("advprsrv").Range("D2:D" & size)
            If Not (Trim(name1.Value & vbNullString) = vbNullString) Then
                .Cells(name1.Row, 1).Value = LCase(name1.Value & " " & Range(Cells(name1.Row, name1.Column)))
            End If
        Next name1
    End With
End Sub

编辑:我用F8检查了代码,似乎在这一行ws.Cells(name1.Row,1.Value=LCase(name1.Value&=“Range(Cells(name1.Row,name1.Column.Value))尝试下面的代码,在代码注释中解释:

Option Explicit

Sub test2()

    Dim name1 As Range, size As Long
    Dim TblSht As Worksheet
    Dim advpSht As Worksheet

    ' set the worksheet object and trap errors in case it doesn't exist
    On Error Resume Next
    Set TblSht = ThisWorkbook.Worksheets("Tabelle1")
    On Error GoTo 0
    If TblSht Is Nothing Then ' in case someone renamed the "Expense" Sheet
        MsgBox "Tabelle1 sheet has been renamed", vbCritical
        Exit Sub
    End If

    ' set the worksheet object and trap errors in case it doesn't exist
    On Error Resume Next
    Set advpSht = ThisWorkbook.Worksheets("advprsrv")
    On Error GoTo 0
    If advpSht Is Nothing Then ' in case someone renamed the "Expense" Sheet
        MsgBox "advprsrv sheet has been renamed", vbCritical
        Exit Sub
    End If

    With advpSht
        ' safer way to get the last row from column "D" (since later on you use it in a Range in Column "D")
        size = .Cells(.Rows.Count, "D").End(xlUp).Row

        For Each name1 In .Range("D2:D" & size)
            If Trim(name1.Value2) <> "" Then
                ' ***** Not sure about the connection between the 2 sheets *****
                TblSht.Cells(name1.Row, 1).Value = LCase(name1.Value2 & " " & TblSht.Cells(name1.Row, name1.Column))
            End If
        Next name1            
    End With

End Sub
选项显式
子测试2()
尺寸名称1为范围,尺寸为长度
将TblSht设置为工作表
Dim advpSht As工作表
'设置工作表对象并在不存在时捕获错误
出错时继续下一步
设置TblSht=ThisWorkbook.Worksheets(“表1”)
错误转到0
如果TblSht不算什么,那么“如果有人重命名了“费用”表
MsgBox“Tabelle1工作表已重命名”,vbCritical
出口接头
如果结束
'设置工作表对象并在不存在时捕获错误
出错时继续下一步
设置advpSht=thispoolk.Worksheets(“advpsrv”)
错误转到0
如果advpSht不算什么,那么“如果有人重命名了“费用”表
MsgBox“advprsrv工作表已重命名”,vbCritical
出口接头
如果结束
用advpSht
'从列“D”中获取最后一行的更安全的方法(因为以后您会在列“D”的范围内使用它)
大小=.Cells(.Rows.Count,“D”).End(xlUp).Row
对于1英寸范围内的每个名称(“D2:D”和尺寸)
如果修剪(名称1.Value2)”,则
“******不确定两张图纸之间的连接*****
TblSht.Cells(name1.Row,1.Value=LCase(name1.Value2&&&TblSht.Cells(name1.Row,name1.Column))
如果结束
下一个名字1
以
端接头

Option Explicit
放在模块的最顶端,这将极大地帮助您解决此类问题。我认为您需要在name1.value&=“Range(Cells(name1.Row,name1.Column)))的末尾添加一个.value,因为您连接的是一个范围,而不是范围中的值。我没有看到缺少一个
.value
,刚刚尝试过,但不幸的是它没有解决主要问题可能
范围(单元格(name1.Row,name1.Column))
应该在
范围和
单元格中都有一个点,比如:
.Range(.Cells(name1.Row,name1.Column))
,或者它应该符合特定的工作表。谢谢您的帮助。它将name1中的值写入新工作表,但它不连接其他单元格。您出现了“错误”,因为您不知道列之间的连接。我把它修好了,现在它工作得很好。谢谢你的帮助。@fscopulovic我不知道这两者之间的联系,不客气:)