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-不在我的while循环中循环_Excel_Vba - Fatal编程技术网

Excel VBA-不在我的while循环中循环

Excel VBA-不在我的while循环中循环,excel,vba,Excel,Vba,因此,我有一个代码,它将数据粘贴到excel列中,然后我尝试循环该列中的数据,并从B列中的每个值的数据创建一个新的工作表,但它在完成此操作一次后停止,而不是循环该列 有什么想法吗 i = 4 Do While Cells(i, 2).Value <> "" Worksheets("Front").Cells(5, 3).Value = Cells(i, 2) Worksheets("Front").Se

因此,我有一个代码,它将数据粘贴到excel列中,然后我尝试循环该列中的数据,并从B列中的每个值的数据创建一个新的工作表,但它在完成此操作一次后停止,而不是循环该列

有什么想法吗

  i = 4

Do While Cells(i, 2).Value <> ""
    Worksheets("Front").Cells(5, 3).Value = Cells(i, 2)
    Worksheets("Front").Select
    Range("C2:M35").Select
    Selection.Copy
    Sheets("PlaceHolder").Select
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    Dim wks As Worksheet
    Set wks = ActiveSheet
    ActiveSheet.Copy After:=Worksheets(Sheets.Count)
    ActiveSheet.Name = wks.Range("C5").Value
    i = i + 1
Loop
i=4
执行While单元格(i,2)。值“”
工作表(“正面”)。单元格(5,3)。值=单元格(i,2)
工作表(“正面”)。选择
范围(“C2:M35”)。选择
选择,复制
图纸(“占位符”)。选择
范围(“C2”)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
Selection.Paste特殊粘贴:=xlPasteValuesAndNumberFormats,操作:=_
xlNone,SkipBlanks:=False,转置:=False
将工作作为工作表
设置wks=ActiveSheet
ActiveSheet.Copy After:=工作表(Sheets.Count)
ActiveSheet.Name=wks.Range(“C5”).Value
i=i+1
环
代码中的“单元格”和“范围”都指的是活动工作表,它可能以工作表(“前”)开头,然后您可以使用工作表(“占位符”)将活动工作表更改为工作表(“占位符”)。选择语句。我不确定创建新工作表是否会将ActiveWorksheet设置为新工作表,我不需要知道如何使代码正常工作。您不应该依赖于对ActiveWorksheet的隐式引用,而应该像这样使用显式引用

'Style note: Always put Option Explict at the top of the module
'and declare all your variables at the top of the subroutine. 
Dim wsFront As Worksheet
Dim wsPlaceholder As Worksheet
Dim wsNewSheet As Worksheet
Dim i As Integer

Set wsFront = Worksheets("Front")
Set wsPlaceholder = Worksheets("Placeholder")

i = 4

Do While wsFront.Cells(i, 2).Value <> ""

    ' Copy data from Worksheets("Front")
    wsFront.Cells(5, 3).Value = Cells(i, 2)
    wsFront.Select
    wsFront.Range("C2:M35").Select
    Selection.Copy
    
    ' Paste data to Worksheets("Placeholder")
    wsPlaceholder.Select
    wsPlaceholder.Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    
    ' Copy Worksheets("Placeholder") to new worksheet
    wsPlaceholder.Copy After:=Worksheets(Sheets.Count)
    
    'Get a reference to the new worksheet
    Set wsNewSheet = Worksheets(Worksheets.Count)
    wsNewSheet.Name = wsPlaceholder.Range("C5").Value
    i = i + 1
Loop
”样式说明:始终将选项Explict放在模块顶部
'并在子例程顶部声明所有变量。
将前视图作为工作表
将占位符设置为工作表
将新闻纸设置为工作表
作为整数的Dim i
设置wsFront=工作表(“Front”)
设置wsPlaceholder=工作表(“占位符”)
i=4
在wsFront.Cells(i,2.Value)时执行此操作“”
'从工作表复制数据(“正面”)
wsFront.Cells(5,3).Value=Cells(i,2)
wsFront。选择
wsFront.范围(“C2:M35”)。选择
选择,复制
'将数据粘贴到工作表(“占位符”)
wsPlaceholder.Select
wsPlaceholder.Range(“C2”)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
Selection.Paste特殊粘贴:=xlPasteValuesAndNumberFormats,操作:=_
xlNone,SkipBlanks:=False,转置:=False
'将工作表(“占位符”)复制到新工作表
wsPlaceholder.Copy After:=工作表(Sheets.Count)
'获取对新工作表的引用
设置wsNewSheet=Worksheets(Worksheets.Count)
wsNewSheet.Name=wsPlaceholder.Range(“C5”).Value
i=i+1
环

在Excel中使用VBA时,通常不需要选择或激活任何内容(尽管宏记录器可能会尝试建议)

如果您计划在Excel中执行大量VBA工作,则强烈建议阅读以下内容:

将wsData设置为工作表、wsFront设置为工作表、wsPH设置为工作表、v
将wb设置为工作簿,我设置为长
设置wb=ThisWorkbook
设置wsData=ActiveSheet'或其他特定的工作表
设置wsFront=wb.工作表(“Front”)
设置wsPH=wb.工作表(“占位符”)
i=4
执行wsData.Cells(i,2.Value)时
v=wsData.Cells(i,2).Value
wsFront.Cells(5,3).Value=v
wsFront.Range(“C2:M35”)。副本
具有wsPH范围(“C2”)
.Paste特殊粘贴:=xlPasteValues
.Paste特殊粘贴:=XLPasteValues和NumberFormats
以
wsPH.Copy After:=wb.Worksheets(Sheets.Count)
wb.工作表(Sheets.Count).Name=v
环

一个单元格可能是空白的,它也在使用活动的工作表,我认为它创建后将是新的工作表。