Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 VBA_Excel_Vba - Fatal编程技术网

.将数据复制到列表框时的偏移量-Excel VBA

.将数据复制到列表框时的偏移量-Excel VBA,excel,vba,Excel,Vba,我可以使用下面的代码将单元格值复制到多列listbox1。问题是,只有当且仅当Sheet3处于活动状态时,它才起作用,否则,我在Listbox1中没有任何内容 我尝试了Range.cells(cell.offset…,但也不起作用。任何帮助都将不胜感激 With Me.ListBox1 .Clear .ColumnCount = 6 .ColumnWidths = "20;60;260;80;50;50" For Each cell In ActiveWorkbook.Sheets(Shee

我可以使用下面的代码将单元格值复制到多列listbox1。问题是,只有当且仅当Sheet3处于活动状态时,它才起作用,否则,我在Listbox1中没有任何内容

我尝试了
Range.cells(cell.offset…
,但也不起作用。任何帮助都将不胜感激

  With Me.ListBox1
.Clear
.ColumnCount = 6
.ColumnWidths = "20;60;260;80;50;50"
For Each cell In ActiveWorkbook.Sheets(Sheet3.Name).Range(Cells(13, cbPartList.ListIndex + 7), Cells(txIndex.text, cbPartList.ListIndex + 7))
    If cell = "O" Or cell = "o" Then
        .AddItem cell
        .List(.ListCount - 1, 1) = cell.Offset(0, 1)
        .List(.ListCount - 1, 2) = cell.Offset(0, 4)
        .List(.ListCount - 1, 3) = cell.Offset(0, 2)
        .List(.ListCount - 1, 4) = cell.Offset(0, 7)
        .List(.ListCount - 1, 5) = cell.Offset(0, 9)
    End If
Next
End With

这段代码有几个问题。线路

For Each cell In ActiveWorkbook.Sheets(Sheet3.Name).Range(Cells(13, cbPartList.ListIndex + 7), Cells(txIndex.text, cbPartList.ListIndex + 7))
细分如下

  • active工作簿中的
    Sheet3
    。Sheets(Sheet3.Name)1是工作簿中包含正在执行的VBa代码的工作表的代码名。它可能对
    ActiveWorkbook有效,也可能无效`
  • 单元格(…)
    指的是
    活动工作簿中的单元格
  • 总的来说,只有当
    Activeworkbook
    是包含代码的书籍,并且
    Sheet3
    处于活动状态时,这才起作用

    你应该

    声明并设置工作簿变量

    Dim wb as Workbook
    
    设置对特定工作簿的引用。这可能是活动的书本

    Set wb = ActiveWorkbook
    
    或特定的工作簿

    Set wb = Workbooks("Name of Workbook")
    
    然后声明一个工作表变量,并将其设置为特定的工作表

    Dim ws as Worksheet
    Set ws = wb.WorkSheets("SheetName")
    
    (如果您特别想使用
    CodeName
    s,则会有点不同)

    声明循环时,请使用

    Dim Cell as Range
    
    With ws
        For each Cell in .Range(.Cells(...), .Cells(...))
    

    请注意
    。这些是指带有
    块对象的

    当前,我有一个解决方法,通过激活Sheet3,然后移回我正在处理的工作表(不是Sheet3)@Alireza-如果我在不是Sheet3的工作表上运行代码,则错误为运行时错误“1004”,应用程序定义或对象定义的错误“在代码的哪一行?”ActiveWorkbook.Sheets(Sheet3.Name)。Range(单元格(13,cbPartList.ListIndex+7),单元格(txIndex.text,cbPartList.ListIndex+7))-只要我在Sheet3上运行代码就可以了-这对我来说有点奇怪:Dim Sheet:Set Sheet=ActiveWorkbook.Sheets(Sheet3.Name):对于sheet.Range(sheet.Cells(13,cbPartList.ListIndex+7),sheet.Cells(txIndex.text,cbPartList.ListIndex+7))中的每个单元格,非常感谢,特别是指出了我的错误之处。:)这比我在Sheet3和另一个sheet之间切换的解决方法要好得多。每当您使用多张工作表时,我可以添加以下内容:,尝试始终指向目标工作表,并最终使用
    .Address
    命令寻址单元格/区域